diff --git a/.gitignore b/.gitignore index dc08fd8e40d16a42019288959e8c007b4fb5eae6..79ef1c7bef077a3e54fb4d232c05ff82c66cb257 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,71 @@ +#!/bin/bash # -# gitignore lists all directories and files which should not be versionized!!! +# @Author: Anne Philipp # +# @Date: January 2018 +# +# @Description: +# gitignore lists all directories and files which should +# not be versionized!!! +# +# @Licence: +# (C) Copyright 2014-2019. +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +# +# ----------------------------------------------------------------- # these dirs and files shouldn't be versionized at any time in this project!!! *.pyc -*.o -*.mod +Source/Fortran/*.o +Source/Fortran/*.mod +Source/Fortran/calc_etadot* *.tar* -*.ksh -mk_upload_tarball.sh -/work* -/src/CONVERT2 -/python/ECMWF_ENV +Run/ECMWF_ENV +Run/Workspace/* +Run/Jobscripts/*sh +Test/Installation/Convert/VERTICAL.EC +Test/Installation/Convert/fort.15 +For_developers/Sphinx/build_temp + +# Temporary ignorance of files!!!! +Source/Fortran/Makefile.ecgate +Source/Fortran/Makefile.local.gfortran.gw74 +Run/Control/Testgrid/ +Run/Control/notPublic/ +setup_local.sh +Run/run.sh +Run/run_local.sh +setup.sh +Source/Fortran/pycallgraph.png +Source/Python/pylint_report_7.1.txt +Source/.metrics +For_developers/sphinx-fortran/ + + +For_developers/GUIDE.odt +For_developers/COMMANDS +For_developers/class_diagram +For_developers/classes.dot +For_developers/classes.png +For_developers/gen_docu.sh +For_developers/mk_pdf2png.sh +For_developers/packages.dot +For_developers/packages.png +For_developers/Testcases.txt +For_developers/Metriken.txt +For_developers/FE_testing.txt +For_developers/Liste_FE_Functions_Testcoverage.xlsx + + + + + +Emoslib +Unused_input_files +Unused_output diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000000000000000000000000000000000..be953abdf406c094b1eaac6170f9dde850469fb5 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at fp-dev(at)lists.univie.ac.at. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq \ No newline at end of file diff --git a/Documentation/html/.buildinfo b/Documentation/html/.buildinfo new file mode 100644 index 0000000000000000000000000000000000000000..11176f535a0a18b9caaff112ecccb0b64fd78da0 --- /dev/null +++ b/Documentation/html/.buildinfo @@ -0,0 +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 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/Documentation/html/.nojekyll b/Documentation/html/.nojekyll new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Documentation/html/Developers/gen_docu.html b/Documentation/html/Developers/gen_docu.html new file mode 100644 index 0000000000000000000000000000000000000000..47e5add322188c49f086f7ba283f06e6319ae0f3 --- /dev/null +++ b/Documentation/html/Developers/gen_docu.html @@ -0,0 +1,274 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Update Documentation — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Changelog" href="../changelog.html" /> + <link rel="prev" title="Developer Guide" href="../dev_guide.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../evaluation.html">Evaluation</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../dev_guide.html">Developer Guide</a><ul class="current"> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Update Documentation</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#additional-software">Additional Software</a></li> +<li class="toctree-l3"><a class="reference internal" href="#online-documentation-with-sphinx">Online-documentation with Sphinx</a><ul> +<li class="toctree-l4"><a class="reference internal" href="#sequence-diagramms">Sequence diagramms</a></li> +<li class="toctree-l4"><a class="reference internal" href="#block-diagramms">Block diagramms</a></li> +</ul> +</li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../changelog.html">Changelog</a></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../dev_guide.html">Developer Guide</a> »</li> + + <li>Update Documentation</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Developers/gen_docu.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="update-documentation"> +<h1>Update Documentation<a class="headerlink" href="#update-documentation" title="Permalink to this headline">¶</a></h1> +<p>UNDER CONSTRUCTION</p> +<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> +<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> +<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> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Fontpath for seqdiag (truetype font)</span> +<span class="nv">seqdiag_fontpath</span> <span class="o">=</span> <span class="s1">'/usr/share/fonts/dejavu/DejaVuSerif.ttf'</span> +</pre></div> +</div> +</div> +<div class="section" id="block-diagramms"> +<h3>Block diagramms<a class="headerlink" href="#block-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> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Fontpath for blockdiag (truetype font)</span> +<span class="nv">blockdiag_fontpath</span> <span class="o">=</span> <span class="s1">'/usr/share/fonts/dejavu/DejaVuSerif.ttf'</span> +</pre></div> +</div> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="../changelog.html" class="btn btn-neutral float-right" title="Changelog" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="../dev_guide.html" class="btn btn-neutral float-left" title="Developer Guide" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/css/bootstrap.css b/Documentation/html/Documentation/Api/Fortran/css/bootstrap.css new file mode 100644 index 0000000000000000000000000000000000000000..57846456ceeeac2900b4239cd505c655d79a4415 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/css/bootstrap.css @@ -0,0 +1,6013 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=f8210fe4edf87d7604a7) + * Config saved to config.json and https://gist.github.com/f8210fe4edf87d7604a7 + */ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +mark { + background: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + select { + background: #fff !important; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\2a"; +} +.glyphicon-plus:before { + content: "\2b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333333; + background-color: #ffffff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + padding: 4px; + line-height: 1.42857143; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + background-color: #fcf8e3; + padding: .2em; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eeeeee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; + text-align: right; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #ffffff; + background-color: #333333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + word-break: break-all; + word-wrap: break-word; + color: #333333; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +.row { + margin-left: -15px; + margin-right: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0%; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #dddddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dddddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #dddddd; +} +.table .table { + background-color: #ffffff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #dddddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #dddddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-child(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + overflow-x: auto; + min-height: 0.01%; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #dddddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.form-control::-moz-placeholder { + color: #999999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999999; +} +.form-control::-webkit-input-placeholder { + color: #999999; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; + opacity: 1; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="month"] { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0; +} +.input-sm, +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm, +select.form-group-sm .form-control { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +textarea.form-group-sm .form-control, +select[multiple].input-sm, +select[multiple].form-group-sm .form-control { + height: auto; +} +.input-lg, +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-lg, +select.form-group-lg .form-control { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +textarea.form-group-lg .form-control, +select[multiple].input-lg, +select[multiple].form-group-lg .form-control { + height: auto; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + border-color: #3c763d; + background-color: #dff0d8; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + border-color: #8a6d3b; + background-color: #fcf8e3; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + border-color: #a94442; + background-color: #f2dede; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 7px; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.3px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333333; + text-decoration: none; +} +.btn:active, +.btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + pointer-events: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; +} +.btn-default:hover, +.btn-default:focus, +.btn-default.focus, +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #ffffff; + border-color: #cccccc; +} +.btn-default .badge { + color: #ffffff; + background-color: #333333; +} +.btn-primary { + color: #ffffff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary.focus, +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #ffffff; +} +.btn-success { + color: #ffffff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:hover, +.btn-success:focus, +.btn-success.focus, +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #ffffff; +} +.btn-info { + color: #ffffff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:hover, +.btn-info:focus, +.btn-info.focus, +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #ffffff; +} +.btn-warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:hover, +.btn-warning:focus, +.btn-warning.focus, +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #ffffff; +} +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger.focus, +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #ffffff; +} +.btn-link { + color: #337ab7; + font-weight: normal; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; + visibility: hidden; +} +.collapse.in { + display: block; + visibility: visible; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; + -webkit-transition-duration: 0.35s; + -o-transition-duration: 0.35s; + transition-duration: 0.35s; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + text-decoration: none; + color: #262626; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #337ab7; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: not-allowed; +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + left: auto; + right: 0; +} +.dropdown-menu-left { + left: 0; + right: auto; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid; + content: ""; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-bottom-left-radius: 4px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555555; + text-align: center; + background-color: #eeeeee; + border: 1px solid #cccccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.nav > li.disabled > a { + color: #777777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777777; + text-decoration: none; + background-color: transparent; + cursor: not-allowed; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eeeeee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #dddddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555555; + background-color: #ffffff; + border: 1px solid #dddddd; + border-bottom-color: transparent; + cursor: default; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #dddddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #dddddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.tab-content > .tab-pane { + display: none; + visibility: hidden; +} +.tab-content > .active { + display: block; + visibility: visible; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + visibility: visible !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; + height: 50px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + margin-right: 15px; + padding: 9px 10px; + margin-top: 8px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + margin-left: -15px; + margin-right: -15px; + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 8px; + margin-bottom: 8px; +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-left: 15px; + margin-right: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777777; +} +.navbar-default .navbar-nav > li > a { + color: #777777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #dddddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #dddddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + background-color: #e7e7e7; + color: #555555; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777777; +} +.navbar-default .navbar-link:hover { + color: #333333; +} +.navbar-default .btn-link { + color: #777777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #cccccc; +} +.navbar-inverse { + background-color: #222222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + background-color: #080808; + color: #ffffff; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #ffffff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + content: "/\00a0"; + padding: 0 5px; + color: #cccccc; +} +.breadcrumb > .active { + color: #777777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + line-height: 1.42857143; + text-decoration: none; + color: #337ab7; + background-color: #ffffff; + border: 1px solid #dddddd; + margin-left: -1px; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + color: #23527c; + background-color: #eeeeee; + border-color: #dddddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #ffffff; + background-color: #337ab7; + border-color: #337ab7; + cursor: default; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777777; + background-color: #ffffff; + border-color: #dddddd; + cursor: not-allowed; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + list-style: none; + text-align: center; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777777; + background-color: #ffffff; + cursor: not-allowed; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + color: #ffffff; + line-height: 1; + vertical-align: baseline; + white-space: nowrap; + text-align: center; + background-color: #777777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #ffffff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding: 30px 15px; + margin-bottom: 30px; + color: inherit; + background-color: #eeeeee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding: 48px 0; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-left: 60px; + padding-right: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: border 0.2s ease-in-out; + -o-transition: border 0.2s ease-in-out; + transition: border 0.2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-left: auto; + margin-right: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + background-color: #dff0d8; + border-color: #d6e9c6; + color: #3c763d; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + background-color: #d9edf7; + border-color: #bce8f1; + color: #31708f; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + background-color: #fcf8e3; + border-color: #faebcc; + color: #8a6d3b; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + background-color: #f2dede; + border-color: #ebccd1; + color: #a94442; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + margin-bottom: 20px; + padding-left: 0; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #ffffff; + border: 1px solid #dddddd; +} +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item { + color: #555555; +} +a.list-group-item .list-group-item-heading { + color: #333333; +} +a.list-group-item:hover, +a.list-group-item:focus { + text-decoration: none; + color: #555555; + background-color: #f5f5f5; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + background-color: #eeeeee; + color: #777777; + cursor: not-allowed; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #ffffff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +a.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +a.list-group-item-success.active:hover, +a.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +a.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +a.list-group-item-info.active:hover, +a.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +a.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +a.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #dddddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-left: 15px; + padding-right: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #dddddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + border: 0; + margin-bottom: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #dddddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #dddddd; +} +.panel-default { + border-color: #dddddd; +} +.panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #dddddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #dddddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #dddddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #ffffff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; +} +.embed-responsive.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.modal-open { + overflow: hidden; +} +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + -webkit-background-clip: padding-box; + background-clip: padding-box; + outline: 0; +} +.modal-backdrop { + position: absolute; + top: 0; + right: 0; + left: 0; + background-color: #000000; +} +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; + min-height: 16.42857143px; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + visibility: visible; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-weight: normal; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); +} +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} +.tooltip.top { + margin-top: -3px; + padding: 5px 0; +} +.tooltip.right { + margin-left: 3px; + padding: 0 5px; +} +.tooltip.bottom { + margin-top: 3px; + padding: 5px 0; +} +.tooltip.left { + margin-left: -3px; + padding: 0 5px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.top-left .tooltip-arrow { + bottom: 0; + right: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + background-color: #ffffff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + white-space: normal; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + border-width: 10px; + content: ""; +} +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -11px; +} +.popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #ffffff; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); +} +.popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #ffffff; +} +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -11px; +} +.popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #ffffff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); +} +.popover.left > .arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #ffffff; + bottom: -10px; +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; + visibility: hidden !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} diff --git a/Documentation/html/Documentation/Api/Fortran/css/bootstrap.min.css b/Documentation/html/Documentation/Api/Fortran/css/bootstrap.min.css new file mode 100644 index 0000000000000000000000000000000000000000..a40d9432f681c323c655871123ddeb3070b03cb7 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/css/bootstrap.min.css @@ -0,0 +1,10 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=f8210fe4edf87d7604a7) + * Config saved to config.json and https://gist.github.com/f8210fe4edf87d7604a7 + *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff !important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm,.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,select.form-group-sm .form-control{height:30px;line-height:30px}textarea.input-sm,textarea.form-group-sm .form-control,select[multiple].input-sm,select[multiple].form-group-sm .form-control{height:auto}.input-lg,.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg,select.form-group-lg .form-control{height:46px;line-height:46px}textarea.input-lg,textarea.form-group-lg .form-control,select[multiple].input-lg,select[multiple].form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;visibility:visible !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}.media{margin-top:15px}.media:first-child{margin-top:0}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;visibility:visible;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:normal;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:normal;line-height:1.42857143;text-align:left;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}} \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/css/font-awesome.css b/Documentation/html/Documentation/Api/Fortran/css/font-awesome.css new file mode 100644 index 0000000000000000000000000000000000000000..4040b3cf859f6bb6b9bb349720af23a5e1cd277c --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/css/font-awesome.css @@ -0,0 +1,1672 @@ +/*! + * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.2.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} diff --git a/Documentation/html/Documentation/Api/Fortran/css/font-awesome.min.css b/Documentation/html/Documentation/Api/Fortran/css/font-awesome.min.css new file mode 100644 index 0000000000000000000000000000000000000000..ec53d4d6d5bf13db8ca757ea991a9c7839f23c89 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.2.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"} \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/css/local.css b/Documentation/html/Documentation/Api/Fortran/css/local.css new file mode 100644 index 0000000000000000000000000000000000000000..44e3dec2a0085374d61777aa4ae8688a9aa6be15 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/css/local.css @@ -0,0 +1,282 @@ +body { + padding-top: 70px; + } + table.nostretch { + width=100% + } + .nostretch td { + class='block' + } + .nostretch tr td{ + width:1%; + white-space:nowrap; + } + + :target:before { + content:""; + display:block; + height:60px; + margin:-60px 0 0; + } + + ol.hierarchy { + min-height: 40px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + } + + .smallcaps { + font-variant: small-caps; + } + .well .sidebar { + padding: 8px 0 + } + .sidebar a { + padding: 0px,0px,0px,0px + } + .varlist>tbody>tr>td { + padding-left: 3px; + padding-right: 3px; + } + .varlist>tbody>tr>td:first-child, .varlist>thead>tr>td:first-child { + padding-left: 8px; + } + .varlist>tbody>td>td:last-child, .varlist>thead>tr>td:last-child { + padding-right: 8px; + } + + .highlight pre { + overflow-x: auto; + overflow-wrap: normal; + white-space: pre + } + + /* .hl is for when line numbers are included, .highlight is for all + other cases. */ + .hl pre { + counter-reset: line-numbering; + overflow-x: auto; + overflow-wrap: normal; + white-space: pre; + padding: 0; + padding-right: 9.5px; + overflow-y: hidden; + padding-bottom: 9.5px; + } + + .hl pre a::before { + content: counter(line-numbering); + counter-increment: line-numbering; + padding-right: 0.7em; /* space after numbers */ + margin-top: 4.5em; + width: 60px; + text-align: right; + opacity: 0.7; + display: inline-block; + color: #aaa; + background: #eee; + margin-right: 10px; + border-right: 1px solid #ccc; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + + .hl pre a:first-of-type::before { + padding-top: 9.5px; + } + + .hl pre a:last-of-type::before { + padding-bottom: 9.5px; + } + + .hl pre a:only-of-type::before { + padding: 9.5px; + } + + .hl pre a { + display: inline-block; + height: 4.5em; + margin: -4.5em 0 0; + } + .codesum h3 { + margin-top: 2px; + margin-bottom: 2px; + } + + h1.inline, h2.inline, h3.inline { + display: inline; + } + + .depwarn { + float: right; + } + + .anchor { + position: absolute; + margin: -4.5em; + visibility:hidden; + } + + .alert { + margin-left: 5px; + margin-right: 5px; + margin-top: 5px; + } + + div.toc { + font-size: 14.73px; + padding-left: 0px; + padding-right: 0px; + } + + div.toc a { + padding-left: 20px; + padding-right: 20px; + margin-right: 15px; + padding-top: 5px; + padding-bottom: 5px; + } + + div.toc li { + font-size: 0.95em; + padding-left: 15px; + } + + div.toc li.title { + font-size: 1em; + } + + div.toc hr { + margin-top: 12px; + margin-bottom: 10px; + } + + .in-well { + padding: 0px 0px; + margin-bottom: 0px; + float:right; + } + + table tr.submod>td { + border-top: none; + font-size: 13.5px; + } + + .graph-help { + font-size: 10px; + } + + .depgraph { + width: 100%; + max-width: 1140px; + } + + #sidebar a { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .highlighttable { + width: auto; + table-layout: fixed; + } + + ul.checklist { + list-style-type: none; + } + + ul.checklist input[type="checkbox"] { + margin-left: -20.8px; + margin-right: 4.55px; + } + + .gitter-chat-embed { + z-index: 100000; + } + +table.graph { + text-align: center; +} + + +.graph td.root { + border:2px solid black; + padding:10px; +} + +.graph td.triangle-right:after { + content: ""; + display: block; + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; + border-left: 7px solid black; +} + +.graph td.triangle-left:after { + content: ""; + display: block; + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; + border-right: 7px solid black; +} + +.graph td.node { + color: white; + padding:10px; + border-style: solid; + border-width: 3px 0px 3px 0px; + border-color: white; +} + +.graph td.node a{ + color: white; +} + +.graph td.dashedText, +.graph td.solidText { + padding: 0px 10px 0px 10px; + min-width: 40px; + color: black; + border-color: black; +} + +.graph td.dashedText { + border-bottom-style: dashed; +} + +.graph td.solidText { + border-bottom-style: solid; +} + +.graph td.dashedBottom, +.graph td.dashedTop, +.graph td.solidTop, +.graph td.solidBottom { + min-width: 40px; + color: transparent; + border-color: black; +} + +.graph td.dashedBottom { + border-bottom-style: dashed; +} + +.graph td.dashedTop { + border-top-style: dashed; +} + +.graph td.solidBottom { + border-bottom-style: solid; +} + +.graph td.solidTop { + border-top-style: solid; +} diff --git a/Documentation/html/Documentation/Api/Fortran/css/pygments.css b/Documentation/html/Documentation/Api/Fortran/css/pygments.css new file mode 100644 index 0000000000000000000000000000000000000000..4a3a8d85707d7cbb6f43971074a269de9d8f4d68 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/css/pygments.css @@ -0,0 +1,61 @@ +pre .hll { background-color: #ffffcc } +pre .c { color: #408080; font-style: italic } /* Comment */ +pre .err { border: 1px solid #FF0000 } /* Error */ +pre .k { color: #008000; font-weight: bold } /* Keyword */ +pre .o { color: #666666 } /* Operator */ +pre .cm { color: #408080; font-style: italic } /* Comment.Multiline */ +pre .cp { color: #BC7A00 } /* Comment.Preproc */ +pre .c1 { color: #408080; font-style: italic } /* Comment.Single */ +pre .cs { color: #408080; font-style: italic } /* Comment.Special */ +pre .gd { color: #A00000 } /* Generic.Deleted */ +pre .ge { font-style: italic } /* Generic.Emph */ +pre .gr { color: #FF0000 } /* Generic.Error */ +pre .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +pre .gi { color: #00A000 } /* Generic.Inserted */ +pre .go { color: #888888 } /* Generic.Output */ +pre .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +pre .gs { font-weight: bold } /* Generic.Strong */ +pre .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +pre .gt { color: #0044DD } /* Generic.Traceback */ +pre .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +pre .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +pre .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +pre .kp { color: #008000 } /* Keyword.Pseudo */ +pre .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +pre .kt { color: #B00040 } /* Keyword.Type */ +pre .m { color: #666666 } /* Literal.Number */ +pre .s { color: #BA2121 } /* Literal.String */ +pre .na { color: #7D9029 } /* Name.Attribute */ +pre .nb { color: #008000 } /* Name.Builtin */ +pre .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +pre .no { color: #880000 } /* Name.Constant */ +pre .nd { color: #AA22FF } /* Name.Decorator */ +pre .ni { color: #999999; font-weight: bold } /* Name.Entity */ +pre .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ +pre .nf { color: #0000FF } /* Name.Function */ +pre .nl { color: #A0A000 } /* Name.Label */ +pre .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +pre .nt { color: #008000; font-weight: bold } /* Name.Tag */ +pre .nv { color: #19177C } /* Name.Variable */ +pre .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +pre .w { color: #bbbbbb } /* Text.Whitespace */ +pre .mf { color: #666666 } /* Literal.Number.Float */ +pre .mh { color: #666666 } /* Literal.Number.Hex */ +pre .mi { color: #666666 } /* Literal.Number.Integer */ +pre .mo { color: #666666 } /* Literal.Number.Oct */ +pre .sb { color: #BA2121 } /* Literal.String.Backtick */ +pre .sc { color: #BA2121 } /* Literal.String.Char */ +pre .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +pre .s2 { color: #BA2121 } /* Literal.String.Double */ +pre .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ +pre .sh { color: #BA2121 } /* Literal.String.Heredoc */ +pre .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ +pre .sx { color: #008000 } /* Literal.String.Other */ +pre .sr { color: #BB6688 } /* Literal.String.Regex */ +pre .s1 { color: #BA2121 } /* Literal.String.Single */ +pre .ss { color: #19177C } /* Literal.String.Symbol */ +pre .bp { color: #008000 } /* Name.Builtin.Pseudo */ +pre .vc { color: #19177C } /* Name.Variable.Class */ +pre .vg { color: #19177C } /* Name.Variable.Global */ +pre .vi { color: #19177C } /* Name.Variable.Instance */ +pre .il { color: #666666 } /* Literal.Number.Integer.Long */ diff --git a/Documentation/html/Documentation/Api/Fortran/favicon.png b/Documentation/html/Documentation/Api/Fortran/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..d697f4d7acd14cae987bdb7f715a764060025739 Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/favicon.png differ diff --git a/Documentation/html/Documentation/Api/Fortran/fonts/fontawesome-webfont.eot b/Documentation/html/Documentation/Api/Fortran/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..84677bc0c5f37f1fac9d87548c4554b5c91717cf Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/fonts/fontawesome-webfont.eot differ diff --git a/Documentation/html/Documentation/Api/Fortran/fonts/fontawesome-webfont.svg b/Documentation/html/Documentation/Api/Fortran/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000000000000000000000000000000000000..d907b25ae60ec7e3d32e4027aa6e6b7595de97af --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/fonts/fontawesome-webfont.svg @@ -0,0 +1,520 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="fontawesomeregular" horiz-adv-x="1536" > +<font-face units-per-em="1792" ascent="1536" descent="-256" /> +<missing-glyph horiz-adv-x="448" /> +<glyph unicode=" " horiz-adv-x="448" /> +<glyph unicode="	" horiz-adv-x="448" /> +<glyph unicode=" " horiz-adv-x="448" /> +<glyph unicode="¨" horiz-adv-x="1792" /> +<glyph unicode="©" horiz-adv-x="1792" /> +<glyph unicode="®" horiz-adv-x="1792" /> +<glyph unicode="´" horiz-adv-x="1792" /> +<glyph unicode="Æ" horiz-adv-x="1792" /> +<glyph unicode="Ø" horiz-adv-x="1792" /> +<glyph unicode=" " horiz-adv-x="768" /> +<glyph unicode=" " horiz-adv-x="1537" /> +<glyph unicode=" " horiz-adv-x="768" /> +<glyph unicode=" " horiz-adv-x="1537" /> +<glyph unicode=" " horiz-adv-x="512" /> +<glyph unicode=" " horiz-adv-x="384" /> +<glyph unicode=" " horiz-adv-x="256" /> +<glyph unicode=" " horiz-adv-x="256" /> +<glyph unicode=" " horiz-adv-x="192" /> +<glyph unicode=" " horiz-adv-x="307" /> +<glyph unicode=" " horiz-adv-x="85" /> +<glyph unicode=" " horiz-adv-x="307" /> +<glyph unicode=" " horiz-adv-x="384" /> +<glyph unicode="™" horiz-adv-x="1792" /> +<glyph unicode="∞" horiz-adv-x="1792" /> +<glyph unicode="≠" horiz-adv-x="1792" /> +<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" /> +<glyph unicode="" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " /> +<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z " /> +<glyph unicode="" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" /> +<glyph unicode="" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" /> +<glyph unicode="" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" /> +<glyph unicode="" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" /> +<glyph unicode="" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" /> +<glyph unicode="" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" /> +<glyph unicode="" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" /> +<glyph unicode="" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> +<glyph unicode="" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57 q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -4 -0.5 -13t-0.5 -13q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5 q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" /> +<glyph unicode="" horiz-adv-x="1408" d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142 q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5 t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68.5 -0.5t67.5 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5 t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" /> +<glyph unicode="" horiz-adv-x="1024" d="M0 -126l17 85q6 2 81.5 21.5t111.5 37.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5 q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2 t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5 q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" /> +<glyph unicode="" d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1 t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5 t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49 t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" /> +<glyph unicode="" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> +<glyph unicode="" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" /> +<glyph unicode="" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" /> +<glyph unicode="" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" /> +<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" /> +<glyph unicode="" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" /> +<glyph unicode="" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" /> +<glyph unicode="" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" /> +<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" /> +<glyph unicode="" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" /> +<glyph unicode="" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" /> +<glyph unicode="" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" /> +<glyph unicode="" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" /> +<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" /> +<glyph unicode="" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" /> +<glyph unicode="" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " /> +<glyph unicode="" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" /> +<glyph unicode="" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" /> +<glyph unicode="" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " /> +<glyph unicode="" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="2048" d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" /> +<glyph unicode="" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1536 160q0 -119 -84.5 -203.5t-203.5 -84.5h-192v608h203l30 224h-233v143q0 54 28 83t96 29l132 1v207q-96 9 -180 9q-136 0 -218 -80.5t-82 -225.5v-166h-224v-224h224v-608h-544q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5v-960z" /> +<glyph unicode="" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" /> +<glyph unicode="" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" /> +<glyph unicode="" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" /> +<glyph unicode="" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" /> +<glyph unicode="" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" /> +<glyph unicode="" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" /> +<glyph unicode="" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" /> +<glyph unicode="" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" /> +<glyph unicode="" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> +<glyph unicode="" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" /> +<glyph unicode="" horiz-adv-x="1024" d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" /> +<glyph unicode="" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" /> +<glyph unicode="" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" /> +<glyph unicode="" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5 t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" /> +<glyph unicode="" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" /> +<glyph unicode="" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" /> +<glyph unicode="" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" /> +<glyph unicode="" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" /> +<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" /> +<glyph unicode="" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" /> +<glyph unicode="" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " /> +<glyph unicode="" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " /> +<glyph unicode="" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" /> +<glyph unicode="" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" /> +<glyph unicode="" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" /> +<glyph unicode="" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" /> +<glyph unicode="" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" /> +<glyph unicode="" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" /> +<glyph unicode="" d="M829 318q0 -76 -58.5 -112.5t-139.5 -36.5q-41 0 -80.5 9.5t-75.5 28.5t-58 53t-22 78q0 46 25 80t65.5 51.5t82 25t84.5 7.5q20 0 31 -2q2 -1 23 -16.5t26 -19t23 -18t24.5 -22t19 -22.5t17 -26t9 -26.5t4.5 -31.5zM755 863q0 -60 -33 -99.5t-92 -39.5q-53 0 -93 42.5 t-57.5 96.5t-17.5 106q0 61 32 104t92 43q53 0 93.5 -45t58 -101t17.5 -107zM861 1120l88 64h-265q-85 0 -161 -32t-127.5 -98t-51.5 -153q0 -93 64.5 -154.5t158.5 -61.5q22 0 43 3q-13 -29 -13 -54q0 -44 40 -94q-175 -12 -257 -63q-47 -29 -75.5 -73t-28.5 -95 q0 -43 18.5 -77.5t48.5 -56.5t69 -37t77.5 -21t76.5 -6q60 0 120.5 15.5t113.5 46t86 82.5t33 117q0 49 -20 89.5t-49 66.5t-58 47.5t-49 44t-20 44.5t15.5 42.5t37.5 39.5t44 42t37.5 59.5t15.5 82.5q0 60 -22.5 99.5t-72.5 90.5h83zM1152 672h128v64h-128v128h-64v-128 h-128v-64h128v-160h64v160zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M735 740q0 -36 32 -70.5t77.5 -68t90.5 -73.5t77 -104t32 -142q0 -90 -48 -173q-72 -122 -211 -179.5t-298 -57.5q-132 0 -246.5 41.5t-171.5 137.5q-37 60 -37 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 42 -47.5 74t-15.5 73q0 36 21 85q-46 -4 -68 -4 q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q77 66 182.5 98t217.5 32h418l-138 -88h-131q74 -63 112 -133t38 -160q0 -72 -24.5 -129.5t-59 -93t-69.5 -65t-59.5 -61.5t-24.5 -66zM589 836q38 0 78 16.5t66 43.5q53 57 53 159q0 58 -17 125t-48.5 129.5 t-84.5 103.5t-117 41q-42 0 -82.5 -19.5t-65.5 -52.5q-47 -59 -47 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26zM591 -37q58 0 111.5 13t99 39t73 73t27.5 109q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -48 2 q-53 0 -105 -7t-107.5 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -70 35 -123.5t91.5 -83t119 -44t127.5 -14.5zM1401 839h213v-108h-213v-219h-105v219h-212v108h212v217h105v-217z" /> +<glyph unicode="" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" /> +<glyph unicode="" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" /> +<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" /> +<glyph unicode="" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" /> +<glyph unicode="" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" /> +<glyph unicode="" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" /> +<glyph unicode="" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5 t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704 q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" /> +<glyph unicode="" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" /> +<glyph unicode="" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" /> +<glyph unicode="" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> +<glyph unicode="" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" /> +<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" /> +<glyph unicode="" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" /> +<glyph unicode="" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> +<glyph unicode="" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> +<glyph unicode="" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" /> +<glyph unicode="" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" /> +<glyph unicode="" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" /> +<glyph unicode="" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" /> +<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" /> +<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" /> +<glyph unicode="" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" /> +<glyph unicode="" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" /> +<glyph unicode="" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" /> +<glyph unicode="" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" /> +<glyph unicode="" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" /> +<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> +<glyph unicode="" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" /> +<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" /> +<glyph unicode="" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" /> +<glyph unicode="" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" /> +<glyph unicode="" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" /> +<glyph unicode="" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" /> +<glyph unicode="" d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" /> +<glyph unicode="" d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" /> +<glyph unicode="" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" /> +<glyph unicode="" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" /> +<glyph unicode="" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" /> +<glyph unicode="" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" /> +<glyph unicode="" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" /> +<glyph unicode="" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" /> +<glyph unicode="" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" /> +<glyph unicode="" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" /> +<glyph unicode="" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" /> +<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" /> +<glyph unicode="" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" /> +<glyph unicode="" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14 q78 2 134 29z" /> +<glyph unicode="" d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" /> +<glyph unicode="" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" /> +<glyph unicode="" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" /> +<glyph unicode="" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" /> +<glyph unicode="" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" /> +<glyph unicode="" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324 l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" /> +<glyph unicode="" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> +<glyph unicode="" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" /> +<glyph unicode="" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" /> +<glyph unicode="" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " /> +<glyph unicode="" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" /> +<glyph unicode="" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="2176" d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40 t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29 q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9 q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102 t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" /> +<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69 q-46 32 -141.5 92.5t-142.5 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13 t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5 t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21 t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286 t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273 t273 -182.5t331.5 -68z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" /> +<glyph unicode="" horiz-adv-x="2048" d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" /> +<glyph unicode="" horiz-adv-x="2304" d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" /> +<glyph unicode="" d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" /> +<glyph unicode="" horiz-adv-x="1280" d="M981 197q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -49 2q-53 0 -104.5 -7t-107 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -56 23.5 -102t61 -75.5t87 -50t100 -29t101.5 -8.5q58 0 111.5 13t99 39t73 73t27.5 109zM864 1055 q0 59 -17 125.5t-48 129t-84 103.5t-117 41q-42 0 -82.5 -19.5t-66.5 -52.5q-46 -59 -46 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26q37 0 77.5 16.5t65.5 43.5q53 56 53 159zM752 1536h417l-137 -88h-132q75 -63 113 -133t38 -160q0 -72 -24.5 -129.5 t-59.5 -93t-69.5 -65t-59 -61.5t-24.5 -66q0 -36 32 -70.5t77 -68t90.5 -73.5t77.5 -104t32 -142q0 -91 -49 -173q-71 -122 -209.5 -179.5t-298.5 -57.5q-132 0 -246.5 41.5t-172.5 137.5q-36 59 -36 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 41 -47.5 73.5 t-15.5 73.5q0 40 21 85q-46 -4 -68 -4q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q76 66 182 98t218 32z" /> +<glyph unicode="" horiz-adv-x="1984" d="M831 572q0 -56 -40.5 -96t-96.5 -40q-57 0 -98 40t-41 96q0 57 41.5 98t97.5 41t96.5 -41t40.5 -98zM1292 711q56 0 96.5 -41t40.5 -98q0 -56 -40.5 -96t-96.5 -40q-57 0 -98 40t-41 96q0 57 41.5 98t97.5 41zM1984 722q0 -62 -31 -114t-83 -82q5 -33 5 -61 q0 -121 -68.5 -230.5t-197.5 -193.5q-125 -82 -285.5 -125.5t-335.5 -43.5q-176 0 -336.5 43.5t-284.5 125.5q-129 84 -197.5 193t-68.5 231q0 29 5 66q-48 31 -77 81.5t-29 109.5q0 94 66 160t160 66q83 0 148 -55q248 158 592 164l134 423q4 14 17.5 21.5t28.5 4.5 l347 -82q22 50 68.5 81t102.5 31q77 0 131.5 -54.5t54.5 -131.5t-54.5 -132t-131.5 -55q-76 0 -130.5 54t-55.5 131l-315 74l-116 -366q327 -14 560 -166q64 58 151 58q94 0 160 -66t66 -160zM1664 1459q-45 0 -77 -32t-32 -77t32 -77t77 -32t77 32t32 77t-32 77t-77 32z M77 722q0 -67 51 -111q49 131 180 235q-36 25 -82 25q-62 0 -105.5 -43.5t-43.5 -105.5zM1567 105q112 73 171.5 166t59.5 194t-59.5 193.5t-171.5 165.5q-116 75 -265.5 115.5t-313.5 40.5t-313.5 -40.5t-265.5 -115.5q-112 -73 -171.5 -165.5t-59.5 -193.5t59.5 -194 t171.5 -166q116 -75 265.5 -115.5t313.5 -40.5t313.5 40.5t265.5 115.5zM1850 605q57 46 57 117q0 62 -43.5 105.5t-105.5 43.5q-49 0 -86 -28q131 -105 178 -238zM1258 237q11 11 27 11t27 -11t11 -27.5t-11 -27.5q-99 -99 -319 -99h-2q-220 0 -319 99q-11 11 -11 27.5 t11 27.5t27 11t27 -11q77 -77 265 -77h2q188 0 265 77z" /> +<glyph unicode="" d="M950 393q7 7 17.5 7t17.5 -7t7 -18t-7 -18q-65 -64 -208 -64h-1h-1q-143 0 -207 64q-8 7 -8 18t8 18q7 7 17.5 7t17.5 -7q49 -51 172 -51h1h1q122 0 173 51zM671 613q0 -37 -26 -64t-63 -27t-63 27t-26 64t26 63t63 26t63 -26t26 -63zM1214 1049q-29 0 -50 21t-21 50 q0 30 21 51t50 21q30 0 51 -21t21 -51q0 -29 -21 -50t-51 -21zM1216 1408q132 0 226 -94t94 -227v-894q0 -133 -94 -227t-226 -94h-896q-132 0 -226 94t-94 227v894q0 133 94 227t226 94h896zM1321 596q35 14 57 45.5t22 70.5q0 51 -36 87.5t-87 36.5q-60 0 -98 -48 q-151 107 -375 115l83 265l206 -49q1 -50 36.5 -85t84.5 -35q50 0 86 35.5t36 85.5t-36 86t-86 36q-36 0 -66 -20.5t-45 -53.5l-227 54q-9 2 -17.5 -2.5t-11.5 -14.5l-95 -302q-224 -4 -381 -113q-36 43 -93 43q-51 0 -87 -36.5t-36 -87.5q0 -37 19.5 -67.5t52.5 -45.5 q-7 -25 -7 -54q0 -98 74 -181.5t201.5 -132t278.5 -48.5q150 0 277.5 48.5t201.5 132t74 181.5q0 27 -6 54zM971 702q37 0 63 -26t26 -63t-26 -64t-63 -27t-63 27t-26 64t26 63t63 26z" /> +<glyph unicode="" d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328 v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" /> +<glyph unicode="" d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123 v-369h123z" /> +<glyph unicode="" d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101 v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="2038" d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14 q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24 q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33 q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5 t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43 q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5 t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13 t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" /> +<glyph unicode="" d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10 q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14 q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14 t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44 q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" /> +<glyph unicode="" d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5 t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5 q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126 t135.5 51q85 0 145 -60.5t60 -145.5z" /> +<glyph unicode="" d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5 q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28 q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11 q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q106 35 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5 q20 0 20 -21v-418z" /> +<glyph unicode="" horiz-adv-x="1792" d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48 l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23 t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128 q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128 q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" /> +<glyph unicode="" d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9 t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9 t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9 t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68t68 28t68 -28l228 -228h368l228 228q28 28 68 28t68 -28t28 -68t-28 -68zM864 1152q0 -93 -65.5 -158.5 t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5 q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819 q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5 t100.5 134t141.5 55.5z" /> +<glyph unicode="" horiz-adv-x="768" d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z " /> +<glyph unicode="" horiz-adv-x="2304" d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67 t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-5 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70 v-400l434 -186q36 -16 57 -48t21 -70z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658 q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204 q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" /> +<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5 t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217 t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5 q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89 q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" /> +<glyph unicode="" d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5 q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5 q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z " /> +<glyph unicode="" horiz-adv-x="1792" d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188 l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5 t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1 q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" /> +<glyph unicode="" horiz-adv-x="2048" d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384 q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5 l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5 t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" /> +<glyph unicode="" d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384 q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" /> +<glyph unicode="" d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64 q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37 q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1397 1408q58 0 98.5 -40.5t40.5 -98.5v-1258q0 -58 -40.5 -98.5t-98.5 -40.5h-1258q-58 0 -98.5 40.5t-40.5 98.5v1258q0 58 40.5 98.5t98.5 40.5h1258zM1465 11v1258q0 28 -20 48t-48 20h-1258q-28 0 -48 -20t-20 -48v-1258q0 -28 20 -48t48 -20h1258q28 0 48 20t20 48 zM694 749l188 -387l533 145v-496q0 -7 -5.5 -12.5t-12.5 -5.5h-1258q-7 0 -12.5 5.5t-5.5 12.5v141l711 195l-212 439q4 1 12 2.5t12 1.5q170 32 303.5 21.5t221 -46t143.5 -94.5q27 -28 -25 -42q-64 -16 -256 -62l-97 198q-111 7 -240 -16zM1397 1287q7 0 12.5 -5.5 t5.5 -12.5v-428q-85 30 -188 52q-294 64 -645 12l-18 -3l-65 134h-233l85 -190q-132 -51 -230 -137v560q0 7 5.5 12.5t12.5 5.5h1258zM286 387q-14 -3 -26 4.5t-14 21.5q-24 203 166 305l129 -270z" /> +<glyph unicode="" horiz-adv-x="2304" d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11 q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245 q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785 l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242 q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236q0 -11 -8 -19 t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786q-13 2 -22 11t-9 22v899 q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" /> +<glyph unicode="" d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127 t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5 t-103 128v128q0 69 103 128t280 93.5t385 34.5z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197 q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8 q-1 1 -1 2t-0.5 1.5t-0.5 1.5q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4l-3 21q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5t-3.5 -21.5l-4 -21h-4l-2 21 q-2 26 -7 46l-99 438h90v107h-300z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107 h-290v-107h68l189 -272l-194 -283h-68z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" /> +<glyph unicode="" d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400 v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79 q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5 q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243 l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" /> +<glyph unicode="" d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406 q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" /> +<glyph unicode="" horiz-adv-x="1792" d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97q14 -16 29.5 -34t34.5 -40t29 -34q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5 t-85 -189.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348q0 222 101 414.5t276.5 317t390.5 155.5v-260q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 q0 230 -145.5 406t-366.5 221v260q215 -31 390.5 -155.5t276.5 -317t101 -414.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" /> +<glyph unicode="" horiz-adv-x="1792" d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> +<glyph unicode="" d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58 q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47 q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171 v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" /> +<glyph unicode="" d="M825 547l343 588h-150q-21 -39 -63.5 -118.5t-68 -128.5t-59.5 -118.5t-60 -128.5h-3q-21 48 -44.5 97t-52 105.5t-46.5 92t-54 104.5t-49 95h-150l323 -589v-435h134v436zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5 t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153 t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5 q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20 t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5 t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" /> +<glyph unicode="" horiz-adv-x="2048" d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25 q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5 q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109 q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137 l863 639l-478 -797z" /> +<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23 t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15 t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2 t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160 q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5 q0 -26 -12 -48t-36 -22z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179 q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" /> +<glyph unicode="" d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256 q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" /> +<glyph unicode="" d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5 t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" /> +<glyph unicode="" d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5 t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5 t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91 q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9 t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323 l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" /> +<glyph unicode="" horiz-adv-x="1792" d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23 zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5 t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" /> +<glyph unicode="" horiz-adv-x="1792" d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1755 1083q37 -37 37 -90t-37 -91l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234l401 400 q38 37 91 37t90 -37z" /> +<glyph unicode="" horiz-adv-x="1792" d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5 t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q3 -2 11 -7 t11 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" /> +<glyph unicode="" d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36 q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q70 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5 t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87 q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19 t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121 q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38 h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1112 1090q0 159 -237 159h-70q-32 0 -59.5 -21.5t-34.5 -52.5l-63 -276q-2 -5 -2 -16q0 -24 17 -39.5t41 -15.5h53q69 0 128.5 13t112.5 41t83.5 81.5t30.5 126.5zM1716 938q0 -265 -220 -428q-219 -161 -612 -161h-61q-32 0 -59 -21.5t-34 -52.5l-73 -316 q-8 -36 -40.5 -61.5t-69.5 -25.5h-213q-31 0 -53 20t-22 51q0 10 13 65h151q34 0 64 23.5t38 56.5l73 316q8 33 37.5 57t63.5 24h61q390 0 607 160t217 421q0 129 -51 207q183 -92 183 -335zM1533 1123q0 -264 -221 -428q-218 -161 -612 -161h-60q-32 0 -59.5 -22t-34.5 -53 l-73 -315q-8 -36 -40 -61.5t-69 -25.5h-214q-31 0 -52.5 19.5t-21.5 51.5q0 8 2 20l300 1301q8 36 40.5 61.5t69.5 25.5h444q68 0 125 -4t120.5 -15t113.5 -30t96.5 -50.5t77.5 -74t49.5 -103.5t18.5 -136z" /> +<glyph unicode="" horiz-adv-x="1792" d="M602 949q19 -61 31 -123.5t17 -141.5t-14 -159t-62 -145q-21 81 -67 157t-95.5 127t-99 90.5t-78.5 57.5t-33 19q-62 34 -81.5 100t14.5 128t101 81.5t129 -14.5q138 -83 238 -177zM927 1236q11 -25 20.5 -46t36.5 -100.5t42.5 -150.5t25.5 -179.5t0 -205.5t-47.5 -209.5 t-105.5 -208.5q-51 -72 -138 -72q-54 0 -98 31q-57 40 -69 109t28 127q60 85 81 195t13 199.5t-32 180.5t-39 128t-22 52q-31 63 -8.5 129.5t85.5 97.5q34 17 75 17q47 0 88.5 -25t63.5 -69zM1248 567q-17 -160 -72 -311q-17 131 -63 246q25 174 -5 361q-27 178 -94 342 q114 -90 212 -211q9 -37 15 -80q26 -179 7 -347zM1520 1440q9 -17 23.5 -49.5t43.5 -117.5t50.5 -178t34 -227.5t5 -269t-47 -300t-112.5 -323.5q-22 -48 -66 -75.5t-95 -27.5q-39 0 -74 16q-67 31 -92.5 100t4.5 136q58 126 90 257.5t37.5 239.5t-3.5 213.5t-26.5 180.5 t-38.5 138.5t-32.5 90t-15.5 32.5q-34 65 -11.5 135.5t87.5 104.5q37 20 81 20q49 0 91.5 -25.5t66.5 -70.5z" /> +<glyph unicode="" horiz-adv-x="2304" d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27 q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128 q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="2304" d="M671 603h-13q-47 0 -47 -32q0 -22 20 -22q17 0 28 15t12 39zM1066 639h62v3q1 4 0.5 6.5t-1 7t-2 8t-4.5 6.5t-7.5 5t-11.5 2q-28 0 -36 -38zM1606 603h-12q-48 0 -48 -32q0 -22 20 -22q17 0 28 15t12 39zM1925 629q0 41 -30 41q-19 0 -31 -20t-12 -51q0 -42 28 -42 q20 0 32.5 20t12.5 52zM480 770h87l-44 -262h-56l32 201l-71 -201h-39l-4 200l-34 -200h-53l44 262h81l2 -163zM733 663q0 -6 -4 -42q-16 -101 -17 -113h-47l1 22q-20 -26 -58 -26q-23 0 -37.5 16t-14.5 42q0 39 26 60.5t73 21.5q14 0 23 -1q0 3 0.5 5.5t1 4.5t0.5 3 q0 20 -36 20q-29 0 -59 -10q0 4 7 48q38 11 67 11q74 0 74 -62zM889 721l-8 -49q-22 3 -41 3q-27 0 -27 -17q0 -8 4.5 -12t21.5 -11q40 -19 40 -60q0 -72 -87 -71q-34 0 -58 6q0 2 7 49q29 -8 51 -8q32 0 32 19q0 7 -4.5 11.5t-21.5 12.5q-43 20 -43 59q0 72 84 72 q30 0 50 -4zM977 721h28l-7 -52h-29q-2 -17 -6.5 -40.5t-7 -38.5t-2.5 -18q0 -16 19 -16q8 0 16 2l-8 -47q-21 -7 -40 -7q-43 0 -45 47q0 12 8 56q3 20 25 146h55zM1180 648q0 -23 -7 -52h-111q-3 -22 10 -33t38 -11q30 0 58 14l-9 -54q-30 -8 -57 -8q-95 0 -95 95 q0 55 27.5 90.5t69.5 35.5q35 0 55.5 -21t20.5 -56zM1319 722q-13 -23 -22 -62q-22 2 -31 -24t-25 -128h-56l3 14q22 130 29 199h51l-3 -33q14 21 25.5 29.5t28.5 4.5zM1506 763l-9 -57q-28 14 -50 14q-31 0 -51 -27.5t-20 -70.5q0 -30 13.5 -47t38.5 -17q21 0 48 13 l-10 -59q-28 -8 -50 -8q-45 0 -71.5 30.5t-26.5 82.5q0 70 35.5 114.5t91.5 44.5q26 0 61 -13zM1668 663q0 -18 -4 -42q-13 -79 -17 -113h-46l1 22q-20 -26 -59 -26q-23 0 -37 16t-14 42q0 39 25.5 60.5t72.5 21.5q15 0 23 -1q2 7 2 13q0 20 -36 20q-29 0 -59 -10q0 4 8 48 q38 11 67 11q73 0 73 -62zM1809 722q-14 -24 -21 -62q-23 2 -31.5 -23t-25.5 -129h-56l3 14q19 104 29 199h52q0 -11 -4 -33q15 21 26.5 29.5t27.5 4.5zM1950 770h56l-43 -262h-53l3 19q-23 -23 -52 -23q-31 0 -49.5 24t-18.5 64q0 53 27.5 92t64.5 39q31 0 53 -29z M2061 640q0 148 -72.5 273t-198 198t-273.5 73q-181 0 -328 -110q127 -116 171 -284h-50q-44 150 -158 253q-114 -103 -158 -253h-50q44 168 171 284q-147 110 -328 110q-148 0 -273.5 -73t-198 -198t-72.5 -273t72.5 -273t198 -198t273.5 -73q181 0 328 110 q-120 111 -165 264h50q46 -138 152 -233q106 95 152 233h50q-45 -153 -165 -264q147 -110 328 -110q148 0 273.5 73t198 198t72.5 273zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="2304" d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42 q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604 v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569 q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73 t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" /> +<glyph unicode="" horiz-adv-x="2304" d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260 l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279 v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040 q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168 q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5 t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21 h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5 t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" /> +<glyph unicode="" horiz-adv-x="2304" d="M322 689h-15q-19 0 -19 18q0 28 19 85q5 15 15 19.5t28 4.5q77 0 77 -49q0 -41 -30.5 -59.5t-74.5 -18.5zM664 528q-47 0 -47 29q0 62 123 62l3 -3q-5 -88 -79 -88zM1438 687h-15q-19 0 -19 19q0 28 19 85q5 15 14.5 19t28.5 4q77 0 77 -49q0 -41 -30.5 -59.5 t-74.5 -18.5zM1780 527q-47 0 -47 30q0 62 123 62l3 -3q-5 -89 -79 -89zM373 894h-128q-8 0 -14.5 -4t-8.5 -7.5t-7 -12.5q-3 -7 -45 -190t-42 -192q0 -7 5.5 -12.5t13.5 -5.5h62q25 0 32.5 34.5l15 69t32.5 34.5q47 0 87.5 7.5t80.5 24.5t63.5 52.5t23.5 84.5 q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM719 798q-38 0 -74 -6q-2 0 -8.5 -1t-9 -1.5l-7.5 -1.5t-7.5 -2t-6.5 -3t-6.5 -4t-5 -5t-4.5 -7t-4 -9q-9 -29 -9 -39t9 -10q5 0 21.5 5t19.5 6q30 8 58 8q74 0 74 -36q0 -11 -10 -14q-8 -2 -18 -3t-21.5 -1.5t-17.5 -1.5 q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5q0 -38 26 -59.5t64 -21.5q24 0 45.5 6.5t33 13t38.5 23.5q-3 -7 -3 -15t5.5 -13.5t12.5 -5.5h56q1 1 7 3.5t7.5 3.5t5 3.5t5 5.5t2.5 8l45 194q4 13 4 30q0 81 -145 81zM1247 793h-74q-22 0 -39 -23q-5 -7 -29.5 -51 t-46.5 -81.5t-26 -38.5l-5 4q0 77 -27 166q-1 5 -3.5 8.5t-6 6.5t-6.5 5t-8.5 3t-8.5 1.5t-9.5 1t-9 0.5h-10h-8.5q-38 0 -38 -21l1 -5q5 -53 25 -151t25 -143q2 -16 2 -24q0 -19 -30.5 -61.5t-30.5 -58.5q0 -13 40 -13q61 0 76 25l245 415q10 20 10 26q0 9 -8 9zM1489 892 h-129q-18 0 -29 -23q-6 -13 -46.5 -191.5t-40.5 -190.5q0 -20 43 -20h7.5h9h9t9.5 1t8.5 2t8.5 3t6.5 4.5t5.5 6t3 8.5l21 91q2 10 10.5 17t19.5 7q47 0 87.5 7t80.5 24.5t63.5 52.5t23.5 84q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM1835 798q-26 0 -74 -6 q-38 -6 -48 -16q-7 -8 -11 -19q-8 -24 -8 -39q0 -10 8 -10q1 0 41 12q30 8 58 8q74 0 74 -36q0 -12 -10 -14q-4 -1 -57 -7q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5t26 -58.5t64 -21.5q24 0 45 6t34 13t38 24q-3 -15 -3 -16q0 -5 2 -8.5t6.5 -5.5t8 -3.5 t10.5 -2t9.5 -0.5h9.5h8q42 0 48 25l45 194q3 15 3 31q0 81 -145 81zM2157 889h-55q-25 0 -33 -40q-10 -44 -36.5 -167t-42.5 -190v-5q0 -16 16 -18h1h57q10 0 18.5 6.5t10.5 16.5l83 374h-1l1 5q0 7 -5.5 12.5t-13.5 5.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048 q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="2304" d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109 q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118 q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151 q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31 q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5 l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5 l418 363q10 8 23.5 7t21.5 -11z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128 q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161 q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" /> +<glyph unicode="" horiz-adv-x="1408" d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704 q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167 q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5 t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53 q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24 t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61 t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10 t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5 t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11t55.5 -11t52.5 -38q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5t47 37.5 q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-35 0 -55.5 11t-52.5 38q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38t-58 27 t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448h256v448 h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51 t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" /> +<glyph unicode="" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" /> +<glyph unicode="" horiz-adv-x="1792" d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9 t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20 q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50 t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1 q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" /> +<glyph unicode="" d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73 q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110 q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5 t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5 t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5 t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" /> +<glyph unicode="" horiz-adv-x="2304" d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94 q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469 q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400 q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" /> +<glyph unicode="" d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5 h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327 q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5 q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" /> +<glyph unicode="" horiz-adv-x="1280" d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q18 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119 t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5 t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14 q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88 q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5 t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206 q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307 t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14 t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" /> +<glyph unicode="" d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5 t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55 q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410 q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/fonts/fontawesome-webfont.ttf b/Documentation/html/Documentation/Api/Fortran/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..96a3639cdde5e8ab459c6380e3b9524ee81641dc Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/fonts/fontawesome-webfont.ttf differ diff --git a/Documentation/html/Documentation/Api/Fortran/fonts/fontawesome-webfont.woff b/Documentation/html/Documentation/Api/Fortran/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..628b6a52a87e62c6f22426e17c01f6a303aa194e Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/fonts/fontawesome-webfont.woff differ diff --git a/Documentation/html/Documentation/Api/Fortran/fonts/glyphicons-halflings-regular.eot b/Documentation/html/Documentation/Api/Fortran/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/fonts/glyphicons-halflings-regular.eot differ diff --git a/Documentation/html/Documentation/Api/Fortran/fonts/glyphicons-halflings-regular.svg b/Documentation/html/Documentation/Api/Fortran/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000000000000000000000000000000000000..25691af8f193a67185a696cb6626ea6418ff6a20 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > +<font-face units-per-em="1200" ascent="960" descent="-240" /> +<missing-glyph horiz-adv-x="500" /> +<glyph /> +<glyph /> +<glyph unicode="
" /> +<glyph unicode=" " /> +<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" /> +<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" /> +<glyph unicode=" " /> +<glyph unicode=" " horiz-adv-x="652" /> +<glyph unicode=" " horiz-adv-x="1304" /> +<glyph unicode=" " horiz-adv-x="652" /> +<glyph unicode=" " horiz-adv-x="1304" /> +<glyph unicode=" " horiz-adv-x="434" /> +<glyph unicode=" " horiz-adv-x="326" /> +<glyph unicode=" " horiz-adv-x="217" /> +<glyph unicode=" " horiz-adv-x="217" /> +<glyph unicode=" " horiz-adv-x="163" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="72" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="326" /> +<glyph unicode="€" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" /> +<glyph unicode="−" d="M200 400h900v300h-900v-300z" /> +<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="☁" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" /> +<glyph unicode="✉" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" /> +<glyph unicode="✏" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" /> +<glyph unicode="" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" /> +<glyph unicode="" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" /> +<glyph unicode="" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" /> +<glyph unicode="" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" /> +<glyph unicode="" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" /> +<glyph unicode="" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" /> +<glyph unicode="" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" /> +<glyph unicode="" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" /> +<glyph unicode="" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" /> +<glyph unicode="" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" /> +<glyph unicode="" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" /> +<glyph unicode="" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" /> +<glyph unicode="" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" /> +<glyph unicode="" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" /> +<glyph unicode="" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" /> +<glyph unicode="" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" /> +<glyph unicode="" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" /> +<glyph unicode="" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" /> +<glyph unicode="" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" /> +<glyph unicode="" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" /> +<glyph unicode="" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" /> +<glyph unicode="" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" /> +<glyph unicode="" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" /> +<glyph unicode="" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" /> +<glyph unicode="" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" /> +<glyph unicode="" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" /> +<glyph unicode="" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" /> +<glyph unicode="" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" /> +<glyph unicode="" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" /> +<glyph unicode="" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" /> +<glyph unicode="" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" /> +<glyph unicode="" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" /> +<glyph unicode="" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" /> +<glyph unicode="" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" /> +<glyph unicode="" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" /> +<glyph unicode="" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" /> +<glyph unicode="" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" /> +<glyph unicode="" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" /> +<glyph unicode="" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" /> +<glyph unicode="" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" /> +<glyph unicode="" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" /> +<glyph unicode="" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " /> +<glyph unicode="" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" /> +<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" /> +<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" /> +<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" /> +<glyph unicode="" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" /> +<glyph unicode="" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" /> +<glyph unicode="" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " /> +<glyph unicode="" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" /> +<glyph unicode="" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" /> +<glyph unicode="" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" /> +<glyph unicode="" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" /> +<glyph unicode="" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" /> +<glyph unicode="" d="M200 0l900 550l-900 550v-1100z" /> +<glyph unicode="" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" /> +<glyph unicode="" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" /> +<glyph unicode="" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" /> +<glyph unicode="" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" /> +<glyph unicode="" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" /> +<glyph unicode="" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" /> +<glyph unicode="" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" /> +<glyph unicode="" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" /> +<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" /> +<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" /> +<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" /> +<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" /> +<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" /> +<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" /> +<glyph unicode="" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" /> +<glyph unicode="" d="M0 547l600 453v-300h600v-300h-600v-301z" /> +<glyph unicode="" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" /> +<glyph unicode="" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" /> +<glyph unicode="" d="M104 600h296v600h300v-600h298l-449 -600z" /> +<glyph unicode="" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" /> +<glyph unicode="" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" /> +<glyph unicode="" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" /> +<glyph unicode="" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" /> +<glyph unicode="" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" /> +<glyph unicode="" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" /> +<glyph unicode="" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" /> +<glyph unicode="" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" /> +<glyph unicode="" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" /> +<glyph unicode="" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" /> +<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" /> +<glyph unicode="" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" /> +<glyph unicode="" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" /> +<glyph unicode="" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" /> +<glyph unicode="" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" /> +<glyph unicode="" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" /> +<glyph unicode="" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" /> +<glyph unicode="" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" /> +<glyph unicode="" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" /> +<glyph unicode="" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" /> +<glyph unicode="" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" /> +<glyph unicode="" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" /> +<glyph unicode="" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" /> +<glyph unicode="" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" /> +<glyph unicode="" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" /> +<glyph unicode="" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" /> +<glyph unicode="" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" /> +<glyph unicode="" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" /> +<glyph unicode="" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" /> +<glyph unicode="" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" /> +<glyph unicode="" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" /> +<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" /> +<glyph unicode="" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" /> +<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" /> +<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" /> +<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" /> +<glyph unicode="" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" /> +<glyph unicode="" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" /> +<glyph unicode="" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" /> +<glyph unicode="" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" /> +<glyph unicode="" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" /> +<glyph unicode="" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" /> +<glyph unicode="" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" /> +<glyph unicode="" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" /> +<glyph unicode="" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" /> +<glyph unicode="" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" /> +<glyph unicode="" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" /> +<glyph unicode="" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" /> +<glyph unicode="" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" /> +<glyph unicode="" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" /> +<glyph unicode="" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" /> +<glyph unicode="" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" /> +<glyph unicode="" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" /> +<glyph unicode="" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" /> +<glyph unicode="" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " /> +<glyph unicode="" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" /> +<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" /> +<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" /> +<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" /> +<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" /> +<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" /> +<glyph unicode="" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" /> +<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" /> +<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" /> +<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" /> +<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" /> +<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" /> +<glyph unicode="" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" /> +<glyph unicode="" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" /> +<glyph unicode="" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" /> +<glyph unicode="" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" /> +<glyph unicode="" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" /> +<glyph unicode="" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" /> +<glyph unicode="" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" /> +<glyph unicode="" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" /> +<glyph unicode="" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" /> +<glyph unicode="" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" /> +<glyph unicode="" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" /> +<glyph unicode="" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" /> +<glyph unicode="" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" /> +<glyph unicode="" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/fonts/glyphicons-halflings-regular.ttf b/Documentation/html/Documentation/Api/Fortran/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..67fa00bf83801d2fa568546b982c80d27f6ef74e Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/fonts/glyphicons-halflings-regular.ttf differ diff --git a/Documentation/html/Documentation/Api/Fortran/fonts/glyphicons-halflings-regular.woff b/Documentation/html/Documentation/Api/Fortran/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..8c54182aa5d4d1ab3c9171976b615c1dcb1dc187 Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/fonts/glyphicons-halflings-regular.woff differ diff --git a/Documentation/html/Documentation/Api/Fortran/index.html b/Documentation/html/Documentation/Api/Fortran/index.html new file mode 100644 index 0000000000000000000000000000000000000000..90381cf241f53c14a240274c57b91686fb3b3a2a --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/index.html @@ -0,0 +1,349 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="./favicon.png"> + + <title> Flex_extract: Calculation of etadot </title> + + <link href="./css/bootstrap.min.css" rel="stylesheet"> + <link href="./css/pygments.css" rel="stylesheet"> + <link href="./css/font-awesome.min.css" rel="stylesheet"> + <link href="./css/local.css" rel="stylesheet"> + + <link href="./tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="./js/jquery-2.1.3.min.js"></script> + <script src="./js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="./index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="./lists/files.html">Source Files</a></li> + + + + <li><a href="./lists/modules.html">Modules</a></li> + + + + <li><a href="./lists/procedures.html">Procedures</a></li> + + + + <li><a href="./program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="./lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="./lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="./lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="./program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="./search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + <!-- Main component for a primary marketing message or call to action --> + <div class="jumbotron"> + <p>Calculation of vertical velocity for FLEXPART</p> + + <p> Find us on…</p> + <p> + + + + + <a class="btn btn-lg btn-primary" href="https://flexpart.eu/" role="button">The Web</a> + + + + <a class="btn btn-lg btn-danger" style="float:right" href="https://www.flexpart.eu/downloads" role="button">Download the Source</a> + + </p> + </div> + + <div class="row" id='text'> + + <div class="col-md-8"> + + <h1>Flex_extract: Calculation of etadot</h1> + <p></p><div class="alert alert-info" role="alert"><h4>Note</h4><p>for this version: +All code transferred to free form. +Some code cosmetics, should not have any effects +Rename some source files</p></div> + </div> + + <div class="col-md-4"> + <div class="well"> + <h2>Developer Info</h2> + <h4>Leopold Haimberger<sup>1</sup></h4> + + <img src="./fplogo.jpg" alt="Developer picture" class="img-thumbnail"> + + <p><sup>1</sup>Univ. of Vienna, Dept. of Meteorology & Geophysics</p> + + </div> + </div> + + </div> + + + + + + <div class="row"> + <div class="col-xs-6 col-sm-4"> + <h3>Source Files</h3> + <ul> + + + <li><a href='./sourcefile/calc_etadot.f90.html'>calc_etadot.f90</a></li> + + + + <li><a href='./sourcefile/ftrafo.f90.html'>ftrafo.f90</a></li> + + + + <li><a href='./sourcefile/grphreal.f90.html'>grphreal.f90</a></li> + + + + <li><a href='./sourcefile/phgrreal.f90.html'>phgrreal.f90</a></li> + + + + <li><a href='./sourcefile/posnam.f90.html'>posnam.f90</a></li> + + + + <li><a href='./sourcefile/rwgrib2.f90.html'>rwgrib2.f90</a></li> + + + </ul> + </div> + + <div class="col-xs-6 col-sm-4"> + <h3>Modules</h3> + <ul> + + + <li><a href='./module/ftrafo.html'>FTRAFO</a></li> + + + + <li><a href='./module/grtoph.html'>GRTOPH</a></li> + + + + <li><a href='./module/phtogr.html'>PHTOGR</a></li> + + + + <li><a href='./module/rwgrib2.html'>RWGRIB2</a></li> + + + </ul> + </div> + + + <div class="col-xs-6 col-sm-4"> + <h3>Procedures</h3> + <ul> + + + <li><a href='./proc/contgl.html'>CONTGL</a></li> + + + + <li><a href='./proc/dplgnd.html'>DPLGND</a></li> + + + + <li><a href='./proc/gauleg.html'>GAULEG</a></li> + + + + <li><a href='./proc/grph213.html'>GRPH213</a></li> + + + + <li><a href='./proc/grphsub.html'>GRPHSUB</a></li> + + + + <li><a href='./proc/ia.html'>IA</a></li> + + + + <li><a href='./proc/legtr.html'>LEGTR</a></li> + + + + <li><a href='./proc/lgtr213.html'>LGTR213</a></li> + + + + <li><a href='./proc/omega.html'>OMEGA</a></li> + + + + <li><a href='./proc/phgcut.html'>PHGCUT</a></li> + + + + <li><a href="./lists/procedures.html"><em>All procedures…</em></a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + </ul> + </div> + + + </div> + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="./js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="./js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="./tipuesearch/tipuesearch_content.js"></script> + <script src="./tipuesearch/tipuesearch_set.js"></script> + <script src="./tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/js/bootstrap.js b/Documentation/html/Documentation/Api/Fortran/js/bootstrap.js new file mode 100644 index 0000000000000000000000000000000000000000..b6ac8d9903bd002426887977dd457f19b8fa9bb9 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/js/bootstrap.js @@ -0,0 +1,2320 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} + ++function ($) { + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher') + } +}(jQuery); + +/* ======================================================================== + * Bootstrap: transition.js v3.3.1 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.3.1 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.VERSION = '3.3.1' + + Alert.TRANSITION_DURATION = 150 + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.closest('.alert') + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.alert + + $.fn.alert = Plugin + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.3.1 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.VERSION = '3.3.1' + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked') && this.$element.hasClass('active')) changed = false + else $parent.find('.active').removeClass('active') + } + if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + } + + if (changed) this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + var old = $.fn.button + + $.fn.button = Plugin + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + Plugin.call($btn, 'toggle') + e.preventDefault() + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.3.1 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) + } + + Carousel.VERSION = '3.3.1' + + Carousel.TRANSITION_DURATION = 600 + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true + } + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.getItemForDirection = function (direction, active) { + var delta = direction == 'prev' ? -1 : 1 + var activeIndex = this.getItemIndex(active) + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + if (!$next.length) { + if (!this.options.wrap) return + $next = this.$element.find('.item')[fallback]() + } + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.3.1 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.$trigger = $(this.options.trigger).filter('[href="#' + element.id + '"], [data-target="#' + element.id + '"]') + this.transitioning = null + + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + + if (this.options.toggle) this.toggle() + } + + Collapse.VERSION = '3.3.1' + + Collapse.TRANSITION_DURATION = 350 + + Collapse.DEFAULTS = { + toggle: true, + trigger: '[data-toggle="collapse"]' + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var activesData + var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + if (actives && actives.length) { + Plugin.call(actives, 'hide') + activesData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true) + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension]('') + this.transitioning = 0 + this.$element + .trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse in') + .attr('aria-expanded', false) + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false) + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .removeClass('collapsing') + .addClass('collapse') + .trigger('hidden.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element) + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + } + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in') + + $element.attr('aria-expanded', isOpen) + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + } + + function getTargetFromTrigger($trigger) { + var href + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + + return $(target) + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && option == 'show') options.toggle = false + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse + + $.fn.collapse = Plugin + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this) + + if (!$this.attr('data-target')) e.preventDefault() + + var $target = getTargetFromTrigger($this) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this }) + + Plugin.call($target, option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.1 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.1' + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus) + } + + var relatedTarget = { relatedTarget: this } + $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this + .trigger('focus') + .attr('aria-expanded', 'true') + + $parent + .toggleClass('open') + .trigger('shown.bs.dropdown', relatedTarget) + } + + return false + } + + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return + + var $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + if ((!isActive && e.which != 27) || (isActive && e.which == 27)) { + if (e.which == 27) $parent.find(toggle).trigger('focus') + return $this.trigger('click') + } + + var desc = ' li:not(.divider):visible a' + var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc) + + if (!$items.length) return + + var index = $items.index(e.target) + + if (e.which == 38 && index > 0) index-- // up + if (e.which == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items.eq(index).trigger('focus') + } + + function clearMenus(e) { + if (e && e.which === 3) return + $(backdrop).remove() + $(toggle).each(function () { + var $this = $(this) + var $parent = getParent($this) + var relatedTarget = { relatedTarget: this } + + if (!$parent.hasClass('open')) return + + $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this.attr('aria-expanded', 'false') + $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget) + }) + } + + function getParent($this) { + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = selector && $(selector) + + return $parent && $parent.length ? $parent : $this.parent() + } + + + // DROPDOWN PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.dropdown') + + if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.dropdown + + $.fn.dropdown = Plugin + $.fn.dropdown.Constructor = Dropdown + + + // DROPDOWN NO CONFLICT + // ==================== + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + + $(document) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) + .on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown) + .on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: modal.js v3.3.1 + * http://getbootstrap.com/javascript/#modals + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // MODAL CLASS DEFINITION + // ====================== + + var Modal = function (element, options) { + this.options = options + this.$body = $(document.body) + this.$element = $(element) + this.$backdrop = + this.isShown = null + this.scrollbarWidth = 0 + + if (this.options.remote) { + this.$element + .find('.modal-content') + .load(this.options.remote, $.proxy(function () { + this.$element.trigger('loaded.bs.modal') + }, this)) + } + } + + Modal.VERSION = '3.3.1' + + Modal.TRANSITION_DURATION = 300 + Modal.BACKDROP_TRANSITION_DURATION = 150 + + Modal.DEFAULTS = { + backdrop: true, + keyboard: true, + show: true + } + + Modal.prototype.toggle = function (_relatedTarget) { + return this.isShown ? this.hide() : this.show(_relatedTarget) + } + + Modal.prototype.show = function (_relatedTarget) { + var that = this + var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.checkScrollbar() + this.setScrollbar() + this.$body.addClass('modal-open') + + this.escape() + this.resize() + + this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(that.$body) // don't move modals dom position + } + + that.$element + .show() + .scrollTop(0) + + if (that.options.backdrop) that.adjustBackdrop() + that.adjustDialog() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element + .addClass('in') + .attr('aria-hidden', false) + + that.enforceFocus() + + var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) + + transition ? + that.$element.find('.modal-dialog') // wait for modal to slide in + .one('bsTransitionEnd', function () { + that.$element.trigger('focus').trigger(e) + }) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + that.$element.trigger('focus').trigger(e) + }) + } + + Modal.prototype.hide = function (e) { + if (e) e.preventDefault() + + e = $.Event('hide.bs.modal') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + this.resize() + + $(document).off('focusin.bs.modal') + + this.$element + .removeClass('in') + .attr('aria-hidden', true) + .off('click.dismiss.bs.modal') + + $.support.transition && this.$element.hasClass('fade') ? + this.$element + .one('bsTransitionEnd', $.proxy(this.hideModal, this)) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + this.hideModal() + } + + Modal.prototype.enforceFocus = function () { + $(document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { + this.$element.trigger('focus') + } + }, this)) + } + + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keydown.dismiss.bs.modal') + } + } + + Modal.prototype.resize = function () { + if (this.isShown) { + $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) + } else { + $(window).off('resize.bs.modal') + } + } + + Modal.prototype.hideModal = function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.$body.removeClass('modal-open') + that.resetAdjustments() + that.resetScrollbar() + that.$element.trigger('hidden.bs.modal') + }) + } + + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + Modal.prototype.backdrop = function (callback) { + var that = this + var animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') + .prependTo(this.$element) + .on('click.dismiss.bs.modal', $.proxy(function (e) { + if (e.target !== e.currentTarget) return + this.options.backdrop == 'static' + ? this.$element[0].focus.call(this.$element[0]) + : this.hide.call(this) + }, this)) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + if (!callback) return + + doAnimate ? + this.$backdrop + .one('bsTransitionEnd', callback) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + var callbackRemove = function () { + that.removeBackdrop() + callback && callback() + } + $.support.transition && this.$element.hasClass('fade') ? + this.$backdrop + .one('bsTransitionEnd', callbackRemove) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callbackRemove() + + } else if (callback) { + callback() + } + } + + // these following methods are used to handle overflowing modals + + Modal.prototype.handleUpdate = function () { + if (this.options.backdrop) this.adjustBackdrop() + this.adjustDialog() + } + + Modal.prototype.adjustBackdrop = function () { + this.$backdrop + .css('height', 0) + .css('height', this.$element[0].scrollHeight) + } + + Modal.prototype.adjustDialog = function () { + var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight + + this.$element.css({ + paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', + paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' + }) + } + + Modal.prototype.resetAdjustments = function () { + this.$element.css({ + paddingLeft: '', + paddingRight: '' + }) + } + + Modal.prototype.checkScrollbar = function () { + this.bodyIsOverflowing = document.body.scrollHeight > document.documentElement.clientHeight + this.scrollbarWidth = this.measureScrollbar() + } + + Modal.prototype.setScrollbar = function () { + var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) + if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) + } + + Modal.prototype.resetScrollbar = function () { + this.$body.css('padding-right', '') + } + + Modal.prototype.measureScrollbar = function () { // thx walsh + var scrollDiv = document.createElement('div') + scrollDiv.className = 'modal-scrollbar-measure' + this.$body.append(scrollDiv) + var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth + this.$body[0].removeChild(scrollDiv) + return scrollbarWidth + } + + + // MODAL PLUGIN DEFINITION + // ======================= + + function Plugin(option, _relatedTarget) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.modal') + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option](_relatedTarget) + else if (options.show) data.show(_relatedTarget) + }) + } + + var old = $.fn.modal + + $.fn.modal = Plugin + $.fn.modal.Constructor = Modal + + + // MODAL NO CONFLICT + // ================= + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + // MODAL DATA-API + // ============== + + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + var href = $this.attr('href') + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 + var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) + + if ($this.is('a')) e.preventDefault() + + $target.one('show.bs.modal', function (showEvent) { + if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown + $target.one('hidden.bs.modal', function () { + $this.is(':visible') && $this.trigger('focus') + }) + }) + Plugin.call($target, option, this) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tooltip.js v3.3.1 + * http://getbootstrap.com/javascript/#tooltip + * Inspired by the original jQuery.tipsy by Jason Frame + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TOOLTIP PUBLIC CLASS DEFINITION + // =============================== + + var Tooltip = function (element, options) { + this.type = + this.options = + this.enabled = + this.timeout = + this.hoverState = + this.$element = null + + this.init('tooltip', element, options) + } + + Tooltip.VERSION = '3.3.1' + + Tooltip.TRANSITION_DURATION = 150 + + Tooltip.DEFAULTS = { + animation: true, + placement: 'top', + selector: false, + template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + container: false, + viewport: { + selector: 'body', + padding: 0 + } + } + + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport) + + var triggers = this.options.trigger.split(' ') + + for (var i = triggers.length; i--;) { + var trigger = triggers[i] + + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' + var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' + + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + } + + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay, + hide: options.delay + } + } + + return options + } + + Tooltip.prototype.getDelegateOptions = function () { + var options = {} + var defaults = this.getDefaults() + + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }) + + return options + } + + Tooltip.prototype.enter = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (self && self.$tip && self.$tip.is(':visible')) { + self.hoverState = 'in' + return + } + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + clearTimeout(self.timeout) + + self.hoverState = 'in' + + if (!self.options.delay || !self.options.delay.show) return self.show() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + clearTimeout(self.timeout) + + self.hoverState = 'out' + + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.' + this.type) + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + + var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) + if (e.isDefaultPrevented() || !inDom) return + var that = this + + var $tip = this.tip() + + var tipId = this.getUID(this.type) + + this.setContent() + $tip.attr('id', tipId) + this.$element.attr('aria-describedby', tipId) + + if (this.options.animation) $tip.addClass('fade') + + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + var autoToken = /\s?auto?\s?/i + var autoPlace = autoToken.test(placement) + if (autoPlace) placement = placement.replace(autoToken, '') || 'top' + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + .addClass(placement) + .data('bs.' + this.type, this) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + + var pos = this.getPosition() + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (autoPlace) { + var orgPlacement = placement + var $container = this.options.container ? $(this.options.container) : this.$element.parent() + var containerDim = this.getPosition($container) + + placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' : + placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' : + placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' : + placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' : + placement + + $tip + .removeClass(orgPlacement) + .addClass(placement) + } + + var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) + + this.applyPlacement(calculatedOffset, placement) + + var complete = function () { + var prevHoverState = that.hoverState + that.$element.trigger('shown.bs.' + that.type) + that.hoverState = null + + if (prevHoverState == 'out') that.leave(that) + } + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + } + } + + Tooltip.prototype.applyPlacement = function (offset, placement) { + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight + + // manually read margins because getBoundingClientRect includes difference + var marginTop = parseInt($tip.css('margin-top'), 10) + var marginLeft = parseInt($tip.css('margin-left'), 10) + + // we must check for NaN for ie 8/9 + if (isNaN(marginTop)) marginTop = 0 + if (isNaN(marginLeft)) marginLeft = 0 + + offset.top = offset.top + marginTop + offset.left = offset.left + marginLeft + + // $.fn.offset doesn't round pixel values + // so we use setOffset directly with our own function B-0 + $.offset.setOffset($tip[0], $.extend({ + using: function (props) { + $tip.css({ + top: Math.round(props.top), + left: Math.round(props.left) + }) + } + }, offset), 0) + + $tip.addClass('in') + + // check to see if placing tip in new offset caused the tip to resize itself + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + offset.top = offset.top + height - actualHeight + } + + var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) + + if (delta.left) offset.left += delta.left + else offset.top += delta.top + + var isVertical = /top|bottom/.test(placement) + var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight + var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' + + $tip.offset(offset) + this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) + } + + Tooltip.prototype.replaceArrow = function (delta, dimension, isHorizontal) { + this.arrow() + .css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') + .css(isHorizontal ? 'top' : 'left', '') + } + + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + Tooltip.prototype.hide = function (callback) { + var that = this + var $tip = this.tip() + var e = $.Event('hide.bs.' + this.type) + + function complete() { + if (that.hoverState != 'in') $tip.detach() + that.$element + .removeAttr('aria-describedby') + .trigger('hidden.bs.' + that.type) + callback && callback() + } + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + $tip.removeClass('in') + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + + this.hoverState = null + + return this + } + + Tooltip.prototype.fixTitle = function () { + var $e = this.$element + if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + } + + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } + + Tooltip.prototype.getPosition = function ($element) { + $element = $element || this.$element + + var el = $element[0] + var isBody = el.tagName == 'BODY' + + var elRect = el.getBoundingClientRect() + if (elRect.width == null) { + // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 + elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) + } + var elOffset = isBody ? { top: 0, left: 0 } : $element.offset() + var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } + var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null + + return $.extend({}, elRect, scroll, outerDims, elOffset) + } + + Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { + return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : + /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } + + } + + Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { + var delta = { top: 0, left: 0 } + if (!this.$viewport) return delta + + var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 + var viewportDimensions = this.getPosition(this.$viewport) + + if (/right|left/.test(placement)) { + var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll + var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight + if (topEdgeOffset < viewportDimensions.top) { // top overflow + delta.top = viewportDimensions.top - topEdgeOffset + } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow + delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset + } + } else { + var leftEdgeOffset = pos.left - viewportPadding + var rightEdgeOffset = pos.left + viewportPadding + actualWidth + if (leftEdgeOffset < viewportDimensions.left) { // left overflow + delta.left = viewportDimensions.left - leftEdgeOffset + } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow + delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset + } + } + + return delta + } + + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + Tooltip.prototype.getUID = function (prefix) { + do prefix += ~~(Math.random() * 1000000) + while (document.getElementById(prefix)) + return prefix + } + + Tooltip.prototype.tip = function () { + return (this.$tip = this.$tip || $(this.options.template)) + } + + Tooltip.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) + } + + Tooltip.prototype.enable = function () { + this.enabled = true + } + + Tooltip.prototype.disable = function () { + this.enabled = false + } + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } + + Tooltip.prototype.toggle = function (e) { + var self = this + if (e) { + self = $(e.currentTarget).data('bs.' + this.type) + if (!self) { + self = new this.constructor(e.currentTarget, this.getDelegateOptions()) + $(e.currentTarget).data('bs.' + this.type, self) + } + } + + self.tip().hasClass('in') ? self.leave(self) : self.enter(self) + } + + Tooltip.prototype.destroy = function () { + var that = this + clearTimeout(this.timeout) + this.hide(function () { + that.$element.off('.' + that.type).removeData('bs.' + that.type) + }) + } + + + // TOOLTIP PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option + var selector = options && options.selector + + if (!data && option == 'destroy') return + if (selector) { + if (!data) $this.data('bs.tooltip', (data = {})) + if (!data[selector]) data[selector] = new Tooltip(this, options) + } else { + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) + } + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tooltip + + $.fn.tooltip = Plugin + $.fn.tooltip.Constructor = Tooltip + + + // TOOLTIP NO CONFLICT + // =================== + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: popover.js v3.3.1 + * http://getbootstrap.com/javascript/#popovers + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // POPOVER PUBLIC CLASS DEFINITION + // =============================== + + var Popover = function (element, options) { + this.init('popover', element, options) + } + + if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') + + Popover.VERSION = '3.3.1' + + Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { + placement: 'right', + trigger: 'click', + content: '', + template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' + }) + + + // NOTE: POPOVER EXTENDS tooltip.js + // ================================ + + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) + + Popover.prototype.constructor = Popover + + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS + } + + Popover.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + var content = this.getContent() + + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events + this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' + ](content) + + $tip.removeClass('fade top bottom left right in') + + // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do + // this manually by checking the contents. + if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() + } + + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + } + + Popover.prototype.getContent = function () { + var $e = this.$element + var o = this.options + + return $e.attr('data-content') + || (typeof o.content == 'function' ? + o.content.call($e[0]) : + o.content) + } + + Popover.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.arrow')) + } + + Popover.prototype.tip = function () { + if (!this.$tip) this.$tip = $(this.options.template) + return this.$tip + } + + + // POPOVER PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.popover') + var options = typeof option == 'object' && option + var selector = options && options.selector + + if (!data && option == 'destroy') return + if (selector) { + if (!data) $this.data('bs.popover', (data = {})) + if (!data[selector]) data[selector] = new Popover(this, options) + } else { + if (!data) $this.data('bs.popover', (data = new Popover(this, options))) + } + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.popover + + $.fn.popover = Plugin + $.fn.popover.Constructor = Popover + + + // POPOVER NO CONFLICT + // =================== + + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: scrollspy.js v3.3.1 + * http://getbootstrap.com/javascript/#scrollspy + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // SCROLLSPY CLASS DEFINITION + // ========================== + + function ScrollSpy(element, options) { + var process = $.proxy(this.process, this) + + this.$body = $('body') + this.$scrollElement = $(element).is('body') ? $(window) : $(element) + this.options = $.extend({}, ScrollSpy.DEFAULTS, options) + this.selector = (this.options.target || '') + ' .nav li > a' + this.offsets = [] + this.targets = [] + this.activeTarget = null + this.scrollHeight = 0 + + this.$scrollElement.on('scroll.bs.scrollspy', process) + this.refresh() + this.process() + } + + ScrollSpy.VERSION = '3.3.1' + + ScrollSpy.DEFAULTS = { + offset: 10 + } + + ScrollSpy.prototype.getScrollHeight = function () { + return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) + } + + ScrollSpy.prototype.refresh = function () { + var offsetMethod = 'offset' + var offsetBase = 0 + + if (!$.isWindow(this.$scrollElement[0])) { + offsetMethod = 'position' + offsetBase = this.$scrollElement.scrollTop() + } + + this.offsets = [] + this.targets = [] + this.scrollHeight = this.getScrollHeight() + + var self = this + + this.$body + .find(this.selector) + .map(function () { + var $el = $(this) + var href = $el.data('target') || $el.attr('href') + var $href = /^#./.test(href) && $(href) + + return ($href + && $href.length + && $href.is(':visible') + && [[$href[offsetMethod]().top + offsetBase, href]]) || null + }) + .sort(function (a, b) { return a[0] - b[0] }) + .each(function () { + self.offsets.push(this[0]) + self.targets.push(this[1]) + }) + } + + ScrollSpy.prototype.process = function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset + var scrollHeight = this.getScrollHeight() + var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() + var offsets = this.offsets + var targets = this.targets + var activeTarget = this.activeTarget + var i + + if (this.scrollHeight != scrollHeight) { + this.refresh() + } + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) + } + + if (activeTarget && scrollTop < offsets[0]) { + this.activeTarget = null + return this.clear() + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) + && this.activate(targets[i]) + } + } + + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target + + this.clear() + + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' + + var active = $(selector) + .parents('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') + } + + active.trigger('activate.bs.scrollspy') + } + + ScrollSpy.prototype.clear = function () { + $(this.selector) + .parentsUntil(this.options.target, '.active') + .removeClass('active') + } + + + // SCROLLSPY PLUGIN DEFINITION + // =========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.scrollspy') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.scrollspy + + $.fn.scrollspy = Plugin + $.fn.scrollspy.Constructor = ScrollSpy + + + // SCROLLSPY NO CONFLICT + // ===================== + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this + } + + + // SCROLLSPY DATA-API + // ================== + + $(window).on('load.bs.scrollspy.data-api', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + Plugin.call($spy, $spy.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tab.js v3.3.1 + * http://getbootstrap.com/javascript/#tabs + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TAB CLASS DEFINITION + // ==================== + + var Tab = function (element) { + this.element = $(element) + } + + Tab.VERSION = '3.3.1' + + Tab.TRANSITION_DURATION = 150 + + Tab.prototype.show = function () { + var $this = this.element + var $ul = $this.closest('ul:not(.dropdown-menu)') + var selector = $this.data('target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + if ($this.parent('li').hasClass('active')) return + + var $previous = $ul.find('.active:last a') + var hideEvent = $.Event('hide.bs.tab', { + relatedTarget: $this[0] + }) + var showEvent = $.Event('show.bs.tab', { + relatedTarget: $previous[0] + }) + + $previous.trigger(hideEvent) + $this.trigger(showEvent) + + if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return + + var $target = $(selector) + + this.activate($this.closest('li'), $ul) + this.activate($target, $target.parent(), function () { + $previous.trigger({ + type: 'hidden.bs.tab', + relatedTarget: $this[0] + }) + $this.trigger({ + type: 'shown.bs.tab', + relatedTarget: $previous[0] + }) + }) + } + + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active') + var transition = callback + && $.support.transition + && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length) + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', false) + + element + .addClass('active') + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if (element.parent('.dropdown-menu')) { + element + .closest('li.dropdown') + .addClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + } + + callback && callback() + } + + $active.length && transition ? + $active + .one('bsTransitionEnd', next) + .emulateTransitionEnd(Tab.TRANSITION_DURATION) : + next() + + $active.removeClass('in') + } + + + // TAB PLUGIN DEFINITION + // ===================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tab') + + if (!data) $this.data('bs.tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tab + + $.fn.tab = Plugin + $.fn.tab.Constructor = Tab + + + // TAB NO CONFLICT + // =============== + + $.fn.tab.noConflict = function () { + $.fn.tab = old + return this + } + + + // TAB DATA-API + // ============ + + var clickHandler = function (e) { + e.preventDefault() + Plugin.call($(this), 'show') + } + + $(document) + .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) + .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: affix.js v3.3.1 + * http://getbootstrap.com/javascript/#affix + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // AFFIX CLASS DEFINITION + // ====================== + + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options) + + this.$target = $(this.options.target) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) + + this.$element = $(element) + this.affixed = + this.unpin = + this.pinnedOffset = null + + this.checkPosition() + } + + Affix.VERSION = '3.3.1' + + Affix.RESET = 'affix affix-top affix-bottom' + + Affix.DEFAULTS = { + offset: 0, + target: window + } + + Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + var targetHeight = this.$target.height() + + if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false + + if (this.affixed == 'bottom') { + if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' + return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' + } + + var initializing = this.affixed == null + var colliderTop = initializing ? scrollTop : position.top + var colliderHeight = initializing ? targetHeight : height + + if (offsetTop != null && colliderTop <= offsetTop) return 'top' + if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' + + return false + } + + Affix.prototype.getPinnedOffset = function () { + if (this.pinnedOffset) return this.pinnedOffset + this.$element.removeClass(Affix.RESET).addClass('affix') + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + return (this.pinnedOffset = position.top - scrollTop) + } + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var height = this.$element.height() + var offset = this.options.offset + var offsetTop = offset.top + var offsetBottom = offset.bottom + var scrollHeight = $('body').height() + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) + + var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) + + if (this.affixed != affix) { + if (this.unpin != null) this.$element.css('top', '') + + var affixType = 'affix' + (affix ? '-' + affix : '') + var e = $.Event(affixType + '.bs.affix') + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + this.affixed = affix + this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null + + this.$element + .removeClass(Affix.RESET) + .addClass(affixType) + .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') + } + + if (affix == 'bottom') { + this.$element.offset({ + top: scrollHeight - height - offsetBottom + }) + } + } + + + // AFFIX PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.affix') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.affix + + $.fn.affix = Plugin + $.fn.affix.Constructor = Affix + + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + var data = $spy.data() + + data.offset = data.offset || {} + + if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom + if (data.offsetTop != null) data.offset.top = data.offsetTop + + Plugin.call($spy, data) + }) + }) + +}(jQuery); diff --git a/Documentation/html/Documentation/Api/Fortran/js/bootstrap.min.js b/Documentation/html/Documentation/Api/Fortran/js/bootstrap.min.js new file mode 100644 index 0000000000000000000000000000000000000000..d839865900c1ab1245618347dcb0a0d4bb01b893 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.1",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.1",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.1",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c="prev"==a?-1:1,d=this.getItemIndex(b),e=(d+c)%this.$items.length;return this.$items.eq(e)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i="next"==b?"first":"last",j=this;if(!f.length){if(!this.options.wrap)return;f=this.$element.find(".item")[i]()}if(f.hasClass("active"))return this.sliding=!1;var k=f[0],l=a.Event("slide.bs.carousel",{relatedTarget:k,direction:h});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var m=a(this.$indicators.children()[this.getItemIndex(f)]);m&&m.addClass("active")}var n=a.Event("slid.bs.carousel",{relatedTarget:k,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),j.sliding=!1,setTimeout(function(){j.$element.trigger(n)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(n)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.1",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.find("> .panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.1",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.1",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.options.backdrop&&d.adjustBackdrop(),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').prependTo(this.$element).on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.options.backdrop&&this.adjustBackdrop(),this.adjustDialog()},c.prototype.adjustBackdrop=function(){this.$backdrop.css("height",0).css("height",this.$element[0].scrollHeight)},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){this.bodyIsOverflowing=document.body.scrollHeight>document.documentElement.clientHeight,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.tooltip",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=this.tip(),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.popover",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.1",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.1",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]}) +})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.1",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=i?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a("body").height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/js/ie10-viewport-bug-workaround.js b/Documentation/html/Documentation/Api/Fortran/js/ie10-viewport-bug-workaround.js new file mode 100644 index 0000000000000000000000000000000000000000..7f53b614584cadb28aa9fc31f4aa89d5ddc9f622 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/js/ie10-viewport-bug-workaround.js @@ -0,0 +1,22 @@ +/*! + * IE10 viewport hack for Surface/desktop Windows 8 bug + * Copyright 2014 Twitter, Inc. + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see http://creativecommons.org/licenses/by/3.0/. + */ + +// See the Getting Started docs for more information: +// http://getbootstrap.com/getting-started/#support-ie10-width + +(function () { + 'use strict'; + if (navigator.userAgent.match(/IEMobile\/10\.0/)) { + var msViewportStyle = document.createElement('style') + msViewportStyle.appendChild( + document.createTextNode( + '@-ms-viewport{width:auto!important}' + ) + ) + document.querySelector('head').appendChild(msViewportStyle) + } +})(); diff --git a/Documentation/html/Documentation/Api/Fortran/js/jquery-2.1.3.min.js b/Documentation/html/Documentation/Api/Fortran/js/jquery-2.1.3.min.js new file mode 100644 index 0000000000000000000000000000000000000000..25714ed29ab6fcf0355da4b45ac602fac0154efb --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/js/jquery-2.1.3.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"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){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.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||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},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?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;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;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=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=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(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 pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),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){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.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===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(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,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||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 gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.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},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.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=gb.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=gb.selectors={cacheLength:50,createPseudo:ib,match:X,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(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===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]||gb.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]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.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(cb,db).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("(^|"+L+")"+a+"("+L+"|$)"))&&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=gb.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(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},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;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(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:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).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:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!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 Z.test(a.nodeName)},input:function(a){return Y.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:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?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]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.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=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[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?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(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 ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(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?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(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}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;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};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c) +},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.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=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.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 L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.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=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),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),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==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,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(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=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={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,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.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 this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(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&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.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 yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=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};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{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=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):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):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.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 Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.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;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.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=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.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)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.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;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b)) +},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.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){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},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)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec=/#.*$/,fc=/([?&])_=[^&]*/,gc=/^(.*?):[ \t]*([^\r\n]*)$/gm,hc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ic=/^(?:GET|HEAD)$/,jc=/^\/\//,kc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lc={},mc={},nc="*/".concat("*"),oc=a.location.href,pc=kc.exec(oc.toLowerCase())||[];function qc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.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 rc(a,b,c,d){var e={},f=a===mc;function g(h){var i;return e[h]=!0,n.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 sc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tc(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}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function uc(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}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:oc,type:"GET",isLocal:hc.test(pc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sc(sc(a,n.ajaxSettings),b):sc(n.ajaxSettings,a)},ajaxPrefilter:qc(lc),ajaxTransport:qc(mc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gc.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||oc)+"").replace(ec,"").replace(jc,pc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pc[1]&&h[2]===pc[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pc[3]||("http:"===pc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rc(lc,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ic.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fc.test(d)?d.replace(fc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+nc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rc(mc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tc(k,v,f)),u=uc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(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 this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vc=/%20/g,wc=/\[\]$/,xc=/\r?\n/g,yc=/^(?:submit|button|image|reset|file)$/i,zc=/^(?:input|select|textarea|keygen)/i;function Ac(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wc.test(a)?d(a,e):Ac(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ac(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ac(c,a[c],b,e);return d.join("&").replace(vc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zc.test(this.nodeName)&&!yc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xc,"\r\n")}}):{name:b.name,value:c.replace(xc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bc=0,Cc={},Dc={0:200,1223:204},Ec=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cc)Cc[a]()}),k.cors=!!Ec&&"withCredentials"in Ec,k.ajax=Ec=!!Ec,n.ajaxTransport(function(a){var b;return k.cors||Ec&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Dc[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Cc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fc=[],Gc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Fc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hc)return Hc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ic=a.document.documentElement;function Jc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.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),n.isFunction(b)&&(b=b.call(a,c,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)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ic;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ic})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Kc=a.jQuery,Lc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lc),b&&a.jQuery===n&&(a.jQuery=Kc),n},typeof b===U&&(a.jQuery=a.$=n),n}); diff --git a/Documentation/html/Documentation/Api/Fortran/js/svg-pan-zoom.min.js b/Documentation/html/Documentation/Api/Fortran/js/svg-pan-zoom.min.js new file mode 100644 index 0000000000000000000000000000000000000000..328f5e742f24ba61944b3f34ee6ac1557e297ebe --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/js/svg-pan-zoom.min.js @@ -0,0 +1,3 @@ +// svg-pan-zoom v3.2.3 +// https://github.com/ariutta/svg-pan-zoom +!function t(e,o,n){function i(r,a){if(!o[r]){if(!e[r]){var l="function"==typeof require&&require;if(!a&&l)return l(r,!0);if(s)return s(r,!0);var u=new Error("Cannot find module '"+r+"'");throw u.code="MODULE_NOT_FOUND",u}var h=o[r]={exports:{}};e[r][0].call(h.exports,function(t){var o=e[r][1][t];return i(o?o:t)},h,h.exports,t,e,o,n)}return o[r].exports}for(var s="function"==typeof require&&require,r=0;r<n.length;r++)i(n[r]);return i}({1:[function(t,e){var o=t("./svg-pan-zoom.js");!function(t){"function"==typeof define&&define.amd?define("svg-pan-zoom",function(){return o}):"undefined"!=typeof e&&e.exports&&(e.exports=o,t.svgPanZoom=o)}(window,document)},{"./svg-pan-zoom.js":4}],2:[function(t,e){var o=t("./svg-utilities");e.exports={enable:function(t){var e=t.svg.querySelector("defs");e||(e=document.createElementNS(o.svgNS,"defs"),t.svg.appendChild(e));var n=document.createElementNS(o.svgNS,"style");n.setAttribute("type","text/css"),n.textContent=".svg-pan-zoom-control { cursor: pointer; fill: black; fill-opacity: 0.333; } .svg-pan-zoom-control:hover { fill-opacity: 0.8; } .svg-pan-zoom-control-background { fill: white; fill-opacity: 0.5; } .svg-pan-zoom-control-background { fill-opacity: 0.8; }",e.appendChild(n);var i=document.createElementNS(o.svgNS,"g");i.setAttribute("id","svg-pan-zoom-controls"),i.setAttribute("transform","translate("+(t.width-70)+" "+(t.height-76)+") scale(0.75)"),i.setAttribute("class","svg-pan-zoom-control"),i.appendChild(this._createZoomIn(t)),i.appendChild(this._createZoomReset(t)),i.appendChild(this._createZoomOut(t)),t.svg.appendChild(i),t.controlIcons=i},_createZoomIn:function(t){var e=document.createElementNS(o.svgNS,"g");e.setAttribute("id","svg-pan-zoom-zoom-in"),e.setAttribute("transform","translate(30.5 5) scale(0.015)"),e.setAttribute("class","svg-pan-zoom-control"),e.addEventListener("click",function(){t.getPublicInstance().zoomIn()},!1),e.addEventListener("touchstart",function(){t.getPublicInstance().zoomIn()},!1);var n=document.createElementNS(o.svgNS,"rect");n.setAttribute("x","0"),n.setAttribute("y","0"),n.setAttribute("width","1500"),n.setAttribute("height","1400"),n.setAttribute("class","svg-pan-zoom-control-background"),e.appendChild(n);var i=document.createElementNS(o.svgNS,"path");return i.setAttribute("d","M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z"),i.setAttribute("class","svg-pan-zoom-control-element"),e.appendChild(i),e},_createZoomReset:function(t){var e=document.createElementNS(o.svgNS,"g");e.setAttribute("id","svg-pan-zoom-reset-pan-zoom"),e.setAttribute("transform","translate(5 35) scale(0.4)"),e.setAttribute("class","svg-pan-zoom-control"),e.addEventListener("click",function(){t.getPublicInstance().reset()},!1),e.addEventListener("touchstart",function(){t.getPublicInstance().reset()},!1);var n=document.createElementNS(o.svgNS,"rect");n.setAttribute("x","2"),n.setAttribute("y","2"),n.setAttribute("width","182"),n.setAttribute("height","58"),n.setAttribute("class","svg-pan-zoom-control-background"),e.appendChild(n);var i=document.createElementNS(o.svgNS,"path");i.setAttribute("d","M33.051,20.632c-0.742-0.406-1.854-0.609-3.338-0.609h-7.969v9.281h7.769c1.543,0,2.701-0.188,3.473-0.562c1.365-0.656,2.048-1.953,2.048-3.891C35.032,22.757,34.372,21.351,33.051,20.632z"),i.setAttribute("class","svg-pan-zoom-control-element"),e.appendChild(i);var s=document.createElementNS(o.svgNS,"path");return s.setAttribute("d","M170.231,0.5H15.847C7.102,0.5,0.5,5.708,0.5,11.84v38.861C0.5,56.833,7.102,61.5,15.847,61.5h154.384c8.745,0,15.269-4.667,15.269-10.798V11.84C185.5,5.708,178.976,0.5,170.231,0.5z M42.837,48.569h-7.969c-0.219-0.766-0.375-1.383-0.469-1.852c-0.188-0.969-0.289-1.961-0.305-2.977l-0.047-3.211c-0.03-2.203-0.41-3.672-1.142-4.406c-0.732-0.734-2.103-1.102-4.113-1.102h-7.05v13.547h-7.055V14.022h16.524c2.361,0.047,4.178,0.344,5.45,0.891c1.272,0.547,2.351,1.352,3.234,2.414c0.731,0.875,1.31,1.844,1.737,2.906s0.64,2.273,0.64,3.633c0,1.641-0.414,3.254-1.242,4.84s-2.195,2.707-4.102,3.363c1.594,0.641,2.723,1.551,3.387,2.73s0.996,2.98,0.996,5.402v2.32c0,1.578,0.063,2.648,0.19,3.211c0.19,0.891,0.635,1.547,1.333,1.969V48.569z M75.579,48.569h-26.18V14.022h25.336v6.117H56.454v7.336h16.781v6H56.454v8.883h19.125V48.569z M104.497,46.331c-2.44,2.086-5.887,3.129-10.34,3.129c-4.548,0-8.125-1.027-10.731-3.082s-3.909-4.879-3.909-8.473h6.891c0.224,1.578,0.662,2.758,1.316,3.539c1.196,1.422,3.246,2.133,6.15,2.133c1.739,0,3.151-0.188,4.236-0.562c2.058-0.719,3.087-2.055,3.087-4.008c0-1.141-0.504-2.023-1.512-2.648c-1.008-0.609-2.607-1.148-4.796-1.617l-3.74-0.82c-3.676-0.812-6.201-1.695-7.576-2.648c-2.328-1.594-3.492-4.086-3.492-7.477c0-3.094,1.139-5.664,3.417-7.711s5.623-3.07,10.036-3.07c3.685,0,6.829,0.965,9.431,2.895c2.602,1.93,3.966,4.73,4.093,8.402h-6.938c-0.128-2.078-1.057-3.555-2.787-4.43c-1.154-0.578-2.587-0.867-4.301-0.867c-1.907,0-3.428,0.375-4.565,1.125c-1.138,0.75-1.706,1.797-1.706,3.141c0,1.234,0.561,2.156,1.682,2.766c0.721,0.406,2.25,0.883,4.589,1.43l6.063,1.43c2.657,0.625,4.648,1.461,5.975,2.508c2.059,1.625,3.089,3.977,3.089,7.055C108.157,41.624,106.937,44.245,104.497,46.331z M139.61,48.569h-26.18V14.022h25.336v6.117h-18.281v7.336h16.781v6h-16.781v8.883h19.125V48.569z M170.337,20.14h-10.336v28.43h-7.266V20.14h-10.383v-6.117h27.984V20.14z"),s.setAttribute("class","svg-pan-zoom-control-element"),e.appendChild(s),e},_createZoomOut:function(t){var e=document.createElementNS(o.svgNS,"g");e.setAttribute("id","svg-pan-zoom-zoom-out"),e.setAttribute("transform","translate(30.5 70) scale(0.015)"),e.setAttribute("class","svg-pan-zoom-control"),e.addEventListener("click",function(){t.getPublicInstance().zoomOut()},!1),e.addEventListener("touchstart",function(){t.getPublicInstance().zoomOut()},!1);var n=document.createElementNS(o.svgNS,"rect");n.setAttribute("x","0"),n.setAttribute("y","0"),n.setAttribute("width","1500"),n.setAttribute("height","1400"),n.setAttribute("class","svg-pan-zoom-control-background"),e.appendChild(n);var i=document.createElementNS(o.svgNS,"path");return i.setAttribute("d","M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z"),i.setAttribute("class","svg-pan-zoom-control-element"),e.appendChild(i),e},disable:function(t){t.controlIcons&&(t.controlIcons.parentNode.removeChild(t.controlIcons),t.controlIcons=null)}}},{"./svg-utilities":5}],3:[function(t,e){var o=t("./svg-utilities"),n=t("./utilities"),i=function(t,e){this.init(t,e)};i.prototype.init=function(t,e){this.viewport=t,this.options=e,this.originalState={zoom:1,x:0,y:0},this.activeState={zoom:1,x:0,y:0},this.updateCTMCached=n.proxy(this.updateCTM,this),this.requestAnimationFrame=n.createRequestAnimationFrame(this.options.refreshRate),this.viewBox={x:0,y:0,width:0,height:0},this.cacheViewBox(),this.processCTM(),this.updateCTM()},i.prototype.cacheViewBox=function(){var t=this.options.svg.getAttribute("viewBox");if(t){var e=t.split(/[\s\,]/).filter(function(t){return t}).map(parseFloat);this.viewBox.x=e[0],this.viewBox.y=e[1],this.viewBox.width=e[2],this.viewBox.height=e[3];var o=Math.min(this.options.width/this.viewBox.width,this.options.height/this.viewBox.height);this.activeState.zoom=o,this.activeState.x=(this.options.width-this.viewBox.width*o)/2,this.activeState.y=(this.options.height-this.viewBox.height*o)/2,this.updateCTMOnNextFrame(),this.options.svg.removeAttribute("viewBox")}else{var n=this.viewport.getBBox();this.viewBox.x=n.x,this.viewBox.y=n.y,this.viewBox.width=n.width,this.viewBox.height=n.height}},i.prototype.recacheViewBox=function(){var t=this.viewport.getBoundingClientRect(),e=t.width/this.getZoom(),o=t.height/this.getZoom();this.viewBox.x=0,this.viewBox.y=0,this.viewBox.width=e,this.viewBox.height=o},i.prototype.getViewBox=function(){return n.extend({},this.viewBox)},i.prototype.processCTM=function(){var t=this.getCTM();if(this.options.fit||this.options.contain){var e;e=this.options.fit?Math.min(this.options.width/this.viewBox.width,this.options.height/this.viewBox.height):Math.max(this.options.width/this.viewBox.width,this.options.height/this.viewBox.height),t.a=e,t.d=e,t.e=-this.viewBox.x*e,t.f=-this.viewBox.y*e}if(this.options.center){var o=.5*(this.options.width-(this.viewBox.width+2*this.viewBox.x)*t.a),n=.5*(this.options.height-(this.viewBox.height+2*this.viewBox.y)*t.a);t.e=o,t.f=n}this.originalState.zoom=t.a,this.originalState.x=t.e,this.originalState.y=t.f,this.setCTM(t)},i.prototype.getOriginalState=function(){return n.extend({},this.originalState)},i.prototype.getState=function(){return n.extend({},this.activeState)},i.prototype.getZoom=function(){return this.activeState.zoom},i.prototype.getRelativeZoom=function(){return this.activeState.zoom/this.originalState.zoom},i.prototype.computeRelativeZoom=function(t){return t/this.originalState.zoom},i.prototype.getPan=function(){return{x:this.activeState.x,y:this.activeState.y}},i.prototype.getCTM=function(){var t=this.options.svg.createSVGMatrix();return t.a=this.activeState.zoom,t.b=0,t.c=0,t.d=this.activeState.zoom,t.e=this.activeState.x,t.f=this.activeState.y,t},i.prototype.setCTM=function(t){var e=this.isZoomDifferent(t),o=this.isPanDifferent(t);if(e||o){if(e&&this.options.beforeZoom(this.getRelativeZoom(),this.computeRelativeZoom(t.a))===!1&&(t.a=t.d=this.activeState.zoom,e=!1),o){var i=this.options.beforePan(this.getPan(),{x:t.e,y:t.f}),s=!1,r=!1;i===!1?(t.e=this.getPan().x,t.f=this.getPan().y,s=r=!0):n.isObject(i)&&(i.x===!1?(t.e=this.getPan().x,s=!0):n.isNumber(i.x)&&(t.e=i.x),i.y===!1?(t.f=this.getPan().y,r=!0):n.isNumber(i.y)&&(t.f=i.y)),s&&r&&(o=!1)}(e||o)&&(this.updateCache(t),this.updateCTMOnNextFrame(),e&&this.options.onZoom(this.getRelativeZoom()),o&&this.options.onPan(this.getPan()))}},i.prototype.isZoomDifferent=function(t){return this.activeState.zoom!==t.a},i.prototype.isPanDifferent=function(t){return this.activeState.x!==t.e||this.activeState.y!==t.f},i.prototype.updateCache=function(t){this.activeState.zoom=t.a,this.activeState.x=t.e,this.activeState.y=t.f},i.prototype.pendingUpdate=!1,i.prototype.updateCTMOnNextFrame=function(){this.pendingUpdate||(this.pendingUpdate=!0,this.requestAnimationFrame.call(window,this.updateCTMCached))},i.prototype.updateCTM=function(){o.setCTM(this.viewport,this.getCTM(),this.defs),this.pendingUpdate=!1},e.exports=function(t,e){return new i(t,e)}},{"./svg-utilities":5,"./utilities":7}],4:[function(t,e){var o=t("./uniwheel"),n=t("./control-icons"),i=t("./utilities"),s=t("./svg-utilities"),r=t("./shadow-viewport"),a=function(t,e){this.init(t,e)},l={viewportSelector:".svg-pan-zoom_viewport",panEnabled:!0,controlIconsEnabled:!1,zoomEnabled:!0,dblClickZoomEnabled:!0,mouseWheelZoomEnabled:!0,preventMouseEventsDefault:!0,zoomScaleSensitivity:.1,minZoom:.5,maxZoom:10,fit:!0,contain:!1,center:!0,refreshRate:"auto",beforeZoom:null,onZoom:null,beforePan:null,onPan:null,customEventsHandler:null};a.prototype.init=function(t,e){var o=this;this.svg=t,this.defs=t.querySelector("defs"),s.setupSvgAttributes(this.svg),this.options=i.extend(i.extend({},l),e),this.state="none";var a=s.getBoundingClientRectNormalized(t);this.width=a.width,this.height=a.height,this.viewport=r(s.getOrCreateViewport(this.svg,this.options.viewportSelector),{svg:this.svg,width:this.width,height:this.height,fit:this.options.fit,contain:this.options.contain,center:this.options.center,refreshRate:this.options.refreshRate,beforeZoom:function(t,e){return o.viewport&&o.options.beforeZoom?o.options.beforeZoom(t,e):void 0},onZoom:function(t){return o.viewport&&o.options.onZoom?o.options.onZoom(t):void 0},beforePan:function(t,e){return o.viewport&&o.options.beforePan?o.options.beforePan(t,e):void 0},onPan:function(t){return o.viewport&&o.options.onPan?o.options.onPan(t):void 0}});var u=this.getPublicInstance();u.setBeforeZoom(this.options.beforeZoom),u.setOnZoom(this.options.onZoom),u.setBeforePan(this.options.beforePan),u.setOnPan(this.options.onPan),this.options.controlIconsEnabled&&n.enable(this),this.lastMouseWheelEventTime=Date.now(),this.setupHandlers()},a.prototype.setupHandlers=function(){var t=this,e=null;if(this.eventListeners={mousedown:function(e){return t.handleMouseDown(e,null)},touchstart:function(o){var n=t.handleMouseDown(o,e);return e=o,n},mouseup:function(e){return t.handleMouseUp(e)},touchend:function(e){return t.handleMouseUp(e)},mousemove:function(e){return t.handleMouseMove(e)},touchmove:function(e){return t.handleMouseMove(e)},mouseleave:function(e){return t.handleMouseUp(e)},touchleave:function(e){return t.handleMouseUp(e)},touchcancel:function(e){return t.handleMouseUp(e)}},null!=this.options.customEventsHandler){this.options.customEventsHandler.init({svgElement:this.svg,instance:this.getPublicInstance()});var o=this.options.customEventsHandler.haltEventListeners;if(o&&o.length)for(var n=o.length-1;n>=0;n--)this.eventListeners.hasOwnProperty(o[n])&&delete this.eventListeners[o[n]]}for(var i in this.eventListeners)this.svg.addEventListener(i,this.eventListeners[i],!1);this.options.mouseWheelZoomEnabled&&(this.options.mouseWheelZoomEnabled=!1,this.enableMouseWheelZoom())},a.prototype.enableMouseWheelZoom=function(){if(!this.options.mouseWheelZoomEnabled){var t=this;this.wheelListener=function(e){return t.handleMouseWheel(e)},o.on(this.svg,this.wheelListener,!1),this.options.mouseWheelZoomEnabled=!0}},a.prototype.disableMouseWheelZoom=function(){this.options.mouseWheelZoomEnabled&&(o.off(this.svg,this.wheelListener,!1),this.options.mouseWheelZoomEnabled=!1)},a.prototype.handleMouseWheel=function(t){if(this.options.zoomEnabled&&"none"===this.state){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1);var e=t.deltaY||1,o=Date.now()-this.lastMouseWheelEventTime,n=3+Math.max(0,30-o);this.lastMouseWheelEventTime=Date.now(),"deltaMode"in t&&0===t.deltaMode&&t.wheelDelta&&(e=0===t.deltaY?0:Math.abs(t.wheelDelta)/t.deltaY),e=e>-.3&&.3>e?e:(e>0?1:-1)*Math.log(Math.abs(e)+10)/n;var i=this.svg.getScreenCTM().inverse(),r=s.getEventPoint(t,this.svg).matrixTransform(i),a=Math.pow(1+this.options.zoomScaleSensitivity,-1*e);this.zoomAtPoint(a,r)}},a.prototype.zoomAtPoint=function(t,e,o){var n=this.viewport.getOriginalState();o?(t=Math.max(this.options.minZoom*n.zoom,Math.min(this.options.maxZoom*n.zoom,t)),t/=this.getZoom()):this.getZoom()*t<this.options.minZoom*n.zoom?t=this.options.minZoom*n.zoom/this.getZoom():this.getZoom()*t>this.options.maxZoom*n.zoom&&(t=this.options.maxZoom*n.zoom/this.getZoom());var i=this.viewport.getCTM(),s=e.matrixTransform(i.inverse()),r=this.svg.createSVGMatrix().translate(s.x,s.y).scale(t).translate(-s.x,-s.y),a=i.multiply(r);a.a!==i.a&&this.viewport.setCTM(a)},a.prototype.zoom=function(t,e){this.zoomAtPoint(t,s.getSvgCenterPoint(this.svg,this.width,this.height),e)},a.prototype.publicZoom=function(t,e){e&&(t=this.computeFromRelativeZoom(t)),this.zoom(t,e)},a.prototype.publicZoomAtPoint=function(t,e,o){if(o&&(t=this.computeFromRelativeZoom(t)),!("SVGPoint"!==i.getType(e)&&"x"in e&&"y"in e))throw new Error("Given point is invalid");e=s.createSVGPoint(this.svg,e.x,e.y),this.zoomAtPoint(t,e,o)},a.prototype.getZoom=function(){return this.viewport.getZoom()},a.prototype.getRelativeZoom=function(){return this.viewport.getRelativeZoom()},a.prototype.computeFromRelativeZoom=function(t){return t*this.viewport.getOriginalState().zoom},a.prototype.resetZoom=function(){var t=this.viewport.getOriginalState();this.zoom(t.zoom,!0)},a.prototype.resetPan=function(){this.pan(this.viewport.getOriginalState())},a.prototype.reset=function(){this.resetZoom(),this.resetPan()},a.prototype.handleDblClick=function(t){if(this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),this.options.controlIconsEnabled){var e=t.target.getAttribute("class")||"";if(e.indexOf("svg-pan-zoom-control")>-1)return!1}var o;o=t.shiftKey?1/(2*(1+this.options.zoomScaleSensitivity)):2*(1+this.options.zoomScaleSensitivity);var n=s.getEventPoint(t,this.svg).matrixTransform(this.svg.getScreenCTM().inverse());this.zoomAtPoint(o,n)},a.prototype.handleMouseDown=function(t,e){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),i.mouseAndTouchNormalize(t,this.svg),this.options.dblClickZoomEnabled&&i.isDblClick(t,e)?this.handleDblClick(t):(this.state="pan",this.firstEventCTM=this.viewport.getCTM(),this.stateOrigin=s.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()))},a.prototype.handleMouseMove=function(t){if(this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),"pan"===this.state&&this.options.panEnabled){var e=s.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()),o=this.firstEventCTM.translate(e.x-this.stateOrigin.x,e.y-this.stateOrigin.y);this.viewport.setCTM(o)}},a.prototype.handleMouseUp=function(t){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),"pan"===this.state&&(this.state="none")},a.prototype.fit=function(){var t=this.viewport.getViewBox(),e=Math.min(this.width/t.width,this.height/t.height);this.zoom(e,!0)},a.prototype.contain=function(){var t=this.viewport.getViewBox(),e=Math.max(this.width/t.width,this.height/t.height);this.zoom(e,!0)},a.prototype.center=function(){var t=this.viewport.getViewBox(),e=.5*(this.width-(t.width+2*t.x)*this.getZoom()),o=.5*(this.height-(t.height+2*t.y)*this.getZoom());this.getPublicInstance().pan({x:e,y:o})},a.prototype.updateBBox=function(){this.viewport.recacheViewBox()},a.prototype.pan=function(t){var e=this.viewport.getCTM();e.e=t.x,e.f=t.y,this.viewport.setCTM(e)},a.prototype.panBy=function(t){var e=this.viewport.getCTM();e.e+=t.x,e.f+=t.y,this.viewport.setCTM(e)},a.prototype.getPan=function(){var t=this.viewport.getState();return{x:t.x,y:t.y}},a.prototype.resize=function(){var t=s.getBoundingClientRectNormalized(this.svg);this.width=t.width,this.height=t.height,this.options.controlIconsEnabled&&(this.getPublicInstance().disableControlIcons(),this.getPublicInstance().enableControlIcons())},a.prototype.destroy=function(){var t=this;this.beforeZoom=null,this.onZoom=null,this.beforePan=null,this.onPan=null,null!=this.options.customEventsHandler&&this.options.customEventsHandler.destroy({svgElement:this.svg,instance:this.getPublicInstance()});for(var e in this.eventListeners)this.svg.removeEventListener(e,this.eventListeners[e],!1);this.disableMouseWheelZoom(),this.getPublicInstance().disableControlIcons(),this.reset(),u=u.filter(function(e){return e.svg!==t.svg}),delete this.options,delete this.publicInstance,delete this.pi,this.getPublicInstance=function(){return null}},a.prototype.getPublicInstance=function(){var t=this;return this.publicInstance||(this.publicInstance=this.pi={enablePan:function(){return t.options.panEnabled=!0,t.pi},disablePan:function(){return t.options.panEnabled=!1,t.pi},isPanEnabled:function(){return!!t.options.panEnabled},pan:function(e){return t.pan(e),t.pi},panBy:function(e){return t.panBy(e),t.pi},getPan:function(){return t.getPan()},setBeforePan:function(e){return t.options.beforePan=null===e?null:i.proxy(e,t.publicInstance),t.pi},setOnPan:function(e){return t.options.onPan=null===e?null:i.proxy(e,t.publicInstance),t.pi},enableZoom:function(){return t.options.zoomEnabled=!0,t.pi},disableZoom:function(){return t.options.zoomEnabled=!1,t.pi},isZoomEnabled:function(){return!!t.options.zoomEnabled},enableControlIcons:function(){return t.options.controlIconsEnabled||(t.options.controlIconsEnabled=!0,n.enable(t)),t.pi},disableControlIcons:function(){return t.options.controlIconsEnabled&&(t.options.controlIconsEnabled=!1,n.disable(t)),t.pi},isControlIconsEnabled:function(){return!!t.options.controlIconsEnabled},enableDblClickZoom:function(){return t.options.dblClickZoomEnabled=!0,t.pi},disableDblClickZoom:function(){return t.options.dblClickZoomEnabled=!1,t.pi},isDblClickZoomEnabled:function(){return!!t.options.dblClickZoomEnabled},enableMouseWheelZoom:function(){return t.enableMouseWheelZoom(),t.pi},disableMouseWheelZoom:function(){return t.disableMouseWheelZoom(),t.pi},isMouseWheelZoomEnabled:function(){return!!t.options.mouseWheelZoomEnabled},setZoomScaleSensitivity:function(e){return t.options.zoomScaleSensitivity=e,t.pi},setMinZoom:function(e){return t.options.minZoom=e,t.pi},setMaxZoom:function(e){return t.options.maxZoom=e,t.pi},setBeforeZoom:function(e){return t.options.beforeZoom=null===e?null:i.proxy(e,t.publicInstance),t.pi},setOnZoom:function(e){return t.options.onZoom=null===e?null:i.proxy(e,t.publicInstance),t.pi},zoom:function(e){return t.publicZoom(e,!0),t.pi},zoomBy:function(e){return t.publicZoom(e,!1),t.pi},zoomAtPoint:function(e,o){return t.publicZoomAtPoint(e,o,!0),t.pi},zoomAtPointBy:function(e,o){return t.publicZoomAtPoint(e,o,!1),t.pi},zoomIn:function(){return this.zoomBy(1+t.options.zoomScaleSensitivity),t.pi},zoomOut:function(){return this.zoomBy(1/(1+t.options.zoomScaleSensitivity)),t.pi},getZoom:function(){return t.getRelativeZoom()},resetZoom:function(){return t.resetZoom(),t.pi},resetPan:function(){return t.resetPan(),t.pi},reset:function(){return t.reset(),t.pi},fit:function(){return t.fit(),t.pi},contain:function(){return t.contain(),t.pi},center:function(){return t.center(),t.pi},updateBBox:function(){return t.updateBBox(),t.pi},resize:function(){return t.resize(),t.pi},getSizes:function(){return{width:t.width,height:t.height,realZoom:t.getZoom(),viewBox:t.viewport.getViewBox()}},destroy:function(){return t.destroy(),t.pi}}),this.publicInstance};var u=[],h=function(t,e){var o=i.getSvg(t);if(null===o)return null;for(var n=u.length-1;n>=0;n--)if(u[n].svg===o)return u[n].instance.getPublicInstance();return u.push({svg:o,instance:new a(o,e)}),u[u.length-1].instance.getPublicInstance()};e.exports=h},{"./control-icons":2,"./shadow-viewport":3,"./svg-utilities":5,"./uniwheel":6,"./utilities":7}],5:[function(t,e){var o=t("./utilities"),n="unknown";document.documentMode&&(n="ie"),e.exports={svgNS:"http://www.w3.org/2000/svg",xmlNS:"http://www.w3.org/XML/1998/namespace",xmlnsNS:"http://www.w3.org/2000/xmlns/",xlinkNS:"http://www.w3.org/1999/xlink",evNS:"http://www.w3.org/2001/xml-events",getBoundingClientRectNormalized:function(t){if(t.clientWidth&&t.clientHeight)return{width:t.clientWidth,height:t.clientHeight};if(t.getBoundingClientRect())return t.getBoundingClientRect();throw new Error("Cannot get BoundingClientRect for SVG.")},getOrCreateViewport:function(t,e){var n=null;if(n=o.isElement(e)?e:t.querySelector(e),!n){var i=Array.prototype.slice.call(t.childNodes||t.children).filter(function(t){return"defs"!==t.nodeName&&"#text"!==t.nodeName});1===i.length&&"g"===i[0].nodeName&&null===i[0].getAttribute("transform")&&(n=i[0])}if(!n){var s="viewport-"+(new Date).toISOString().replace(/\D/g,"");n=document.createElementNS(this.svgNS,"g"),n.setAttribute("id",s);var r=t.childNodes||t.children;if(r&&r.length>0)for(var a=r.length;a>0;a--)"defs"!==r[r.length-a].nodeName&&n.appendChild(r[r.length-a]);t.appendChild(n)}var l=[];return n.getAttribute("class")&&(l=n.getAttribute("class").split(" ")),~l.indexOf("svg-pan-zoom_viewport")||(l.push("svg-pan-zoom_viewport"),n.setAttribute("class",l.join(" "))),n},setupSvgAttributes:function(t){if(t.setAttribute("xmlns",this.svgNS),t.setAttributeNS(this.xmlnsNS,"xmlns:xlink",this.xlinkNS),t.setAttributeNS(this.xmlnsNS,"xmlns:ev",this.evNS),null!==t.parentNode){var e=t.getAttribute("style")||"";-1===e.toLowerCase().indexOf("overflow")&&t.setAttribute("style","overflow: hidden; "+e)}},internetExplorerRedisplayInterval:300,refreshDefsGlobal:o.throttle(function(){for(var t=document.querySelectorAll("defs"),e=t.length,o=0;e>o;o++){var n=t[o];n.parentNode.insertBefore(n,n)}},this.internetExplorerRedisplayInterval),setCTM:function(t,e,o){var i=this,s="matrix("+e.a+","+e.b+","+e.c+","+e.d+","+e.e+","+e.f+")";t.setAttributeNS(null,"transform",s),"ie"===n&&o&&(o.parentNode.insertBefore(o,o),window.setTimeout(function(){i.refreshDefsGlobal()},i.internetExplorerRedisplayInterval))},getEventPoint:function(t,e){var n=e.createSVGPoint();return o.mouseAndTouchNormalize(t,e),n.x=t.clientX,n.y=t.clientY,n},getSvgCenterPoint:function(t,e,o){return this.createSVGPoint(t,e/2,o/2)},createSVGPoint:function(t,e,o){var n=t.createSVGPoint();return n.x=e,n.y=o,n}}},{"./utilities":7}],6:[function(t,e){e.exports=function(){function t(t,e,o){var n=function(t){!t&&(t=window.event);var o={originalEvent:t,target:t.target||t.srcElement,type:"wheel",deltaMode:"MozMousePixelScroll"==t.type?0:1,deltaX:0,delatZ:0,preventDefault:function(){t.preventDefault?t.preventDefault():t.returnValue=!1}};return"mousewheel"==u?(o.deltaY=-1/40*t.wheelDelta,t.wheelDeltaX&&(o.deltaX=-1/40*t.wheelDeltaX)):o.deltaY=t.detail,e(o)};return c.push({element:t,fn:n,capture:o}),n}function e(t,e){for(var o=0;o<c.length;o++)if(c[o].element===t&&c[o].capture===e)return c[o].fn;return function(){}}function o(t,e){for(var o=0;o<c.length;o++)if(c[o].element===t&&c[o].capture===e)return c.splice(o,1)}function n(e,o,n,i){var s;s="wheel"===u?n:t(e,n,i),e[a](h+o,s,i||!1)}function i(t,n,i,s){cb="wheel"===u?i:e(t,s),t[l](h+n,cb,s||!1),o(t,s)}function s(t,e,o){n(t,u,e,o),"DOMMouseScroll"==u&&n(t,"MozMousePixelScroll",e,o)}function r(t,e,o){i(t,u,e,o),"DOMMouseScroll"==u&&i(t,"MozMousePixelScroll",e,o)}var a,l,u,h="",c=[];return window.addEventListener?(a="addEventListener",l="removeEventListener"):(a="attachEvent",l="detachEvent",h="on"),u="onwheel"in document.createElement("div")?"wheel":void 0!==document.onmousewheel?"mousewheel":"DOMMouseScroll",{on:s,off:r}}()},{}],7:[function(t,e){function o(t){return function(e){window.setTimeout(e,t)}}e.exports={extend:function(t,e){t=t||{};for(var o in e)t[o]=this.isObject(e[o])?this.extend(t[o],e[o]):e[o];return t},isElement:function(t){return t instanceof HTMLElement||t instanceof SVGElement||t instanceof SVGSVGElement||t&&"object"==typeof t&&null!==t&&1===t.nodeType&&"string"==typeof t.nodeName},isObject:function(t){return"[object Object]"===Object.prototype.toString.call(t)},isNumber:function(t){return!isNaN(parseFloat(t))&&isFinite(t)},getSvg:function(t){var e,o;if(this.isElement(t))e=t;else{if(!("string"==typeof t||t instanceof String))throw new Error("Provided selector is not an HTML object nor String");if(e=document.querySelector(t),!e)throw new Error("Provided selector did not find any elements. Selector: "+t)}if("svg"===e.tagName.toLowerCase())o=e;else if("object"===e.tagName.toLowerCase())o=e.contentDocument.documentElement;else{if("embed"!==e.tagName.toLowerCase())throw new Error("img"===e.tagName.toLowerCase()?'Cannot script an SVG in an "img" element. Please use an "object" element or an in-line SVG.':"Cannot get SVG.");o=e.getSVGDocument().documentElement}return o},proxy:function(t,e){return function(){return t.apply(e,arguments)}},getType:function(t){return Object.prototype.toString.apply(t).replace(/^\[object\s/,"").replace(/\]$/,"")},mouseAndTouchNormalize:function(t,e){if(void 0===t.clientX||null===t.clientX)if(t.clientX=0,t.clientY=0,void 0!==t.changedTouches&&t.changedTouches.length){if(void 0!==t.changedTouches[0].clientX)t.clientX=t.changedTouches[0].clientX,t.clientY=t.changedTouches[0].clientY;else if(void 0!==t.changedTouches[0].pageX){var o=e.getBoundingClientRect();t.clientX=t.changedTouches[0].pageX-o.left,t.clientY=t.changedTouches[0].pageY-o.top}}else void 0!==t.originalEvent&&void 0!==t.originalEvent.clientX&&(t.clientX=t.originalEvent.clientX,t.clientY=t.originalEvent.clientY)},isDblClick:function(t,e){if(2===t.detail)return!0;if(void 0!==e&&null!==e){var o=t.timeStamp-e.timeStamp,n=Math.sqrt(Math.pow(t.clientX-e.clientX,2)+Math.pow(t.clientY-e.clientY,2));return 250>o&&10>n}return!1},now:Date.now||function(){return(new Date).getTime()},throttle:function(t,e,o){var n,i,s,r=this,a=null,l=0;o||(o={});var u=function(){l=o.leading===!1?0:r.now(),a=null,s=t.apply(n,i),a||(n=i=null)};return function(){var h=r.now();l||o.leading!==!1||(l=h);var c=e-(h-l);return n=this,i=arguments,0>=c||c>e?(clearTimeout(a),a=null,l=h,s=t.apply(n,i),a||(n=i=null)):a||o.trailing===!1||(a=setTimeout(u,c)),s}},createRequestAnimationFrame:function(t){var e=null;return"auto"!==t&&60>t&&t>1&&(e=Math.floor(1e3/t)),null===e?window.requestAnimationFrame||o(33):o(e)}}},{}]},{},[1]); \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/lists/files.html b/Documentation/html/Documentation/Api/Fortran/lists/files.html new file mode 100644 index 0000000000000000000000000000000000000000..4370eef314145b77c4443099e0e18f83e419fb82 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/lists/files.html @@ -0,0 +1,307 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title> +All Files – Flex_extract: Calculation of etadot +</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + <div class="row" id='text'> + <div class="col-lg-12"> + <h1>Source Files</h1> + <table class="table table-striped"> + <thead><tr><th>File</th><th>Description</th></tr></thead> + <tbody> + + <tr><td><a href='../sourcefile/calc_etadot.f90.html'>calc_etadot.f90</a></td><td></td></tr> + + <tr><td><a href='../sourcefile/ftrafo.f90.html'>ftrafo.f90</a></td><td></td></tr> + + <tr><td><a href='../sourcefile/grphreal.f90.html'>grphreal.f90</a></td><td></td></tr> + + <tr><td><a href='../sourcefile/phgrreal.f90.html'>phgrreal.f90</a></td><td></td></tr> + + <tr><td><a href='../sourcefile/posnam.f90.html'>posnam.f90</a></td><td></td></tr> + + <tr><td><a href='../sourcefile/rwgrib2.f90.html'>rwgrib2.f90</a></td><td></td></tr> + + </tbody></table> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: file~~graph~~FileGraph Pages: 1 --> +<svg id="filegraphFileGraph" width="305pt" height="154pt" + viewBox="0.00 0.00 305.00 154.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="file~~graph~~FileGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 150)"> +<title>file~~graph~~FileGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-150 301,-150 301,4 -4,4"/> +<!-- sourcefile~grphreal.f90 --> +<g id="file~~graph~~FileGraph_node1" class="node"><title>sourcefile~grphreal.f90</title> +<g id="a_file~~graph~~FileGraph_node1"><a xlink:href=".././sourcefile/grphreal.f90.html" xlink:title="grphreal.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="191,-104 121,-104 121,-80 191,-80 191,-104"/> +<text text-anchor="middle" x="156" y="-89.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grphreal.f90</text> +</a> +</g> +</g> +<!-- sourcefile~calc_etadot.f90 --> +<g id="file~~graph~~FileGraph_node2" class="node"><title>sourcefile~calc_etadot.f90</title> +<g id="a_file~~graph~~FileGraph_node2"><a xlink:href=".././sourcefile/calc_etadot.f90.html" xlink:title="calc_etadot.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="85,-84 0,-84 0,-60 85,-60 85,-84"/> +<text text-anchor="middle" x="42.5" y="-69.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot.f90</text> +</a> +</g> +</g> +<!-- sourcefile~grphreal.f90->sourcefile~calc_etadot.f90 --> +<g id="file~~graph~~FileGraph_edge4" class="edge"><title>sourcefile~grphreal.f90->sourcefile~calc_etadot.f90</title> +<path fill="none" stroke="#000000" d="M120.94,-85.8907C112.839,-84.4375 104.014,-82.8544 95.3164,-81.2944"/> +<polygon fill="#000000" stroke="#000000" points="95.6776,-77.8034 85.2167,-79.4828 94.4416,-84.6935 95.6776,-77.8034"/> +</g> +<!-- sourcefile~rwgrib2.f90 --> +<g id="file~~graph~~FileGraph_node3" class="node"><title>sourcefile~rwgrib2.f90</title> +<g id="a_file~~graph~~FileGraph_node3"><a xlink:href=".././sourcefile/rwgrib2.f90.html" xlink:title="rwgrib2.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="189,-146 123,-146 123,-122 189,-122 189,-146"/> +<text text-anchor="middle" x="156" y="-131.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">rwgrib2.f90</text> +</a> +</g> +</g> +<!-- sourcefile~rwgrib2.f90->sourcefile~calc_etadot.f90 --> +<g id="file~~graph~~FileGraph_edge2" class="edge"><title>sourcefile~rwgrib2.f90->sourcefile~calc_etadot.f90</title> +<path fill="none" stroke="#000000" d="M133.237,-121.899C116.353,-112.51 92.7443,-99.3825 73.9799,-88.9485"/> +<polygon fill="#000000" stroke="#000000" points="75.6488,-85.8718 65.2081,-84.0709 72.2469,-91.9896 75.6488,-85.8718"/> +</g> +<!-- sourcefile~posnam.f90 --> +<g id="file~~graph~~FileGraph_node4" class="node"><title>sourcefile~posnam.f90</title> +<g id="a_file~~graph~~FileGraph_node4"><a xlink:href=".././sourcefile/posnam.f90.html" xlink:title="posnam.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="296.5,-106 227.5,-106 227.5,-82 296.5,-82 296.5,-106"/> +<text text-anchor="middle" x="262" y="-91.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">posnam.f90</text> +</a> +</g> +</g> +<!-- sourcefile~phgrreal.f90 --> +<g id="file~~graph~~FileGraph_node5" class="node"><title>sourcefile~phgrreal.f90</title> +<g id="a_file~~graph~~FileGraph_node5"><a xlink:href=".././sourcefile/phgrreal.f90.html" xlink:title="phgrreal.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="297,-64 227,-64 227,-40 297,-40 297,-64"/> +<text text-anchor="middle" x="262" y="-49.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">phgrreal.f90</text> +</a> +</g> +</g> +<!-- sourcefile~phgrreal.f90->sourcefile~grphreal.f90 --> +<g id="file~~graph~~FileGraph_edge1" class="edge"><title>sourcefile~phgrreal.f90->sourcefile~grphreal.f90</title> +<path fill="none" stroke="#000000" d="M229.797,-64.0013C219.81,-67.8422 208.599,-72.1543 198.022,-76.2222"/> +<polygon fill="#000000" stroke="#000000" points="196.618,-73.0123 188.541,-79.8689 199.131,-79.5458 196.618,-73.0123"/> +</g> +<!-- sourcefile~phgrreal.f90->sourcefile~calc_etadot.f90 --> +<g id="file~~graph~~FileGraph_edge5" class="edge"><title>sourcefile~phgrreal.f90->sourcefile~calc_etadot.f90</title> +<path fill="none" stroke="#000000" d="M226.536,-55.1691C191.2,-58.4184 135.82,-63.5108 95.2244,-67.2437"/> +<polygon fill="#000000" stroke="#000000" points="94.8806,-63.7605 85.2431,-68.1616 95.5216,-70.7311 94.8806,-63.7605"/> +</g> +<!-- sourcefile~ftrafo.f90 --> +<g id="file~~graph~~FileGraph_node6" class="node"><title>sourcefile~ftrafo.f90</title> +<g id="a_file~~graph~~FileGraph_node6"><a xlink:href=".././sourcefile/ftrafo.f90.html" xlink:title="ftrafo.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="183.5,-24 128.5,-24 128.5,-0 183.5,-0 183.5,-24"/> +<text text-anchor="middle" x="156" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">ftrafo.f90</text> +</a> +</g> +</g> +<!-- sourcefile~phgrreal.f90->sourcefile~ftrafo.f90 --> +<g id="file~~graph~~FileGraph_edge6" class="edge"><title>sourcefile~phgrreal.f90->sourcefile~ftrafo.f90</title> +<path fill="none" stroke="#000000" d="M229.797,-39.9987C218.298,-35.576 205.174,-30.5286 193.266,-25.9486"/> +<polygon fill="#000000" stroke="#000000" points="194.202,-22.5584 183.612,-22.2353 191.689,-29.0918 194.202,-22.5584"/> +</g> +<!-- sourcefile~ftrafo.f90->sourcefile~calc_etadot.f90 --> +<g id="file~~graph~~FileGraph_edge3" class="edge"><title>sourcefile~ftrafo.f90->sourcefile~calc_etadot.f90</title> +<path fill="none" stroke="#000000" d="M132.436,-24.1419C115.887,-33.0471 93.2048,-45.253 74.8889,-55.1091"/> +<polygon fill="#000000" stroke="#000000" points="73.1776,-52.0554 66.0301,-59.8762 76.4947,-58.2196 73.1776,-52.0554"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="190pt" height="32pt" + viewBox="0.00 0.00 190.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 186,-28 186,4 -4,4"/> +<!-- Source File --> +<g id="node1" class="node"><title>Source File</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Source File</text> +</g> +<!-- This Page's Entity --> +<g id="node2" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="182,-24 85,-24 85,-0 182,-0 182,-24"/> +<text text-anchor="middle" x="133.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a file to a file which it depends on. A file + is dependent upon another if the latter must be compiled before the former + can be. + </p> + </div></div></div></div> + </div> + </div> + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/lists/modules.html b/Documentation/html/Documentation/Api/Fortran/lists/modules.html new file mode 100644 index 0000000000000000000000000000000000000000..fc2de68eade645128203e368c35cb187014e6745 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/lists/modules.html @@ -0,0 +1,421 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title> +All Modules – Flex_extract: Calculation of etadot +</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <div class="col-lg-12" id='text'> + <h1>Modules</h1> + <table class="table"> + <thead><tr><th>Module</th><th>Source File</th><th>Description</th></tr></thead> + <tbody> + + + <tr class="active"><td><a href='../module/ftrafo.html'>FTRAFO</a></td><td><a href='../sourcefile/ftrafo.f90.html'>ftrafo.f90</a></td><td><p>Implementation of the spectral transformation using reduced the Gaussian grid</p></td></tr> + + <!--active--> + + <tr class=""><td><a href='../module/grtoph.html'>GRTOPH</a></td><td><a href='../sourcefile/grphreal.f90.html'>grphreal.f90</a></td><td></td></tr> + + <!----> + + <tr class="active"><td><a href='../module/phtogr.html'>PHTOGR</a></td><td><a href='../sourcefile/phgrreal.f90.html'>phgrreal.f90</a></td><td></td></tr> + + <!--active--> + + <tr class=""><td><a href='../module/rwgrib2.html'>RWGRIB2</a></td><td><a href='../sourcefile/rwgrib2.f90.html'>rwgrib2.f90</a></td><td></td></tr> + + <!----> + + </tbody></table> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: module~~graph~~ModuleGraph Pages: 1 --> +<svg id="modulegraphModuleGraph" width="305pt" height="364pt" + viewBox="0.00 0.00 305.00 364.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="module~~graph~~ModuleGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 360)"> +<title>module~~graph~~ModuleGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-360 301,-360 301,4 -4,4"/> +<!-- module~rwgrib2 --> +<g id="module~~graph~~ModuleGraph_node1" class="node"><title>module~rwgrib2</title> +<g id="a_module~~graph~~ModuleGraph_node1"><a xlink:href=".././module/rwgrib2.html" xlink:title="RWGRIB2"> +<polygon fill="#337ab7" stroke="#337ab7" points="160,-356 99,-356 99,-332 160,-332 160,-356"/> +<text text-anchor="middle" x="129.5" y="-341.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">RWGRIB2</text> +</a> +</g> +</g> +<!-- module~ftrafo --> +<g id="module~~graph~~ModuleGraph_node2" class="node"><title>module~ftrafo</title> +<g id="a_module~~graph~~ModuleGraph_node2"><a xlink:href=".././module/ftrafo.html" xlink:title="FTRAFO"> +<polygon fill="#337ab7" stroke="#337ab7" points="157,-314 102,-314 102,-290 157,-290 157,-314"/> +<text text-anchor="middle" x="129.5" y="-299.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">FTRAFO</text> +</a> +</g> +</g> +<!-- module~grtoph --> +<g id="module~~graph~~ModuleGraph_node3" class="node"><title>module~grtoph</title> +<g id="a_module~~graph~~ModuleGraph_node3"><a xlink:href=".././module/grtoph.html" xlink:title="GRTOPH"> +<polygon fill="#337ab7" stroke="#337ab7" points="158.5,-272 100.5,-272 100.5,-248 158.5,-248 158.5,-272"/> +<text text-anchor="middle" x="129.5" y="-257.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GRTOPH</text> +</a> +</g> +</g> +<!-- module~phtogr --> +<g id="module~~graph~~ModuleGraph_node4" class="node"><title>module~phtogr</title> +<g id="a_module~~graph~~ModuleGraph_node4"><a xlink:href=".././module/phtogr.html" xlink:title="PHTOGR"> +<polygon fill="#337ab7" stroke="#337ab7" points="58,-129 0,-129 0,-105 58,-105 58,-129"/> +<text text-anchor="middle" x="29" y="-114.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHTOGR</text> +</a> +</g> +</g> +<!-- module~grtoph->module~phtogr --> +<g id="module~~graph~~ModuleGraph_edge1" class="edge"><title>module~grtoph->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M109.362,-247.823C103.988,-243.836 98.414,-239.107 94,-234 68.5839,-204.595 48.9806,-163.444 38.4957,-138.596"/> +<polygon fill="#000000" stroke="#000000" points="41.726,-137.248 34.6898,-129.327 35.2506,-139.907 41.726,-137.248"/> +</g> +<!-- program~calc_etadot --> +<g id="module~~graph~~ModuleGraph_node5" class="node"><title>program~calc_etadot</title> +<g id="a_module~~graph~~ModuleGraph_node5"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="282.5,-274 215.5,-274 215.5,-250 282.5,-250 282.5,-274"/> +<text text-anchor="middle" x="249" y="-259.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->module~rwgrib2 --> +<g id="module~~graph~~ModuleGraph_edge3" class="edge"><title>program~calc_etadot->module~rwgrib2</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M232.381,-274.111C215.912,-286.731 189.068,-306.875 165,-323 163.34,-324.112 161.622,-325.237 159.879,-326.358"/> +<polygon fill="#000000" stroke="#000000" points="157.73,-323.575 151.117,-331.853 161.449,-329.505 157.73,-323.575"/> +</g> +<!-- program~calc_etadot->module~ftrafo --> +<g id="module~~graph~~ModuleGraph_edge5" class="edge"><title>program~calc_etadot->module~ftrafo</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M215.27,-273.142C200.23,-278.262 182.339,-284.353 166.878,-289.616"/> +<polygon fill="#000000" stroke="#000000" points="165.462,-286.401 157.124,-292.937 167.718,-293.027 165.462,-286.401"/> +</g> +<!-- program~calc_etadot->module~grtoph --> +<g id="module~~graph~~ModuleGraph_edge4" class="edge"><title>program~calc_etadot->module~grtoph</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M215.27,-261.443C200.814,-261.197 183.726,-260.906 168.692,-260.65"/> +<polygon fill="#000000" stroke="#000000" points="168.728,-257.15 158.67,-260.479 168.609,-264.149 168.728,-257.15"/> +</g> +<!-- program~calc_etadot->module~phtogr --> +<g id="module~~graph~~ModuleGraph_edge6" class="edge"><title>program~calc_etadot->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M215.363,-254.585C182.299,-245.88 130.902,-228.962 94,-201 71.3738,-183.855 52.7047,-156.72 41.4834,-137.952"/> +<polygon fill="#000000" stroke="#000000" points="44.4849,-136.151 36.4504,-129.244 38.4244,-139.654 44.4849,-136.151"/> +</g> +<!-- GRIB_API --> +<g id="module~~graph~~ModuleGraph_node13" class="node"><title>GRIB_API</title> +<polygon fill="#337ab7" stroke="#337ab7" points="160,-192 99,-192 99,-168 160,-168 160,-192"/> +<text text-anchor="middle" x="129.5" y="-177.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GRIB_API</text> +</g> +<!-- program~calc_etadot->GRIB_API --> +<g id="module~~graph~~ModuleGraph_edge2" class="edge"><title>program~calc_etadot->GRIB_API</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M216.829,-249.937C211.371,-247.309 205.882,-244.31 201,-241 182.529,-228.478 181.944,-220.522 165,-206 161.948,-203.384 158.662,-200.724 155.373,-198.153"/> +<polygon fill="#000000" stroke="#000000" points="157.401,-195.298 147.326,-192.021 153.158,-200.866 157.401,-195.298"/> +</g> +<!-- proc~readlatlon --> +<g id="module~~graph~~ModuleGraph_node6" class="node"><title>proc~readlatlon</title> +<g id="a_module~~graph~~ModuleGraph_node6"><a xlink:href=".././proc/readlatlon.html" xlink:title="READLATLON"> +<polygon fill="#d9534f" stroke="#d9534f" points="290,-232 208,-232 208,-208 290,-208 290,-232"/> +<text text-anchor="middle" x="249" y="-217.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">READLATLON</text> +</a> +</g> +</g> +<!-- proc~readlatlon->GRIB_API --> +<g id="module~~graph~~ModuleGraph_edge7" class="edge"><title>proc~readlatlon->GRIB_API</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M212.746,-207.999C199.256,-203.406 183.787,-198.14 169.931,-193.423"/> +<polygon fill="#000000" stroke="#000000" points="170.773,-190.013 160.179,-190.103 168.517,-196.639 170.773,-190.013"/> +</g> +<!-- proc~phgracut --> +<g id="module~~graph~~ModuleGraph_node7" class="node"><title>proc~phgracut</title> +<g id="a_module~~graph~~ModuleGraph_node7"><a xlink:href=".././proc/phgracut.html" xlink:title="PHGRACUT"> +<polygon fill="#d9534f" stroke="#d9534f" points="165,-150 94,-150 94,-126 165,-126 165,-150"/> +<text text-anchor="middle" x="129.5" y="-135.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGRACUT</text> +</a> +</g> +</g> +<!-- proc~phgracut->module~phtogr --> +<g id="module~~graph~~ModuleGraph_edge8" class="edge"><title>proc~phgracut->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M93.7726,-130.596C85.5033,-128.833 76.6341,-126.942 68.2181,-125.148"/> +<polygon fill="#000000" stroke="#000000" points="68.7578,-121.684 58.2478,-123.022 67.2982,-128.531 68.7578,-121.684"/> +</g> +<!-- proc~vduvsub --> +<g id="module~~graph~~ModuleGraph_node8" class="node"><title>proc~vduvsub</title> +<g id="a_module~~graph~~ModuleGraph_node8"><a xlink:href=".././proc/vduvsub.html" xlink:title="VDUVSUB"> +<polygon fill="#d9534f" stroke="#d9534f" points="160.5,-108 98.5,-108 98.5,-84 160.5,-84 160.5,-108"/> +<text text-anchor="middle" x="129.5" y="-93.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">VDUVSUB</text> +</a> +</g> +</g> +<!-- proc~vduvsub->module~phtogr --> +<g id="module~~graph~~ModuleGraph_edge9" class="edge"><title>proc~vduvsub->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M98.4115,-102.415C88.8219,-104.459 78.0839,-106.749 68.0089,-108.897"/> +<polygon fill="#000000" stroke="#000000" points="67.2724,-105.475 58.222,-110.983 68.732,-112.321 67.2724,-105.475"/> +</g> +<!-- proc~readspectral --> +<g id="module~~graph~~ModuleGraph_node9" class="node"><title>proc~readspectral</title> +<g id="a_module~~graph~~ModuleGraph_node9"><a xlink:href=".././proc/readspectral.html" xlink:title="READSPECTRAL"> +<polygon fill="#d9534f" stroke="#d9534f" points="297,-190 201,-190 201,-166 297,-166 297,-190"/> +<text text-anchor="middle" x="249" y="-175.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">READSPECTRAL</text> +</a> +</g> +</g> +<!-- proc~readspectral->GRIB_API --> +<g id="module~~graph~~ModuleGraph_edge10" class="edge"><title>proc~readspectral->GRIB_API</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M200.885,-178.802C190.758,-178.974 180.149,-179.155 170.331,-179.322"/> +<polygon fill="#000000" stroke="#000000" points="169.985,-175.827 160.046,-179.497 170.104,-182.826 169.985,-175.827"/> +</g> +<!-- proc~writelatlon --> +<g id="module~~graph~~ModuleGraph_node10" class="node"><title>proc~writelatlon</title> +<g id="a_module~~graph~~ModuleGraph_node10"><a xlink:href=".././proc/writelatlon.html" xlink:title="WRITELATLON"> +<polygon fill="#d9534f" stroke="#d9534f" points="293,-148 205,-148 205,-124 293,-124 293,-148"/> +<text text-anchor="middle" x="249" y="-133.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">WRITELATLON</text> +</a> +</g> +</g> +<!-- proc~writelatlon->GRIB_API --> +<g id="module~~graph~~ModuleGraph_edge11" class="edge"><title>proc~writelatlon->GRIB_API</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M215.893,-148.023C201.623,-153.367 184.694,-159.706 169.687,-165.326"/> +<polygon fill="#000000" stroke="#000000" points="168.288,-162.112 160.15,-168.897 170.743,-168.668 168.288,-162.112"/> +</g> +<!-- proc~vdtouv --> +<g id="module~~graph~~ModuleGraph_node11" class="node"><title>proc~vdtouv</title> +<g id="a_module~~graph~~ModuleGraph_node11"><a xlink:href=".././proc/vdtouv.html" xlink:title="VDTOUV"> +<polygon fill="#d9534f" stroke="#d9534f" points="157.5,-66 101.5,-66 101.5,-42 157.5,-42 157.5,-66"/> +<text text-anchor="middle" x="129.5" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">VDTOUV</text> +</a> +</g> +</g> +<!-- proc~vdtouv->module~phtogr --> +<g id="module~~graph~~ModuleGraph_edge12" class="edge"><title>proc~vdtouv->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M108.362,-66.1004C103.632,-68.9861 98.6229,-72.0773 94,-75 81.6793,-82.7894 68.1682,-91.6137 56.7482,-99.1563"/> +<polygon fill="#000000" stroke="#000000" points="54.5035,-96.445 48.1007,-104.886 58.37,-102.28 54.5035,-96.445"/> +</g> +<!-- proc~phgrad --> +<g id="module~~graph~~ModuleGraph_node12" class="node"><title>proc~phgrad</title> +<g id="a_module~~graph~~ModuleGraph_node12"><a xlink:href=".././proc/phgrad.html" xlink:title="PHGRAD"> +<polygon fill="#d9534f" stroke="#d9534f" points="158,-24 101,-24 101,-0 158,-0 158,-24"/> +<text text-anchor="middle" x="129.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGRAD</text> +</a> +</g> +</g> +<!-- proc~phgrad->module~phtogr --> +<g id="module~~graph~~ModuleGraph_edge13" class="edge"><title>proc~phgrad->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M105.741,-24.1789C101.638,-26.8312 97.5427,-29.8087 94,-33 73.2359,-51.7042 54.5087,-77.9153 42.7542,-96.0624"/> +<polygon fill="#000000" stroke="#000000" points="39.6566,-94.4123 37.2692,-104.735 45.5726,-98.1541 39.6566,-94.4123"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="490pt" height="32pt" + viewBox="0.00 0.00 489.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 485.5,-28 485.5,4 -4,4"/> +<!-- Module --> +<g id="node1" class="node"><title>Module</title> +<polygon fill="#337ab7" stroke="#337ab7" points="54,-24 0,-24 0,-0 54,-0 54,-24"/> +<text text-anchor="middle" x="27" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Module</text> +</g> +<!-- Submodule --> +<g id="node2" class="node"><title>Submodule</title> +<polygon fill="#5bc0de" stroke="#5bc0de" points="139.5,-24 72.5,-24 72.5,-0 139.5,-0 139.5,-24"/> +<text text-anchor="middle" x="106" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Submodule</text> +</g> +<!-- Subroutine --> +<g id="node3" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="222,-24 158,-24 158,-0 222,-0 222,-24"/> +<text text-anchor="middle" x="190" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node4" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="294,-24 240,-24 240,-0 294,-0 294,-24"/> +<text text-anchor="middle" x="267" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="366,-24 312,-24 312,-0 366,-0 366,-24"/> +<text text-anchor="middle" x="339" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="481.5,-24 384.5,-24 384.5,-0 481.5,-0 481.5,-24"/> +<text text-anchor="middle" x="433" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a submodule to the (sub)module which it is + descended from. Dashed arrows point from a module or program unit to + modules which it uses. + </p> + </div></div></div></div> + </div> + </div> + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/lists/procedures.html b/Documentation/html/Documentation/Api/Fortran/lists/procedures.html new file mode 100644 index 0000000000000000000000000000000000000000..bc4ca6cb6bbcfaaa8db594d05588571368edcb79 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/lists/procedures.html @@ -0,0 +1,759 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title> +All Procedures – Flex_extract: Calculation of etadot +</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + <div class="row"> + <div class="col-lg-12" id='text'> + <h1>Procedures</h1> + <table class="table table-striped"> + <thead><tr><th>Procedure</th><th>Location</th><th>Procedure Type</th><th>Description</th></tr></thead> + <tbody> + + <tr><td><a href='../proc/contgl.html'>CONTGL</a></td><td><a href='../module/ftrafo.html'>FTRAFO</a></td><td>Subroutine</td><td><p>Berechnung der Divergenz aus dem Windfeld (U,V) + im Phasenraum. Zurueckgegeben werden die Felder der + Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter.</p></td></tr> + + <tr><td><a href='../proc/dplgnd.html'>DPLGND</a></td><td><a href='../module/phtogr.html'>PHTOGR</a></td><td>Subroutine</td><td><p>DPLGND BERECHNET DIE ABLEITUNG DER NORMIERTEN ASSOZIIERTEN + LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) + UND SCHREIBT SIE IN DAS FELD DZ</p></td></tr> + + <tr><td><a href='../proc/gauleg.html'>GAULEG</a></td><td><a href='../module/phtogr.html'>PHTOGR</a></td><td>Subroutine</td><td><p>BERECHNET DIE GAUSS+SCHEN BREITEN</p></td></tr> + + <tr><td><a href='../proc/grph213.html'>GRPH213</a></td><td><a href='../module/grtoph.html'>GRTOPH</a></td><td>Subroutine</td><td><p>WRONG>>> DIE ROUTINE F]HRT EINE TRANSFORMATION EINER + FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN + RAUM AUF KUGELKOORDINATEN DURCH</p></td></tr> + + <tr><td><a href='../proc/grphsub.html'>GRPHSUB</a></td><td><a href='../module/grtoph.html'>GRTOPH</a></td><td>Subroutine</td><td><p>DIE ROUTINE F]HRT EINE TRANSFORMATION EINER + FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN + RAUM AUF KUGELKOORDINATEN DURCH</p></td></tr> + + <tr><td><a href='../proc/ia.html'>IA</a></td><td><a href='../sourcefile/calc_etadot.f90.html'>calc_etadot.f90</a></td><td>Function</td><td><p>Calculate something that is roughly log10( maxval(field1)/g ) [PS] </p></td></tr> + + <tr><td><a href='../proc/legtr.html'>LEGTR</a></td><td><a href='../module/phtogr.html'>PHTOGR</a></td><td>Subroutine</td><td><p>DIESE ROUTINE BERECHNET DIE FOURIERKOEFFIZIENTEN CXM</p></td></tr> + + <tr><td><a href='../proc/lgtr213.html'>LGTR213</a></td><td><a href='../module/grtoph.html'>GRTOPH</a></td><td>Subroutine</td><td><a href="../proc/lgtr213.html" class="pull-right"><emph>Read more…</emph></a></td></tr> + + <tr><td><a href='../proc/omega.html'>OMEGA</a></td><td><a href='../module/ftrafo.html'>FTRAFO</a></td><td>Subroutine</td><td><p>calculates $\omega$ in the hybrid ($\eta$-) coordinate system</p></td></tr> + + <tr><td><a href='../proc/phgcut.html'>PHGCUT</a></td><td><a href='../module/phtogr.html'>PHTOGR</a></td><td>Subroutine</td><td><p>DIE ROUTINE FUEHRT EINE TRANSFORMATION EINER + FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN + RAUM AUF KUGELKOORDINATEN DURCH. Es kann ein Teilausschnitt + Der Erde angegeben werden. Diese Routine ist langsamer als phgrph</p><a href="../proc/phgcut.html" class="pull-right"><emph>Read more…</emph></a></td></tr> + + <tr><td><a href='../proc/phgpns.html'>PHGPNS</a></td><td><a href='../module/phtogr.html'>PHTOGR</a></td><td>Subroutine</td><td></td></tr> + + <tr><td><a href='../proc/phgr213.html'>PHGR213</a></td><td><a href='../module/phtogr.html'>PHTOGR</a></td><td>Subroutine</td><td><p>DIE ROUTINE F]HRT EINE TRANSFORMATION EINER + FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN + RAUM AUF DAS REDUZIERTE GAUSS'SCHE GITTER DURCH</p></td></tr> + + <tr><td><a href='../proc/phgracut.html'>PHGRACUT</a></td><td><a href='../module/ftrafo.html'>FTRAFO</a></td><td>Subroutine</td><td><p>Berechnung des Gradienten eines Skalars aus dem Feld des + Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der + Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter.</p></td></tr> + + <tr><td><a href='../proc/phgrad.html'>PHGRAD</a></td><td><a href='../module/ftrafo.html'>FTRAFO</a></td><td>Subroutine</td><td><p>Berechnung des Gradienten eines Skalars aus dem Feld des + Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der + Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter.</p></td></tr> + + <tr><td><a href='../proc/phsym.html'>PHSYM</a></td><td><a href='../module/phtogr.html'>PHTOGR</a></td><td>Subroutine</td><td></td></tr> + + <tr><td><a href='../proc/phsymcut.html'>PHSYMCUT</a></td><td><a href='../module/phtogr.html'>PHTOGR</a></td><td>Subroutine</td><td></td></tr> + + <tr><td><a href='../proc/plgnfa.html'>PLGNFA</a></td><td><a href='../module/phtogr.html'>PHTOGR</a></td><td>Subroutine</td><td><p>PLGNDN BERECHNET ALLE NORMIERTEN ASSOZIIERTEN + LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) + UND SCHREIBT SIE IN DAS FELD Z</p></td></tr> + + <tr><td><a href='../proc/posnam.html'>POSNAM</a></td><td><a href='../sourcefile/posnam.f90.html'>posnam.f90</a></td><td>Subroutine</td><td><p>position in namelist file.</p></td></tr> + + <tr><td><a href='../proc/readlatlon.html'>READLATLON</a></td><td><a href='../module/rwgrib2.html'>RWGRIB2</a></td><td>Subroutine</td><td><p>Read a field from GRIB file on lat-lon grid</p><a href="../proc/readlatlon.html" class="pull-right"><emph>Read more…</emph></a></td></tr> + + <tr><td><a href='../proc/readspectral.html'>READSPECTRAL</a></td><td><a href='../module/rwgrib2.html'>RWGRIB2</a></td><td>Subroutine</td><td><p>read a GRIB file in spherical harmonics</p><a href="../proc/readspectral.html" class="pull-right"><emph>Read more…</emph></a></td></tr> + + <tr><td><a href='../proc/rfouftr.html'>RFOUFTR</a></td><td><a href='../module/grtoph.html'>GRTOPH</a></td><td>Subroutine</td><td></td></tr> + + <tr><td><a href='../proc/rfourtr.html'>RFOURTR</a></td><td><a href='../module/phtogr.html'>PHTOGR</a></td><td>Subroutine</td><td><a href="../proc/rfourtr.html" class="pull-right"><emph>Read more…</emph></a></td></tr> + + <tr><td><a href='../proc/spfilter.html'>SPFILTER</a></td><td><a href='../module/phtogr.html'>PHTOGR</a></td><td>Subroutine</td><td><p>Spectral Filter of Sardeshmukh and Hoskins (1984, MWR)</p></td></tr> + + <tr><td><a href='../proc/statis.html'>STATIS</a></td><td><a href='../sourcefile/calc_etadot.f90.html'>calc_etadot.f90</a></td><td>Subroutine</td><td><p>calculate mean, rms, stdev</p></td></tr> + + <tr><td><a href='../proc/vdtouv.html'>VDTOUV</a></td><td><a href='../module/ftrafo.html'>FTRAFO</a></td><td>Subroutine</td><td><p>Berechnung der scale winds aus Vorticity und Divergenz + uebergibt man in XMN die Divergenz, so wird der divergente Anteil des + Windes (XPHI=Ud,XPHI=Vd) zurueckgegeben, uebergibt man die Vorticity, so + erhaelt man den rotationellen Wind (XLAM=Vrot,XPHI=-Urot). + Summiert man beide, erhaelt man den gesamten Scale wind</p></td></tr> + + <tr><td><a href='../proc/vduvsub.html'>VDUVSUB</a></td><td><a href='../module/ftrafo.html'>FTRAFO</a></td><td>Subroutine</td><td></td></tr> + + <tr><td><a href='../proc/writelatlon.html'>WRITELATLON</a></td><td><a href='../module/rwgrib2.html'>RWGRIB2</a></td><td>Subroutine</td><td><p>write a field on lat-lon grid to GRIB file</p></td></tr> + + </tbody></table> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: call~~graph~~CallGraph Pages: 1 --> +<svg id="callgraphCallGraph" width="551pt" height="725pt" + viewBox="0.00 0.00 551.00 725.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="call~~graph~~CallGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 721)"> +<title>call~~graph~~CallGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-721 547,-721 547,4 -4,4"/> +<!-- proc~phsymcut --> +<g id="call~~graph~~CallGraph_node1" class="node"><title>proc~phsymcut</title> +<g id="a_call~~graph~~CallGraph_node1"><a xlink:href=".././proc/phsymcut.html" xlink:title="PHSYMCUT"> +<polygon fill="#d9534f" stroke="#d9534f" points="340,-482 269,-482 269,-458 340,-458 340,-482"/> +<text text-anchor="middle" x="304.5" y="-467.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHSYMCUT</text> +</a> +</g> +</g> +<!-- proc~rfourtr --> +<g id="call~~graph~~CallGraph_node13" class="node"><title>proc~rfourtr</title> +<g id="a_call~~graph~~CallGraph_node13"><a xlink:href=".././proc/rfourtr.html" xlink:title="RFOURTR"> +<polygon fill="#d9534f" stroke="#d9534f" points="453,-524 389,-524 389,-500 453,-500 453,-524"/> +<text text-anchor="middle" x="421" y="-509.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">RFOURTR</text> +</a> +</g> +</g> +<!-- proc~phsymcut->proc~rfourtr --> +<g id="call~~graph~~CallGraph_edge1" class="edge"><title>proc~phsymcut->proc~rfourtr</title> +<path fill="none" stroke="#000000" d="M338.311,-482.036C351.073,-486.717 365.83,-492.13 379.262,-497.057"/> +<polygon fill="#000000" stroke="#000000" points="378.166,-500.383 388.76,-500.541 380.577,-493.811 378.166,-500.383"/> +</g> +<!-- proc~contgl --> +<g id="call~~graph~~CallGraph_node2" class="node"><title>proc~contgl</title> +<g id="a_call~~graph~~CallGraph_node2"><a xlink:href=".././proc/contgl.html" xlink:title="CONTGL"> +<polygon fill="#d9534f" stroke="#d9534f" points="72.5,-297 15.5,-297 15.5,-273 72.5,-273 72.5,-297"/> +<text text-anchor="middle" x="44" y="-282.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">CONTGL</text> +</a> +</g> +</g> +<!-- proc~rfouftr --> +<g id="call~~graph~~CallGraph_node3" class="node"><title>proc~rfouftr</title> +<g id="a_call~~graph~~CallGraph_node3"><a xlink:href=".././proc/rfouftr.html" xlink:title="RFOUFTR"> +<polygon fill="#d9534f" stroke="#d9534f" points="453,-482 389,-482 389,-458 453,-458 453,-482"/> +<text text-anchor="middle" x="421" y="-467.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">RFOUFTR</text> +</a> +</g> +</g> +<!-- fft99 --> +<g id="call~~graph~~CallGraph_node31" class="node"><title>fft99</title> +<polygon fill="#777777" stroke="#777777" points="543,-524 489,-524 489,-500 543,-500 543,-524"/> +<text text-anchor="middle" x="516" y="-509.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">fft99</text> +</g> +<!-- proc~rfouftr->fft99 --> +<g id="call~~graph~~CallGraph_edge3" class="edge"><title>proc~rfouftr->fft99</title> +<path fill="none" stroke="#000000" d="M448.899,-482.148C458.412,-486.444 469.265,-491.345 479.388,-495.917"/> +<polygon fill="#000000" stroke="#000000" points="478.248,-499.243 488.802,-500.169 481.129,-492.863 478.248,-499.243"/> +</g> +<!-- wsave --> +<g id="call~~graph~~CallGraph_node39" class="node"><title>wsave</title> +<polygon fill="#777777" stroke="#777777" points="543,-482 489,-482 489,-458 543,-458 543,-482"/> +<text text-anchor="middle" x="516" y="-467.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">wsave</text> +</g> +<!-- proc~rfouftr->wsave --> +<g id="call~~graph~~CallGraph_edge2" class="edge"><title>proc~rfouftr->wsave</title> +<path fill="none" stroke="#000000" d="M453.226,-470C461.48,-470 470.455,-470 478.941,-470"/> +<polygon fill="#000000" stroke="#000000" points="478.969,-473.5 488.969,-470 478.969,-466.5 478.969,-473.5"/> +</g> +<!-- proc~phgr213 --> +<g id="call~~graph~~CallGraph_node4" class="node"><title>proc~phgr213</title> +<g id="a_call~~graph~~CallGraph_node4"><a xlink:href=".././proc/phgr213.html" xlink:title="PHGR213"> +<polygon fill="#d9534f" stroke="#d9534f" points="202.5,-440 141.5,-440 141.5,-416 202.5,-416 202.5,-440"/> +<text text-anchor="middle" x="172" y="-425.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGR213</text> +</a> +</g> +</g> +<!-- proc~phsym --> +<g id="call~~graph~~CallGraph_node21" class="node"><title>proc~phsym</title> +<g id="a_call~~graph~~CallGraph_node21"><a xlink:href=".././proc/phsym.html" xlink:title="PHSYM"> +<polygon fill="#d9534f" stroke="#d9534f" points="331.5,-440 277.5,-440 277.5,-416 331.5,-416 331.5,-440"/> +<text text-anchor="middle" x="304.5" y="-425.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHSYM</text> +</a> +</g> +</g> +<!-- proc~phgr213->proc~phsym --> +<g id="call~~graph~~CallGraph_edge4" class="edge"><title>proc~phgr213->proc~phsym</title> +<path fill="none" stroke="#000000" d="M202.612,-428C221.696,-428 246.646,-428 266.959,-428"/> +<polygon fill="#000000" stroke="#000000" points="267.104,-431.5 277.104,-428 267.104,-424.5 267.104,-431.5"/> +</g> +<!-- proc~readlatlon --> +<g id="call~~graph~~CallGraph_node5" class="node"><title>proc~readlatlon</title> +<g id="a_call~~graph~~CallGraph_node5"><a xlink:href=".././proc/readlatlon.html" xlink:title="READLATLON"> +<polygon fill="#d9534f" stroke="#d9534f" points="213,-398 131,-398 131,-374 213,-374 213,-398"/> +<text text-anchor="middle" x="172" y="-383.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">READLATLON</text> +</a> +</g> +</g> +<!-- grib_count_in_file --> +<g id="call~~graph~~CallGraph_node34" class="node"><title>grib_count_in_file</title> +<polygon fill="#777777" stroke="#777777" points="353,-398 256,-398 256,-374 353,-374 353,-398"/> +<text text-anchor="middle" x="304.5" y="-383.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grib_count_in_file</text> +</g> +<!-- proc~readlatlon->grib_count_in_file --> +<g id="call~~graph~~CallGraph_edge5" class="edge"><title>proc~readlatlon->grib_count_in_file</title> +<path fill="none" stroke="#000000" d="M213.219,-386C223.435,-386 234.615,-386 245.521,-386"/> +<polygon fill="#000000" stroke="#000000" points="245.853,-389.5 255.853,-386 245.853,-382.5 245.853,-389.5"/> +</g> +<!-- grib_close_file --> +<g id="call~~graph~~CallGraph_node40" class="node"><title>grib_close_file</title> +<polygon fill="#777777" stroke="#777777" points="345,-356 264,-356 264,-332 345,-332 345,-356"/> +<text text-anchor="middle" x="304.5" y="-341.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grib_close_file</text> +</g> +<!-- proc~readlatlon->grib_close_file --> +<g id="call~~graph~~CallGraph_edge6" class="edge"><title>proc~readlatlon->grib_close_file</title> +<path fill="none" stroke="#000000" d="M210.396,-373.964C224.73,-369.351 241.271,-364.028 256.399,-359.159"/> +<polygon fill="#000000" stroke="#000000" points="257.652,-362.433 266.098,-356.037 255.507,-355.769 257.652,-362.433"/> +</g> +<!-- proc~phgracut --> +<g id="call~~graph~~CallGraph_node6" class="node"><title>proc~phgracut</title> +<g id="a_call~~graph~~CallGraph_node6"><a xlink:href=".././proc/phgracut.html" xlink:title="PHGRACUT"> +<polygon fill="#d9534f" stroke="#d9534f" points="340,-524 269,-524 269,-500 340,-500 340,-524"/> +<text text-anchor="middle" x="304.5" y="-509.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGRACUT</text> +</a> +</g> +</g> +<!-- proc~phgracut->proc~rfourtr --> +<g id="call~~graph~~CallGraph_edge7" class="edge"><title>proc~phgracut->proc~rfourtr</title> +<path fill="none" stroke="#000000" d="M340.165,-512C352.3,-512 366.048,-512 378.674,-512"/> +<polygon fill="#000000" stroke="#000000" points="378.956,-515.5 388.956,-512 378.956,-508.5 378.956,-515.5"/> +</g> +<!-- proc~dplgnd --> +<g id="call~~graph~~CallGraph_node7" class="node"><title>proc~dplgnd</title> +<g id="a_call~~graph~~CallGraph_node7"><a xlink:href=".././proc/dplgnd.html" xlink:title="DPLGND"> +<polygon fill="#d9534f" stroke="#d9534f" points="72,-339 16,-339 16,-315 72,-315 72,-339"/> +<text text-anchor="middle" x="44" y="-324.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">DPLGND</text> +</a> +</g> +</g> +<!-- proc~ia --> +<g id="call~~graph~~CallGraph_node8" class="node"><title>proc~ia</title> +<g id="a_call~~graph~~CallGraph_node8"><a xlink:href=".././proc/ia.html" xlink:title="IA"> +<polygon fill="#d94e8f" stroke="#d94e8f" points="71,-381 17,-381 17,-357 71,-357 71,-381"/> +<text text-anchor="middle" x="44" y="-366.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">IA</text> +</a> +</g> +</g> +<!-- proc~vduvsub --> +<g id="call~~graph~~CallGraph_node9" class="node"><title>proc~vduvsub</title> +<g id="a_call~~graph~~CallGraph_node9"><a xlink:href=".././proc/vduvsub.html" xlink:title="VDUVSUB"> +<polygon fill="#d9534f" stroke="#d9534f" points="75,-423 13,-423 13,-399 75,-399 75,-423"/> +<text text-anchor="middle" x="44" y="-408.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">VDUVSUB</text> +</a> +</g> +</g> +<!-- proc~plgnfa --> +<g id="call~~graph~~CallGraph_node10" class="node"><title>proc~plgnfa</title> +<g id="a_call~~graph~~CallGraph_node10"><a xlink:href=".././proc/plgnfa.html" xlink:title="PLGNFA"> +<polygon fill="#d9534f" stroke="#d9534f" points="71.5,-465 16.5,-465 16.5,-441 71.5,-441 71.5,-465"/> +<text text-anchor="middle" x="44" y="-450.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PLGNFA</text> +</a> +</g> +</g> +<!-- proc~legtr --> +<g id="call~~graph~~CallGraph_node11" class="node"><title>proc~legtr</title> +<g id="a_call~~graph~~CallGraph_node11"><a xlink:href=".././proc/legtr.html" xlink:title="LEGTR"> +<polygon fill="#d9534f" stroke="#d9534f" points="71,-507 17,-507 17,-483 71,-483 71,-507"/> +<text text-anchor="middle" x="44" y="-492.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">LEGTR</text> +</a> +</g> +</g> +<!-- proc~phgpns --> +<g id="call~~graph~~CallGraph_node12" class="node"><title>proc~phgpns</title> +<g id="a_call~~graph~~CallGraph_node12"><a xlink:href=".././proc/phgpns.html" xlink:title="PHGPNS"> +<polygon fill="#d9534f" stroke="#d9534f" points="332.5,-566 276.5,-566 276.5,-542 332.5,-542 332.5,-566"/> +<text text-anchor="middle" x="304.5" y="-551.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGPNS</text> +</a> +</g> +</g> +<!-- proc~phgpns->proc~rfourtr --> +<g id="call~~graph~~CallGraph_edge8" class="edge"><title>proc~phgpns->proc~rfourtr</title> +<path fill="none" stroke="#000000" d="M332.635,-544.047C346.414,-538.992 363.447,-532.744 378.803,-527.112"/> +<polygon fill="#000000" stroke="#000000" points="380.418,-530.247 388.601,-523.517 378.008,-523.675 380.418,-530.247"/> +</g> +<!-- proc~rfourtr->fft99 --> +<g id="call~~graph~~CallGraph_edge9" class="edge"><title>proc~rfourtr->fft99</title> +<path fill="none" stroke="#000000" d="M453.226,-512C461.48,-512 470.455,-512 478.941,-512"/> +<polygon fill="#000000" stroke="#000000" points="478.969,-515.5 488.969,-512 478.969,-508.5 478.969,-515.5"/> +</g> +<!-- proc~readspectral --> +<g id="call~~graph~~CallGraph_node14" class="node"><title>proc~readspectral</title> +<g id="a_call~~graph~~CallGraph_node14"><a xlink:href=".././proc/readspectral.html" xlink:title="READSPECTRAL"> +<polygon fill="#d9534f" stroke="#d9534f" points="220,-356 124,-356 124,-332 220,-332 220,-356"/> +<text text-anchor="middle" x="172" y="-341.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">READSPECTRAL</text> +</a> +</g> +</g> +<!-- proc~readspectral->grib_count_in_file --> +<g id="call~~graph~~CallGraph_edge10" class="edge"><title>proc~readspectral->grib_count_in_file</title> +<path fill="none" stroke="#000000" d="M210.396,-356.036C224.73,-360.649 241.271,-365.972 256.399,-370.841"/> +<polygon fill="#000000" stroke="#000000" points="255.507,-374.231 266.098,-373.963 257.652,-367.567 255.507,-374.231"/> +</g> +<!-- proc~readspectral->grib_close_file --> +<g id="call~~graph~~CallGraph_edge11" class="edge"><title>proc~readspectral->grib_close_file</title> +<path fill="none" stroke="#000000" d="M220.113,-344C230.957,-344 242.527,-344 253.49,-344"/> +<polygon fill="#000000" stroke="#000000" points="253.77,-347.5 263.77,-344 253.77,-340.5 253.77,-347.5"/> +</g> +<!-- proc~writelatlon --> +<g id="call~~graph~~CallGraph_node15" class="node"><title>proc~writelatlon</title> +<g id="a_call~~graph~~CallGraph_node15"><a xlink:href=".././proc/writelatlon.html" xlink:title="WRITELATLON"> +<polygon fill="#d9534f" stroke="#d9534f" points="88,-549 7.10543e-15,-549 7.10543e-15,-525 88,-525 88,-549"/> +<text text-anchor="middle" x="44" y="-534.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">WRITELATLON</text> +</a> +</g> +</g> +<!-- grib_set --> +<g id="call~~graph~~CallGraph_node32" class="node"><title>grib_set</title> +<polygon fill="#777777" stroke="#777777" points="199,-579 145,-579 145,-555 199,-555 199,-579"/> +<text text-anchor="middle" x="172" y="-564.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grib_set</text> +</g> +<!-- proc~writelatlon->grib_set --> +<g id="call~~graph~~CallGraph_edge13" class="edge"><title>proc~writelatlon->grib_set</title> +<path fill="none" stroke="#000000" d="M88.0096,-547.24C103.155,-550.846 120.019,-554.862 134.569,-558.326"/> +<polygon fill="#000000" stroke="#000000" points="134.158,-561.826 144.697,-560.737 135.779,-555.016 134.158,-561.826"/> +</g> +<!-- grib_write --> +<g id="call~~graph~~CallGraph_node35" class="node"><title>grib_write</title> +<polygon fill="#777777" stroke="#777777" points="201.5,-537 142.5,-537 142.5,-513 201.5,-513 201.5,-537"/> +<text text-anchor="middle" x="172" y="-522.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grib_write</text> +</g> +<!-- proc~writelatlon->grib_write --> +<g id="call~~graph~~CallGraph_edge12" class="edge"><title>proc~writelatlon->grib_write</title> +<path fill="none" stroke="#000000" d="M88.0096,-532.904C102.326,-531.54 118.179,-530.031 132.16,-528.699"/> +<polygon fill="#000000" stroke="#000000" points="132.808,-532.153 142.431,-527.721 132.144,-525.185 132.808,-532.153"/> +</g> +<!-- proc~omega --> +<g id="call~~graph~~CallGraph_node16" class="node"><title>proc~omega</title> +<g id="a_call~~graph~~CallGraph_node16"><a xlink:href=".././proc/omega.html" xlink:title="OMEGA"> +<polygon fill="#d9534f" stroke="#d9534f" points="71,-591 17,-591 17,-567 71,-567 71,-591"/> +<text text-anchor="middle" x="44" y="-576.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">OMEGA</text> +</a> +</g> +</g> +<!-- proc~statis --> +<g id="call~~graph~~CallGraph_node17" class="node"><title>proc~statis</title> +<g id="a_call~~graph~~CallGraph_node17"><a xlink:href=".././proc/statis.html" xlink:title="STATIS"> +<polygon fill="#d9534f" stroke="#d9534f" points="199,-276 145,-276 145,-252 199,-252 199,-276"/> +<text text-anchor="middle" x="172" y="-261.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">STATIS</text> +</a> +</g> +</g> +<!-- proc~vdtouv --> +<g id="call~~graph~~CallGraph_node18" class="node"><title>proc~vdtouv</title> +<g id="a_call~~graph~~CallGraph_node18"><a xlink:href=".././proc/vdtouv.html" xlink:title="VDTOUV"> +<polygon fill="#d9534f" stroke="#d9534f" points="72,-633 16,-633 16,-609 72,-609 72,-633"/> +<text text-anchor="middle" x="44" y="-618.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">VDTOUV</text> +</a> +</g> +</g> +<!-- proc~spfilter --> +<g id="call~~graph~~CallGraph_node19" class="node"><title>proc~spfilter</title> +<g id="a_call~~graph~~CallGraph_node19"><a xlink:href=".././proc/spfilter.html" xlink:title="SPFILTER"> +<polygon fill="#d9534f" stroke="#d9534f" points="75.5,-675 12.5,-675 12.5,-651 75.5,-651 75.5,-675"/> +<text text-anchor="middle" x="44" y="-660.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">SPFILTER</text> +</a> +</g> +</g> +<!-- float --> +<g id="call~~graph~~CallGraph_node29" class="node"><title>float</title> +<polygon fill="#777777" stroke="#777777" points="199,-696 145,-696 145,-672 199,-672 199,-696"/> +<text text-anchor="middle" x="172" y="-681.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">float</text> +</g> +<!-- proc~spfilter->float --> +<g id="call~~graph~~CallGraph_edge14" class="edge"><title>proc~spfilter->float</title> +<path fill="none" stroke="#000000" d="M75.5011,-668.084C93.3222,-671.054 115.921,-674.82 134.661,-677.943"/> +<polygon fill="#000000" stroke="#000000" points="134.18,-681.412 144.62,-679.603 135.331,-674.507 134.18,-681.412"/> +</g> +<!-- alog --> +<g id="call~~graph~~CallGraph_node37" class="node"><title>alog</title> +<polygon fill="#777777" stroke="#777777" points="199,-654 145,-654 145,-630 199,-630 199,-654"/> +<text text-anchor="middle" x="172" y="-639.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">alog</text> +</g> +<!-- proc~spfilter->alog --> +<g id="call~~graph~~CallGraph_edge15" class="edge"><title>proc~spfilter->alog</title> +<path fill="none" stroke="#000000" d="M75.5011,-657.916C93.3222,-654.946 115.921,-651.18 134.661,-648.057"/> +<polygon fill="#000000" stroke="#000000" points="135.331,-651.493 144.62,-646.397 134.18,-644.588 135.331,-651.493"/> +</g> +<!-- proc~posnam --> +<g id="call~~graph~~CallGraph_node20" class="node"><title>proc~posnam</title> +<g id="a_call~~graph~~CallGraph_node20"><a xlink:href=".././proc/posnam.html" xlink:title="POSNAM"> +<polygon fill="#d9534f" stroke="#d9534f" points="201,-234 143,-234 143,-210 201,-210 201,-234"/> +<text text-anchor="middle" x="172" y="-219.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">POSNAM</text> +</a> +</g> +</g> +<!-- proc~grphsub --> +<g id="call~~graph~~CallGraph_node22" class="node"><title>proc~grphsub</title> +<g id="a_call~~graph~~CallGraph_node22"><a xlink:href=".././proc/grphsub.html" xlink:title="GRPHSUB"> +<polygon fill="#d9534f" stroke="#d9534f" points="336.5,-108 272.5,-108 272.5,-84 336.5,-84 336.5,-108"/> +<text text-anchor="middle" x="304.5" y="-93.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GRPHSUB</text> +</a> +</g> +</g> +<!-- proc~gauleg --> +<g id="call~~graph~~CallGraph_node23" class="node"><title>proc~gauleg</title> +<g id="a_call~~graph~~CallGraph_node23"><a xlink:href=".././proc/gauleg.html" xlink:title="GAULEG"> +<polygon fill="#d9534f" stroke="#d9534f" points="200,-192 144,-192 144,-168 200,-168 200,-192"/> +<text text-anchor="middle" x="172" y="-177.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GAULEG</text> +</a> +</g> +</g> +<!-- dcos --> +<g id="call~~graph~~CallGraph_node33" class="node"><title>dcos</title> +<polygon fill="#777777" stroke="#777777" points="331.5,-192 277.5,-192 277.5,-168 331.5,-168 331.5,-192"/> +<text text-anchor="middle" x="304.5" y="-177.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">dcos</text> +</g> +<!-- proc~gauleg->dcos --> +<g id="call~~graph~~CallGraph_edge16" class="edge"><title>proc~gauleg->dcos</title> +<path fill="none" stroke="#000000" d="M200.04,-180C219.455,-180 245.84,-180 267.104,-180"/> +<polygon fill="#000000" stroke="#000000" points="267.385,-183.5 277.385,-180 267.385,-176.5 267.385,-183.5"/> +</g> +<!-- proc~grph213 --> +<g id="call~~graph~~CallGraph_node24" class="node"><title>proc~grph213</title> +<g id="a_call~~graph~~CallGraph_node24"><a xlink:href=".././proc/grph213.html" xlink:title="GRPH213"> +<polygon fill="#d9534f" stroke="#d9534f" points="202.5,-150 141.5,-150 141.5,-126 202.5,-126 202.5,-150"/> +<text text-anchor="middle" x="172" y="-135.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GRPH213</text> +</a> +</g> +</g> +<!-- proc~grph213->proc~grphsub --> +<g id="call~~graph~~CallGraph_edge18" class="edge"><title>proc~grph213->proc~grphsub</title> +<path fill="none" stroke="#000000" d="M202.612,-128.47C220.368,-122.755 243.203,-115.406 262.656,-109.145"/> +<polygon fill="#000000" stroke="#000000" points="263.738,-112.474 272.185,-106.078 261.593,-105.81 263.738,-112.474"/> +</g> +<!-- ind --> +<g id="call~~graph~~CallGraph_node30" class="node"><title>ind</title> +<polygon fill="#777777" stroke="#777777" points="331.5,-150 277.5,-150 277.5,-126 331.5,-126 331.5,-150"/> +<text text-anchor="middle" x="304.5" y="-135.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">ind</text> +</g> +<!-- proc~grph213->ind --> +<g id="call~~graph~~CallGraph_edge17" class="edge"><title>proc~grph213->ind</title> +<path fill="none" stroke="#000000" d="M202.612,-138C221.696,-138 246.646,-138 266.959,-138"/> +<polygon fill="#000000" stroke="#000000" points="267.104,-141.5 277.104,-138 267.104,-134.5 267.104,-141.5"/> +</g> +<!-- proc~phgrad --> +<g id="call~~graph~~CallGraph_node25" class="node"><title>proc~phgrad</title> +<g id="a_call~~graph~~CallGraph_node25"><a xlink:href=".././proc/phgrad.html" xlink:title="PHGRAD"> +<polygon fill="#d9534f" stroke="#d9534f" points="200.5,-108 143.5,-108 143.5,-84 200.5,-84 200.5,-108"/> +<text text-anchor="middle" x="172" y="-93.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGRAD</text> +</a> +</g> +</g> +<!-- proc~phgcut --> +<g id="call~~graph~~CallGraph_node26" class="node"><title>proc~phgcut</title> +<g id="a_call~~graph~~CallGraph_node26"><a xlink:href=".././proc/phgcut.html" xlink:title="PHGCUT"> +<polygon fill="#d9534f" stroke="#d9534f" points="200.5,-482 143.5,-482 143.5,-458 200.5,-458 200.5,-482"/> +<text text-anchor="middle" x="172" y="-467.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGCUT</text> +</a> +</g> +</g> +<!-- proc~phgcut->proc~phsymcut --> +<g id="call~~graph~~CallGraph_edge19" class="edge"><title>proc~phgcut->proc~phsymcut</title> +<path fill="none" stroke="#000000" d="M200.676,-470C217.546,-470 239.498,-470 258.786,-470"/> +<polygon fill="#000000" stroke="#000000" points="258.882,-473.5 268.882,-470 258.882,-466.5 258.882,-473.5"/> +</g> +<!-- proc~phgcut->proc~phgpns --> +<g id="call~~graph~~CallGraph_edge20" class="edge"><title>proc~phgcut->proc~phgpns</title> +<path fill="none" stroke="#000000" d="M190.125,-482.065C199.103,-488.472 210.235,-496.543 220,-504 236.329,-516.47 238.454,-522.31 256,-533 259.453,-535.104 263.154,-537.115 266.91,-539.001"/> +<polygon fill="#000000" stroke="#000000" points="265.712,-542.307 276.249,-543.415 268.703,-535.978 265.712,-542.307"/> +</g> +<!-- proc~lgtr213 --> +<g id="call~~graph~~CallGraph_node27" class="node"><title>proc~lgtr213</title> +<g id="a_call~~graph~~CallGraph_node27"><a xlink:href=".././proc/lgtr213.html" xlink:title="LGTR213"> +<polygon fill="#d9534f" stroke="#d9534f" points="73.5,-717 14.5,-717 14.5,-693 73.5,-693 73.5,-717"/> +<text text-anchor="middle" x="44" y="-702.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">LGTR213</text> +</a> +</g> +</g> +<!-- program~calc_etadot --> +<g id="call~~graph~~CallGraph_node28" class="node"><title>program~calc_etadot</title> +<g id="a_call~~graph~~CallGraph_node28"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="77.5,-255 10.5,-255 10.5,-231 77.5,-231 77.5,-255"/> +<text text-anchor="middle" x="44" y="-240.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~phgr213 --> +<g id="call~~graph~~CallGraph_edge25" class="edge"><title>program~calc_etadot->proc~phgr213</title> +<path fill="none" stroke="#000000" d="M77.788,-255.083C81.6263,-257.567 85.1736,-260.516 88,-264 129.29,-314.897 81.8485,-356.815 124,-407 126.443,-409.908 129.37,-412.43 132.553,-414.613"/> +<polygon fill="#000000" stroke="#000000" points="130.995,-417.753 141.421,-419.634 134.444,-411.661 130.995,-417.753"/> +</g> +<!-- program~calc_etadot->proc~readlatlon --> +<g id="call~~graph~~CallGraph_edge31" class="edge"><title>program~calc_etadot->proc~readlatlon</title> +<path fill="none" stroke="#000000" d="M77.0499,-255.074C81.0976,-257.575 84.8993,-260.531 88,-264 119.76,-299.529 91.6387,-330.018 124,-365 124.888,-365.959 125.827,-366.878 126.81,-367.757"/> +<polygon fill="#000000" stroke="#000000" points="124.897,-370.693 135.042,-373.746 129.015,-365.033 124.897,-370.693"/> +</g> +<!-- program~calc_etadot->proc~readspectral --> +<g id="call~~graph~~CallGraph_edge21" class="edge"><title>program~calc_etadot->proc~readspectral</title> +<path fill="none" stroke="#000000" d="M74.975,-255.06C79.6011,-257.629 84.1226,-260.609 88,-264 109.713,-282.988 102.778,-298.465 124,-318 127.332,-321.067 131.091,-323.906 134.995,-326.493"/> +<polygon fill="#000000" stroke="#000000" points="133.298,-329.557 143.665,-331.745 136.925,-323.57 133.298,-329.557"/> +</g> +<!-- program~calc_etadot->proc~statis --> +<g id="call~~graph~~CallGraph_edge24" class="edge"><title>program~calc_etadot->proc~statis</title> +<path fill="none" stroke="#000000" d="M77.7761,-248.463C95.2088,-251.368 116.688,-254.948 134.633,-257.939"/> +<polygon fill="#000000" stroke="#000000" points="134.294,-261.431 144.734,-259.622 135.445,-254.526 134.294,-261.431"/> +</g> +<!-- program~calc_etadot->proc~posnam --> +<g id="call~~graph~~CallGraph_edge30" class="edge"><title>program~calc_etadot->proc~posnam</title> +<path fill="none" stroke="#000000" d="M77.7761,-237.537C94.5993,-234.733 115.191,-231.302 132.738,-228.377"/> +<polygon fill="#000000" stroke="#000000" points="133.378,-231.819 142.667,-226.722 132.227,-224.914 133.378,-231.819"/> +</g> +<!-- program~calc_etadot->proc~gauleg --> +<g id="call~~graph~~CallGraph_edge26" class="edge"><title>program~calc_etadot->proc~gauleg</title> +<path fill="none" stroke="#000000" d="M66.9259,-230.824C82.6657,-222.212 104.461,-210.545 124,-201 127.328,-199.374 130.809,-197.725 134.308,-196.102"/> +<polygon fill="#000000" stroke="#000000" points="135.87,-199.236 143.515,-191.901 132.965,-192.868 135.87,-199.236"/> +</g> +<!-- program~calc_etadot->proc~grph213 --> +<g id="call~~graph~~CallGraph_edge23" class="edge"><title>program~calc_etadot->proc~grph213</title> +<path fill="none" stroke="#000000" d="M53.989,-230.707C67.5067,-212.928 94.6326,-179.883 124,-159 126.54,-157.194 129.26,-155.49 132.065,-153.894"/> +<polygon fill="#000000" stroke="#000000" points="133.917,-156.876 141.189,-149.172 130.7,-150.66 133.917,-156.876"/> +</g> +<!-- program~calc_etadot->proc~phgrad --> +<g id="call~~graph~~CallGraph_edge29" class="edge"><title>program~calc_etadot->proc~phgrad</title> +<path fill="none" stroke="#000000" d="M49.6902,-230.951C59.7874,-206.42 85.8043,-150.196 124,-117 127.025,-114.371 130.432,-112.019 133.995,-109.927"/> +<polygon fill="#000000" stroke="#000000" points="135.764,-112.952 143.043,-105.254 132.552,-106.733 135.764,-112.952"/> +</g> +<!-- program~calc_etadot->proc~phgcut --> +<g id="call~~graph~~CallGraph_edge22" class="edge"><title>program~calc_etadot->proc~phgcut</title> +<path fill="none" stroke="#000000" d="M77.5424,-254.666C81.5179,-257.227 85.1683,-260.309 88,-264 138.982,-330.463 71.8918,-383.416 124,-449 126.828,-452.56 130.389,-455.534 134.279,-458.015"/> +<polygon fill="#000000" stroke="#000000" points="132.685,-461.132 143.164,-462.694 135.947,-454.938 132.685,-461.132"/> +</g> +<!-- set99 --> +<g id="call~~graph~~CallGraph_node36" class="node"><title>set99</title> +<polygon fill="#777777" stroke="#777777" points="199,-66 145,-66 145,-42 199,-42 199,-66"/> +<text text-anchor="middle" x="172" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">set99</text> +</g> +<!-- program~calc_etadot->set99 --> +<g id="call~~graph~~CallGraph_edge28" class="edge"><title>program~calc_etadot->set99</title> +<path fill="none" stroke="#000000" d="M47.6442,-230.72C54.7648,-200.385 77.0598,-121.04 124,-75 127.32,-71.7438 131.232,-68.9438 135.358,-66.549"/> +<polygon fill="#000000" stroke="#000000" points="137.208,-69.5371 144.586,-61.9338 134.077,-63.2764 137.208,-69.5371"/> +</g> +<!-- grib_open_file --> +<g id="call~~graph~~CallGraph_node38" class="node"><title>grib_open_file</title> +<polygon fill="#777777" stroke="#777777" points="212,-24 132,-24 132,-0 212,-0 212,-24"/> +<text text-anchor="middle" x="172" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grib_open_file</text> +</g> +<!-- program~calc_etadot->grib_open_file --> +<g id="call~~graph~~CallGraph_edge27" class="edge"><title>program~calc_etadot->grib_open_file</title> +<path fill="none" stroke="#000000" d="M46.3044,-230.865C50.6899,-195.717 67.9305,-92.5616 124,-33 125.034,-31.9019 126.135,-30.8573 127.292,-29.8639"/> +<polygon fill="#000000" stroke="#000000" points="129.414,-32.65 135.57,-24.0274 125.381,-26.9289 129.414,-32.65"/> +</g> +<!-- program~calc_etadot->grib_close_file --> +<g id="call~~graph~~CallGraph_edge32" class="edge"><title>program~calc_etadot->grib_close_file</title> +<path fill="none" stroke="#000000" d="M70.6232,-255.129C76.3808,-257.961 82.4324,-261.022 88,-264 104.333,-272.737 107.108,-277.399 124,-285 166.52,-304.132 217.158,-320.207 253.793,-330.722"/> +<polygon fill="#000000" stroke="#000000" points="253.16,-334.18 263.736,-333.538 255.068,-327.445 253.16,-334.18"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/media/css/bootstrap.css b/Documentation/html/Documentation/Api/Fortran/media/css/bootstrap.css new file mode 100644 index 0000000000000000000000000000000000000000..57846456ceeeac2900b4239cd505c655d79a4415 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/css/bootstrap.css @@ -0,0 +1,6013 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=f8210fe4edf87d7604a7) + * Config saved to config.json and https://gist.github.com/f8210fe4edf87d7604a7 + */ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +mark { + background: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + select { + background: #fff !important; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\2a"; +} +.glyphicon-plus:before { + content: "\2b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333333; + background-color: #ffffff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + padding: 4px; + line-height: 1.42857143; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + background-color: #fcf8e3; + padding: .2em; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eeeeee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; + text-align: right; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #ffffff; + background-color: #333333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + word-break: break-all; + word-wrap: break-word; + color: #333333; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +.row { + margin-left: -15px; + margin-right: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0%; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #dddddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dddddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #dddddd; +} +.table .table { + background-color: #ffffff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #dddddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #dddddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-child(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + overflow-x: auto; + min-height: 0.01%; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #dddddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.form-control::-moz-placeholder { + color: #999999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999999; +} +.form-control::-webkit-input-placeholder { + color: #999999; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; + opacity: 1; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="month"] { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0; +} +.input-sm, +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm, +select.form-group-sm .form-control { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +textarea.form-group-sm .form-control, +select[multiple].input-sm, +select[multiple].form-group-sm .form-control { + height: auto; +} +.input-lg, +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-lg, +select.form-group-lg .form-control { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +textarea.form-group-lg .form-control, +select[multiple].input-lg, +select[multiple].form-group-lg .form-control { + height: auto; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + border-color: #3c763d; + background-color: #dff0d8; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + border-color: #8a6d3b; + background-color: #fcf8e3; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + border-color: #a94442; + background-color: #f2dede; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 7px; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.3px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333333; + text-decoration: none; +} +.btn:active, +.btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + pointer-events: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; +} +.btn-default:hover, +.btn-default:focus, +.btn-default.focus, +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #ffffff; + border-color: #cccccc; +} +.btn-default .badge { + color: #ffffff; + background-color: #333333; +} +.btn-primary { + color: #ffffff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary.focus, +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #ffffff; +} +.btn-success { + color: #ffffff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:hover, +.btn-success:focus, +.btn-success.focus, +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #ffffff; +} +.btn-info { + color: #ffffff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:hover, +.btn-info:focus, +.btn-info.focus, +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #ffffff; +} +.btn-warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:hover, +.btn-warning:focus, +.btn-warning.focus, +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #ffffff; +} +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger.focus, +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #ffffff; +} +.btn-link { + color: #337ab7; + font-weight: normal; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; + visibility: hidden; +} +.collapse.in { + display: block; + visibility: visible; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; + -webkit-transition-duration: 0.35s; + -o-transition-duration: 0.35s; + transition-duration: 0.35s; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + text-decoration: none; + color: #262626; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #337ab7; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: not-allowed; +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + left: auto; + right: 0; +} +.dropdown-menu-left { + left: 0; + right: auto; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid; + content: ""; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-bottom-left-radius: 4px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555555; + text-align: center; + background-color: #eeeeee; + border: 1px solid #cccccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.nav > li.disabled > a { + color: #777777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777777; + text-decoration: none; + background-color: transparent; + cursor: not-allowed; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eeeeee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #dddddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555555; + background-color: #ffffff; + border: 1px solid #dddddd; + border-bottom-color: transparent; + cursor: default; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #dddddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #dddddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.tab-content > .tab-pane { + display: none; + visibility: hidden; +} +.tab-content > .active { + display: block; + visibility: visible; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + visibility: visible !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; + height: 50px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + margin-right: 15px; + padding: 9px 10px; + margin-top: 8px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + margin-left: -15px; + margin-right: -15px; + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 8px; + margin-bottom: 8px; +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-left: 15px; + margin-right: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777777; +} +.navbar-default .navbar-nav > li > a { + color: #777777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #dddddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #dddddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + background-color: #e7e7e7; + color: #555555; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777777; +} +.navbar-default .navbar-link:hover { + color: #333333; +} +.navbar-default .btn-link { + color: #777777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #cccccc; +} +.navbar-inverse { + background-color: #222222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + background-color: #080808; + color: #ffffff; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #ffffff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + content: "/\00a0"; + padding: 0 5px; + color: #cccccc; +} +.breadcrumb > .active { + color: #777777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + line-height: 1.42857143; + text-decoration: none; + color: #337ab7; + background-color: #ffffff; + border: 1px solid #dddddd; + margin-left: -1px; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + color: #23527c; + background-color: #eeeeee; + border-color: #dddddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #ffffff; + background-color: #337ab7; + border-color: #337ab7; + cursor: default; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777777; + background-color: #ffffff; + border-color: #dddddd; + cursor: not-allowed; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + list-style: none; + text-align: center; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777777; + background-color: #ffffff; + cursor: not-allowed; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + color: #ffffff; + line-height: 1; + vertical-align: baseline; + white-space: nowrap; + text-align: center; + background-color: #777777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #ffffff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding: 30px 15px; + margin-bottom: 30px; + color: inherit; + background-color: #eeeeee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding: 48px 0; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-left: 60px; + padding-right: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: border 0.2s ease-in-out; + -o-transition: border 0.2s ease-in-out; + transition: border 0.2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-left: auto; + margin-right: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + background-color: #dff0d8; + border-color: #d6e9c6; + color: #3c763d; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + background-color: #d9edf7; + border-color: #bce8f1; + color: #31708f; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + background-color: #fcf8e3; + border-color: #faebcc; + color: #8a6d3b; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + background-color: #f2dede; + border-color: #ebccd1; + color: #a94442; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + margin-bottom: 20px; + padding-left: 0; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #ffffff; + border: 1px solid #dddddd; +} +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item { + color: #555555; +} +a.list-group-item .list-group-item-heading { + color: #333333; +} +a.list-group-item:hover, +a.list-group-item:focus { + text-decoration: none; + color: #555555; + background-color: #f5f5f5; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + background-color: #eeeeee; + color: #777777; + cursor: not-allowed; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #ffffff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +a.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +a.list-group-item-success.active:hover, +a.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +a.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +a.list-group-item-info.active:hover, +a.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +a.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +a.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #dddddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-left: 15px; + padding-right: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #dddddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + border: 0; + margin-bottom: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #dddddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #dddddd; +} +.panel-default { + border-color: #dddddd; +} +.panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #dddddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #dddddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #dddddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #ffffff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; +} +.embed-responsive.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.modal-open { + overflow: hidden; +} +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + -webkit-background-clip: padding-box; + background-clip: padding-box; + outline: 0; +} +.modal-backdrop { + position: absolute; + top: 0; + right: 0; + left: 0; + background-color: #000000; +} +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; + min-height: 16.42857143px; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + visibility: visible; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-weight: normal; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); +} +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} +.tooltip.top { + margin-top: -3px; + padding: 5px 0; +} +.tooltip.right { + margin-left: 3px; + padding: 0 5px; +} +.tooltip.bottom { + margin-top: 3px; + padding: 5px 0; +} +.tooltip.left { + margin-left: -3px; + padding: 0 5px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.top-left .tooltip-arrow { + bottom: 0; + right: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + background-color: #ffffff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + white-space: normal; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + border-width: 10px; + content: ""; +} +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -11px; +} +.popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #ffffff; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); +} +.popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #ffffff; +} +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -11px; +} +.popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #ffffff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); +} +.popover.left > .arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #ffffff; + bottom: -10px; +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; + visibility: hidden !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} diff --git a/Documentation/html/Documentation/Api/Fortran/media/css/bootstrap.min.css b/Documentation/html/Documentation/Api/Fortran/media/css/bootstrap.min.css new file mode 100644 index 0000000000000000000000000000000000000000..a40d9432f681c323c655871123ddeb3070b03cb7 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/css/bootstrap.min.css @@ -0,0 +1,10 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=f8210fe4edf87d7604a7) + * Config saved to config.json and https://gist.github.com/f8210fe4edf87d7604a7 + *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff !important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm,.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,select.form-group-sm .form-control{height:30px;line-height:30px}textarea.input-sm,textarea.form-group-sm .form-control,select[multiple].input-sm,select[multiple].form-group-sm .form-control{height:auto}.input-lg,.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg,select.form-group-lg .form-control{height:46px;line-height:46px}textarea.input-lg,textarea.form-group-lg .form-control,select[multiple].input-lg,select[multiple].form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;visibility:visible !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}.media{margin-top:15px}.media:first-child{margin-top:0}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;visibility:visible;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:normal;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:normal;line-height:1.42857143;text-align:left;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}} \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/media/css/font-awesome.css b/Documentation/html/Documentation/Api/Fortran/media/css/font-awesome.css new file mode 100644 index 0000000000000000000000000000000000000000..4040b3cf859f6bb6b9bb349720af23a5e1cd277c --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/css/font-awesome.css @@ -0,0 +1,1672 @@ +/*! + * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.2.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} diff --git a/Documentation/html/Documentation/Api/Fortran/media/css/font-awesome.min.css b/Documentation/html/Documentation/Api/Fortran/media/css/font-awesome.min.css new file mode 100644 index 0000000000000000000000000000000000000000..ec53d4d6d5bf13db8ca757ea991a9c7839f23c89 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.2.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"} \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/media/css/local.css b/Documentation/html/Documentation/Api/Fortran/media/css/local.css new file mode 100644 index 0000000000000000000000000000000000000000..8ab50bcaafa5878b1fc5e2440885d87aa94a70e9 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/css/local.css @@ -0,0 +1,282 @@ +body { + padding-top: 70px; + } + table.nostretch { + width=100% + } + .nostretch td { + class='block' + } + .nostretch tr td{ + width:1%; + white-space:nowrap; + } + + :target:before { + content:""; + display:block; + height:60px; + margin:-60px 0 0; + } + + ol.hierarchy { + min-height: 40px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + } + + .smallcaps { + font-variant: small-caps; + } + .well .sidebar { + padding: 8px 0 + } + .sidebar a { + padding: 0px,0px,0px,0px + } + .varlist>tbody>tr>td { + padding-left: 3px; + padding-right: 3px; + } + .varlist>tbody>tr>td:first-child, .varlist>thead>tr>td:first-child { + padding-left: 8px; + } + .varlist>tbody>td>td:last-child, .varlist>thead>tr>td:last-child { + padding-right: 8px; + } + + .highlight pre { + overflow-x: auto; + overflow-wrap: normal; + white-space: pre + } + + /* .hl is for when line numbers are included, .highlight is for all + other cases. */ + .hl pre { + counter-reset: line-numbering; + overflow-x: auto; + overflow-wrap: normal; + white-space: pre; + padding: 0; + padding-right: 9.5px; + overflow-y: hidden; + padding-bottom: 9.5px; + } + + .hl pre a::before { + content: counter(line-numbering); + counter-increment: line-numbering; + padding-right: 0.7em; /* space after numbers */ + margin-top: 4.5em; + width: 60px; + text-align: right; + opacity: 0.7; + display: inline-block; + color: #aaa; + background: #eee; + margin-right: 10px; + border-right: 1px solid #ccc; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + + .hl pre a:first-of-type::before { + padding-top: 9.5px; + } + + .hl pre a:last-of-type::before { + padding-bottom: 9.5px; + } + + .hl pre a:only-of-type::before { + padding: 9.5px; + } + + .hl pre a { + display: inline-block; + height: 4.5em; + margin: -4.5em 0 0; + } + .codesum h3 { + margin-top: 2px; + margin-bottom: 2px; + } + + h1.inline, h2.inline, h3.inline { + display: inline; + } + + .depwarn { + float: right; + } + + .anchor { + position: absolute; + margin: -4.5em; + visibility:hidden; + } + + .alert { + margin-left: 5px; + margin-right: 5px; + margin-top: 5px; + } + + div.toc { + font-size: 14.73px; + padding-left: 0px; + padding-right: 0px; + } + + div.toc a { + padding-left: 20px; + padding-right: 20px; + margin-right: 15px; + padding-top: 5px; + padding-bottom: 5px; + } + + div.toc li { + font-size: 0.95em; + padding-left: 15px; + } + + div.toc li.title { + font-size: 1em; + } + + div.toc hr { + margin-top: 12px; + margin-bottom: 10px; + } + + .in-well { + padding: 0px 0px; + margin-bottom: 0px; + float:right; + } + + table tr.submod>td { + border-top: none; + font-size: 13.5px; + } + + .graph-help { + font-size: 10px; + } + + .depgraph { + width: 100%; + max-width: 1140px; + } + + #sidebar a { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .highlighttable { + width: auto; + table-layout: fixed; + } + + ul.checklist { + list-style-type: none; + } + + ul.checklist input[type="checkbox"] { + margin-left: -20.8px; + margin-right: 4.55px; + } + + .gitter-chat-embed { + z-index: 100000; + } + +table.graph { + text-align: center; +} + + +.graph td.root { + border:2px solid black; + padding:10px; +} + +.graph td.triangle-right:after { + content: ""; + display: block; + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; + border-left: 7px solid black; +} + +.graph td.triangle-left:after { + content: ""; + display: block; + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; + border-right: 7px solid black; +} + +.graph td.node { + color: white; + padding:10px; + border-style: solid; + border-width: 3px 0px 3px 0px; + border-color: white; +} + +.graph td.node a{ + color: white; +} + +.graph td.dashedText, +.graph td.solidText { + padding: 0px 10px 0px 10px; + min-width: 40px; + color: black; + border-color: black; +} + +.graph td.dashedText { + border-bottom-style: dashed; +} + +.graph td.solidText { + border-bottom-style: solid; +} + +.graph td.dashedBottom, +.graph td.dashedTop, +.graph td.solidTop, +.graph td.solidBottom { + min-width: 40px; + color: transparent; + border-color: black; +} + +.graph td.dashedBottom { + border-bottom-style: dashed; +} + +.graph td.dashedTop { + border-top-style: dashed; +} + +.graph td.solidBottom { + border-bottom-style: solid; +} + +.graph td.solidTop { + border-top-style: solid; +} diff --git a/Documentation/html/Documentation/Api/Fortran/media/css/pygments.css b/Documentation/html/Documentation/Api/Fortran/media/css/pygments.css new file mode 100644 index 0000000000000000000000000000000000000000..4a3a8d85707d7cbb6f43971074a269de9d8f4d68 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/css/pygments.css @@ -0,0 +1,61 @@ +pre .hll { background-color: #ffffcc } +pre .c { color: #408080; font-style: italic } /* Comment */ +pre .err { border: 1px solid #FF0000 } /* Error */ +pre .k { color: #008000; font-weight: bold } /* Keyword */ +pre .o { color: #666666 } /* Operator */ +pre .cm { color: #408080; font-style: italic } /* Comment.Multiline */ +pre .cp { color: #BC7A00 } /* Comment.Preproc */ +pre .c1 { color: #408080; font-style: italic } /* Comment.Single */ +pre .cs { color: #408080; font-style: italic } /* Comment.Special */ +pre .gd { color: #A00000 } /* Generic.Deleted */ +pre .ge { font-style: italic } /* Generic.Emph */ +pre .gr { color: #FF0000 } /* Generic.Error */ +pre .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +pre .gi { color: #00A000 } /* Generic.Inserted */ +pre .go { color: #888888 } /* Generic.Output */ +pre .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +pre .gs { font-weight: bold } /* Generic.Strong */ +pre .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +pre .gt { color: #0044DD } /* Generic.Traceback */ +pre .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +pre .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +pre .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +pre .kp { color: #008000 } /* Keyword.Pseudo */ +pre .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +pre .kt { color: #B00040 } /* Keyword.Type */ +pre .m { color: #666666 } /* Literal.Number */ +pre .s { color: #BA2121 } /* Literal.String */ +pre .na { color: #7D9029 } /* Name.Attribute */ +pre .nb { color: #008000 } /* Name.Builtin */ +pre .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +pre .no { color: #880000 } /* Name.Constant */ +pre .nd { color: #AA22FF } /* Name.Decorator */ +pre .ni { color: #999999; font-weight: bold } /* Name.Entity */ +pre .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ +pre .nf { color: #0000FF } /* Name.Function */ +pre .nl { color: #A0A000 } /* Name.Label */ +pre .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +pre .nt { color: #008000; font-weight: bold } /* Name.Tag */ +pre .nv { color: #19177C } /* Name.Variable */ +pre .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +pre .w { color: #bbbbbb } /* Text.Whitespace */ +pre .mf { color: #666666 } /* Literal.Number.Float */ +pre .mh { color: #666666 } /* Literal.Number.Hex */ +pre .mi { color: #666666 } /* Literal.Number.Integer */ +pre .mo { color: #666666 } /* Literal.Number.Oct */ +pre .sb { color: #BA2121 } /* Literal.String.Backtick */ +pre .sc { color: #BA2121 } /* Literal.String.Char */ +pre .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +pre .s2 { color: #BA2121 } /* Literal.String.Double */ +pre .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ +pre .sh { color: #BA2121 } /* Literal.String.Heredoc */ +pre .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ +pre .sx { color: #008000 } /* Literal.String.Other */ +pre .sr { color: #BB6688 } /* Literal.String.Regex */ +pre .s1 { color: #BA2121 } /* Literal.String.Single */ +pre .ss { color: #19177C } /* Literal.String.Symbol */ +pre .bp { color: #008000 } /* Name.Builtin.Pseudo */ +pre .vc { color: #19177C } /* Name.Variable.Class */ +pre .vg { color: #19177C } /* Name.Variable.Global */ +pre .vi { color: #19177C } /* Name.Variable.Instance */ +pre .il { color: #666666 } /* Literal.Number.Integer.Long */ diff --git a/Documentation/html/Documentation/Api/Fortran/media/fonts/fontawesome-webfont.eot b/Documentation/html/Documentation/Api/Fortran/media/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..84677bc0c5f37f1fac9d87548c4554b5c91717cf Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/media/fonts/fontawesome-webfont.eot differ diff --git a/Documentation/html/Documentation/Api/Fortran/media/fonts/fontawesome-webfont.svg b/Documentation/html/Documentation/Api/Fortran/media/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000000000000000000000000000000000000..d907b25ae60ec7e3d32e4027aa6e6b7595de97af --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/fonts/fontawesome-webfont.svg @@ -0,0 +1,520 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="fontawesomeregular" horiz-adv-x="1536" > +<font-face units-per-em="1792" ascent="1536" descent="-256" /> +<missing-glyph horiz-adv-x="448" /> +<glyph unicode=" " horiz-adv-x="448" /> +<glyph unicode="	" horiz-adv-x="448" /> +<glyph unicode=" " horiz-adv-x="448" /> +<glyph unicode="¨" horiz-adv-x="1792" /> +<glyph unicode="©" horiz-adv-x="1792" /> +<glyph unicode="®" horiz-adv-x="1792" /> +<glyph unicode="´" horiz-adv-x="1792" /> +<glyph unicode="Æ" horiz-adv-x="1792" /> +<glyph unicode="Ø" horiz-adv-x="1792" /> +<glyph unicode=" " horiz-adv-x="768" /> +<glyph unicode=" " horiz-adv-x="1537" /> +<glyph unicode=" " horiz-adv-x="768" /> +<glyph unicode=" " horiz-adv-x="1537" /> +<glyph unicode=" " horiz-adv-x="512" /> +<glyph unicode=" " horiz-adv-x="384" /> +<glyph unicode=" " horiz-adv-x="256" /> +<glyph unicode=" " horiz-adv-x="256" /> +<glyph unicode=" " horiz-adv-x="192" /> +<glyph unicode=" " horiz-adv-x="307" /> +<glyph unicode=" " horiz-adv-x="85" /> +<glyph unicode=" " horiz-adv-x="307" /> +<glyph unicode=" " horiz-adv-x="384" /> +<glyph unicode="™" horiz-adv-x="1792" /> +<glyph unicode="∞" horiz-adv-x="1792" /> +<glyph unicode="≠" horiz-adv-x="1792" /> +<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" /> +<glyph unicode="" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " /> +<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z " /> +<glyph unicode="" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" /> +<glyph unicode="" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" /> +<glyph unicode="" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" /> +<glyph unicode="" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" /> +<glyph unicode="" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" /> +<glyph unicode="" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" /> +<glyph unicode="" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" /> +<glyph unicode="" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> +<glyph unicode="" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57 q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -4 -0.5 -13t-0.5 -13q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5 q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" /> +<glyph unicode="" horiz-adv-x="1408" d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142 q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5 t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68.5 -0.5t67.5 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5 t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" /> +<glyph unicode="" horiz-adv-x="1024" d="M0 -126l17 85q6 2 81.5 21.5t111.5 37.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5 q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2 t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5 q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" /> +<glyph unicode="" d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1 t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5 t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49 t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" /> +<glyph unicode="" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> +<glyph unicode="" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" /> +<glyph unicode="" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" /> +<glyph unicode="" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" /> +<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" /> +<glyph unicode="" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" /> +<glyph unicode="" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" /> +<glyph unicode="" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" /> +<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" /> +<glyph unicode="" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" /> +<glyph unicode="" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" /> +<glyph unicode="" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" /> +<glyph unicode="" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" /> +<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" /> +<glyph unicode="" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" /> +<glyph unicode="" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " /> +<glyph unicode="" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" /> +<glyph unicode="" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" /> +<glyph unicode="" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " /> +<glyph unicode="" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="2048" d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" /> +<glyph unicode="" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1536 160q0 -119 -84.5 -203.5t-203.5 -84.5h-192v608h203l30 224h-233v143q0 54 28 83t96 29l132 1v207q-96 9 -180 9q-136 0 -218 -80.5t-82 -225.5v-166h-224v-224h224v-608h-544q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5v-960z" /> +<glyph unicode="" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" /> +<glyph unicode="" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" /> +<glyph unicode="" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" /> +<glyph unicode="" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" /> +<glyph unicode="" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" /> +<glyph unicode="" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" /> +<glyph unicode="" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" /> +<glyph unicode="" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" /> +<glyph unicode="" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> +<glyph unicode="" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" /> +<glyph unicode="" horiz-adv-x="1024" d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" /> +<glyph unicode="" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" /> +<glyph unicode="" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" /> +<glyph unicode="" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5 t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" /> +<glyph unicode="" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" /> +<glyph unicode="" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" /> +<glyph unicode="" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" /> +<glyph unicode="" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" /> +<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" /> +<glyph unicode="" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" /> +<glyph unicode="" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " /> +<glyph unicode="" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " /> +<glyph unicode="" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" /> +<glyph unicode="" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" /> +<glyph unicode="" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" /> +<glyph unicode="" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" /> +<glyph unicode="" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" /> +<glyph unicode="" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" /> +<glyph unicode="" d="M829 318q0 -76 -58.5 -112.5t-139.5 -36.5q-41 0 -80.5 9.5t-75.5 28.5t-58 53t-22 78q0 46 25 80t65.5 51.5t82 25t84.5 7.5q20 0 31 -2q2 -1 23 -16.5t26 -19t23 -18t24.5 -22t19 -22.5t17 -26t9 -26.5t4.5 -31.5zM755 863q0 -60 -33 -99.5t-92 -39.5q-53 0 -93 42.5 t-57.5 96.5t-17.5 106q0 61 32 104t92 43q53 0 93.5 -45t58 -101t17.5 -107zM861 1120l88 64h-265q-85 0 -161 -32t-127.5 -98t-51.5 -153q0 -93 64.5 -154.5t158.5 -61.5q22 0 43 3q-13 -29 -13 -54q0 -44 40 -94q-175 -12 -257 -63q-47 -29 -75.5 -73t-28.5 -95 q0 -43 18.5 -77.5t48.5 -56.5t69 -37t77.5 -21t76.5 -6q60 0 120.5 15.5t113.5 46t86 82.5t33 117q0 49 -20 89.5t-49 66.5t-58 47.5t-49 44t-20 44.5t15.5 42.5t37.5 39.5t44 42t37.5 59.5t15.5 82.5q0 60 -22.5 99.5t-72.5 90.5h83zM1152 672h128v64h-128v128h-64v-128 h-128v-64h128v-160h64v160zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M735 740q0 -36 32 -70.5t77.5 -68t90.5 -73.5t77 -104t32 -142q0 -90 -48 -173q-72 -122 -211 -179.5t-298 -57.5q-132 0 -246.5 41.5t-171.5 137.5q-37 60 -37 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 42 -47.5 74t-15.5 73q0 36 21 85q-46 -4 -68 -4 q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q77 66 182.5 98t217.5 32h418l-138 -88h-131q74 -63 112 -133t38 -160q0 -72 -24.5 -129.5t-59 -93t-69.5 -65t-59.5 -61.5t-24.5 -66zM589 836q38 0 78 16.5t66 43.5q53 57 53 159q0 58 -17 125t-48.5 129.5 t-84.5 103.5t-117 41q-42 0 -82.5 -19.5t-65.5 -52.5q-47 -59 -47 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26zM591 -37q58 0 111.5 13t99 39t73 73t27.5 109q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -48 2 q-53 0 -105 -7t-107.5 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -70 35 -123.5t91.5 -83t119 -44t127.5 -14.5zM1401 839h213v-108h-213v-219h-105v219h-212v108h212v217h105v-217z" /> +<glyph unicode="" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" /> +<glyph unicode="" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" /> +<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" /> +<glyph unicode="" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" /> +<glyph unicode="" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" /> +<glyph unicode="" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" /> +<glyph unicode="" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5 t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704 q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" /> +<glyph unicode="" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" /> +<glyph unicode="" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" /> +<glyph unicode="" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> +<glyph unicode="" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" /> +<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" /> +<glyph unicode="" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" /> +<glyph unicode="" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> +<glyph unicode="" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> +<glyph unicode="" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" /> +<glyph unicode="" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" /> +<glyph unicode="" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" /> +<glyph unicode="" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" /> +<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" /> +<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" /> +<glyph unicode="" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" /> +<glyph unicode="" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" /> +<glyph unicode="" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" /> +<glyph unicode="" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" /> +<glyph unicode="" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" /> +<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> +<glyph unicode="" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" /> +<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" /> +<glyph unicode="" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" /> +<glyph unicode="" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" /> +<glyph unicode="" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" /> +<glyph unicode="" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" /> +<glyph unicode="" d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" /> +<glyph unicode="" d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" /> +<glyph unicode="" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" /> +<glyph unicode="" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" /> +<glyph unicode="" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" /> +<glyph unicode="" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" /> +<glyph unicode="" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" /> +<glyph unicode="" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" /> +<glyph unicode="" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" /> +<glyph unicode="" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" /> +<glyph unicode="" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" /> +<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" /> +<glyph unicode="" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" /> +<glyph unicode="" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14 q78 2 134 29z" /> +<glyph unicode="" d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" /> +<glyph unicode="" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" /> +<glyph unicode="" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" /> +<glyph unicode="" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" /> +<glyph unicode="" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" /> +<glyph unicode="" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324 l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" /> +<glyph unicode="" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> +<glyph unicode="" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" /> +<glyph unicode="" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" /> +<glyph unicode="" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " /> +<glyph unicode="" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" /> +<glyph unicode="" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="2176" d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40 t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29 q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9 q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102 t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" /> +<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69 q-46 32 -141.5 92.5t-142.5 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13 t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5 t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21 t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286 t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273 t273 -182.5t331.5 -68z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" /> +<glyph unicode="" horiz-adv-x="2048" d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" /> +<glyph unicode="" horiz-adv-x="2304" d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" /> +<glyph unicode="" d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" /> +<glyph unicode="" horiz-adv-x="1280" d="M981 197q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -49 2q-53 0 -104.5 -7t-107 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -56 23.5 -102t61 -75.5t87 -50t100 -29t101.5 -8.5q58 0 111.5 13t99 39t73 73t27.5 109zM864 1055 q0 59 -17 125.5t-48 129t-84 103.5t-117 41q-42 0 -82.5 -19.5t-66.5 -52.5q-46 -59 -46 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26q37 0 77.5 16.5t65.5 43.5q53 56 53 159zM752 1536h417l-137 -88h-132q75 -63 113 -133t38 -160q0 -72 -24.5 -129.5 t-59.5 -93t-69.5 -65t-59 -61.5t-24.5 -66q0 -36 32 -70.5t77 -68t90.5 -73.5t77.5 -104t32 -142q0 -91 -49 -173q-71 -122 -209.5 -179.5t-298.5 -57.5q-132 0 -246.5 41.5t-172.5 137.5q-36 59 -36 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 41 -47.5 73.5 t-15.5 73.5q0 40 21 85q-46 -4 -68 -4q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q76 66 182 98t218 32z" /> +<glyph unicode="" horiz-adv-x="1984" d="M831 572q0 -56 -40.5 -96t-96.5 -40q-57 0 -98 40t-41 96q0 57 41.5 98t97.5 41t96.5 -41t40.5 -98zM1292 711q56 0 96.5 -41t40.5 -98q0 -56 -40.5 -96t-96.5 -40q-57 0 -98 40t-41 96q0 57 41.5 98t97.5 41zM1984 722q0 -62 -31 -114t-83 -82q5 -33 5 -61 q0 -121 -68.5 -230.5t-197.5 -193.5q-125 -82 -285.5 -125.5t-335.5 -43.5q-176 0 -336.5 43.5t-284.5 125.5q-129 84 -197.5 193t-68.5 231q0 29 5 66q-48 31 -77 81.5t-29 109.5q0 94 66 160t160 66q83 0 148 -55q248 158 592 164l134 423q4 14 17.5 21.5t28.5 4.5 l347 -82q22 50 68.5 81t102.5 31q77 0 131.5 -54.5t54.5 -131.5t-54.5 -132t-131.5 -55q-76 0 -130.5 54t-55.5 131l-315 74l-116 -366q327 -14 560 -166q64 58 151 58q94 0 160 -66t66 -160zM1664 1459q-45 0 -77 -32t-32 -77t32 -77t77 -32t77 32t32 77t-32 77t-77 32z M77 722q0 -67 51 -111q49 131 180 235q-36 25 -82 25q-62 0 -105.5 -43.5t-43.5 -105.5zM1567 105q112 73 171.5 166t59.5 194t-59.5 193.5t-171.5 165.5q-116 75 -265.5 115.5t-313.5 40.5t-313.5 -40.5t-265.5 -115.5q-112 -73 -171.5 -165.5t-59.5 -193.5t59.5 -194 t171.5 -166q116 -75 265.5 -115.5t313.5 -40.5t313.5 40.5t265.5 115.5zM1850 605q57 46 57 117q0 62 -43.5 105.5t-105.5 43.5q-49 0 -86 -28q131 -105 178 -238zM1258 237q11 11 27 11t27 -11t11 -27.5t-11 -27.5q-99 -99 -319 -99h-2q-220 0 -319 99q-11 11 -11 27.5 t11 27.5t27 11t27 -11q77 -77 265 -77h2q188 0 265 77z" /> +<glyph unicode="" d="M950 393q7 7 17.5 7t17.5 -7t7 -18t-7 -18q-65 -64 -208 -64h-1h-1q-143 0 -207 64q-8 7 -8 18t8 18q7 7 17.5 7t17.5 -7q49 -51 172 -51h1h1q122 0 173 51zM671 613q0 -37 -26 -64t-63 -27t-63 27t-26 64t26 63t63 26t63 -26t26 -63zM1214 1049q-29 0 -50 21t-21 50 q0 30 21 51t50 21q30 0 51 -21t21 -51q0 -29 -21 -50t-51 -21zM1216 1408q132 0 226 -94t94 -227v-894q0 -133 -94 -227t-226 -94h-896q-132 0 -226 94t-94 227v894q0 133 94 227t226 94h896zM1321 596q35 14 57 45.5t22 70.5q0 51 -36 87.5t-87 36.5q-60 0 -98 -48 q-151 107 -375 115l83 265l206 -49q1 -50 36.5 -85t84.5 -35q50 0 86 35.5t36 85.5t-36 86t-86 36q-36 0 -66 -20.5t-45 -53.5l-227 54q-9 2 -17.5 -2.5t-11.5 -14.5l-95 -302q-224 -4 -381 -113q-36 43 -93 43q-51 0 -87 -36.5t-36 -87.5q0 -37 19.5 -67.5t52.5 -45.5 q-7 -25 -7 -54q0 -98 74 -181.5t201.5 -132t278.5 -48.5q150 0 277.5 48.5t201.5 132t74 181.5q0 27 -6 54zM971 702q37 0 63 -26t26 -63t-26 -64t-63 -27t-63 27t-26 64t26 63t63 26z" /> +<glyph unicode="" d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328 v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" /> +<glyph unicode="" d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123 v-369h123z" /> +<glyph unicode="" d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101 v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="2038" d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14 q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24 q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33 q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5 t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43 q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5 t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13 t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" /> +<glyph unicode="" d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10 q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14 q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14 t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44 q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" /> +<glyph unicode="" d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5 t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5 q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126 t135.5 51q85 0 145 -60.5t60 -145.5z" /> +<glyph unicode="" d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5 q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28 q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11 q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q106 35 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5 q20 0 20 -21v-418z" /> +<glyph unicode="" horiz-adv-x="1792" d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48 l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23 t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128 q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128 q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" /> +<glyph unicode="" d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9 t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9 t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9 t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68t68 28t68 -28l228 -228h368l228 228q28 28 68 28t68 -28t28 -68t-28 -68zM864 1152q0 -93 -65.5 -158.5 t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5 q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819 q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5 t100.5 134t141.5 55.5z" /> +<glyph unicode="" horiz-adv-x="768" d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z " /> +<glyph unicode="" horiz-adv-x="2304" d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67 t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-5 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70 v-400l434 -186q36 -16 57 -48t21 -70z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658 q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204 q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" /> +<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5 t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217 t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5 q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89 q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" /> +<glyph unicode="" d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5 q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5 q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z " /> +<glyph unicode="" horiz-adv-x="1792" d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188 l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5 t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1 q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" /> +<glyph unicode="" horiz-adv-x="2048" d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384 q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5 l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5 t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" /> +<glyph unicode="" d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384 q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" /> +<glyph unicode="" d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64 q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37 q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1397 1408q58 0 98.5 -40.5t40.5 -98.5v-1258q0 -58 -40.5 -98.5t-98.5 -40.5h-1258q-58 0 -98.5 40.5t-40.5 98.5v1258q0 58 40.5 98.5t98.5 40.5h1258zM1465 11v1258q0 28 -20 48t-48 20h-1258q-28 0 -48 -20t-20 -48v-1258q0 -28 20 -48t48 -20h1258q28 0 48 20t20 48 zM694 749l188 -387l533 145v-496q0 -7 -5.5 -12.5t-12.5 -5.5h-1258q-7 0 -12.5 5.5t-5.5 12.5v141l711 195l-212 439q4 1 12 2.5t12 1.5q170 32 303.5 21.5t221 -46t143.5 -94.5q27 -28 -25 -42q-64 -16 -256 -62l-97 198q-111 7 -240 -16zM1397 1287q7 0 12.5 -5.5 t5.5 -12.5v-428q-85 30 -188 52q-294 64 -645 12l-18 -3l-65 134h-233l85 -190q-132 -51 -230 -137v560q0 7 5.5 12.5t12.5 5.5h1258zM286 387q-14 -3 -26 4.5t-14 21.5q-24 203 166 305l129 -270z" /> +<glyph unicode="" horiz-adv-x="2304" d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11 q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245 q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785 l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242 q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236q0 -11 -8 -19 t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786q-13 2 -22 11t-9 22v899 q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" /> +<glyph unicode="" d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127 t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5 t-103 128v128q0 69 103 128t280 93.5t385 34.5z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197 q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8 q-1 1 -1 2t-0.5 1.5t-0.5 1.5q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4l-3 21q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5t-3.5 -21.5l-4 -21h-4l-2 21 q-2 26 -7 46l-99 438h90v107h-300z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107 h-290v-107h68l189 -272l-194 -283h-68z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" /> +<glyph unicode="" d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400 v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79 q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5 q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243 l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" /> +<glyph unicode="" d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406 q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" /> +<glyph unicode="" horiz-adv-x="1792" d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97q14 -16 29.5 -34t34.5 -40t29 -34q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5 t-85 -189.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348q0 222 101 414.5t276.5 317t390.5 155.5v-260q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 q0 230 -145.5 406t-366.5 221v260q215 -31 390.5 -155.5t276.5 -317t101 -414.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" /> +<glyph unicode="" horiz-adv-x="1792" d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> +<glyph unicode="" d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58 q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47 q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171 v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" /> +<glyph unicode="" d="M825 547l343 588h-150q-21 -39 -63.5 -118.5t-68 -128.5t-59.5 -118.5t-60 -128.5h-3q-21 48 -44.5 97t-52 105.5t-46.5 92t-54 104.5t-49 95h-150l323 -589v-435h134v436zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5 t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153 t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5 q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20 t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5 t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" /> +<glyph unicode="" horiz-adv-x="2048" d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25 q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5 q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109 q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137 l863 639l-478 -797z" /> +<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23 t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15 t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2 t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160 q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5 q0 -26 -12 -48t-36 -22z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179 q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" /> +<glyph unicode="" d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256 q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" /> +<glyph unicode="" d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5 t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" /> +<glyph unicode="" d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5 t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5 t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91 q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9 t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323 l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" /> +<glyph unicode="" horiz-adv-x="1792" d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23 zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5 t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" /> +<glyph unicode="" horiz-adv-x="1792" d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1755 1083q37 -37 37 -90t-37 -91l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234l401 400 q38 37 91 37t90 -37z" /> +<glyph unicode="" horiz-adv-x="1792" d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5 t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q3 -2 11 -7 t11 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" /> +<glyph unicode="" d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36 q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q70 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5 t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87 q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19 t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121 q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38 h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1112 1090q0 159 -237 159h-70q-32 0 -59.5 -21.5t-34.5 -52.5l-63 -276q-2 -5 -2 -16q0 -24 17 -39.5t41 -15.5h53q69 0 128.5 13t112.5 41t83.5 81.5t30.5 126.5zM1716 938q0 -265 -220 -428q-219 -161 -612 -161h-61q-32 0 -59 -21.5t-34 -52.5l-73 -316 q-8 -36 -40.5 -61.5t-69.5 -25.5h-213q-31 0 -53 20t-22 51q0 10 13 65h151q34 0 64 23.5t38 56.5l73 316q8 33 37.5 57t63.5 24h61q390 0 607 160t217 421q0 129 -51 207q183 -92 183 -335zM1533 1123q0 -264 -221 -428q-218 -161 -612 -161h-60q-32 0 -59.5 -22t-34.5 -53 l-73 -315q-8 -36 -40 -61.5t-69 -25.5h-214q-31 0 -52.5 19.5t-21.5 51.5q0 8 2 20l300 1301q8 36 40.5 61.5t69.5 25.5h444q68 0 125 -4t120.5 -15t113.5 -30t96.5 -50.5t77.5 -74t49.5 -103.5t18.5 -136z" /> +<glyph unicode="" horiz-adv-x="1792" d="M602 949q19 -61 31 -123.5t17 -141.5t-14 -159t-62 -145q-21 81 -67 157t-95.5 127t-99 90.5t-78.5 57.5t-33 19q-62 34 -81.5 100t14.5 128t101 81.5t129 -14.5q138 -83 238 -177zM927 1236q11 -25 20.5 -46t36.5 -100.5t42.5 -150.5t25.5 -179.5t0 -205.5t-47.5 -209.5 t-105.5 -208.5q-51 -72 -138 -72q-54 0 -98 31q-57 40 -69 109t28 127q60 85 81 195t13 199.5t-32 180.5t-39 128t-22 52q-31 63 -8.5 129.5t85.5 97.5q34 17 75 17q47 0 88.5 -25t63.5 -69zM1248 567q-17 -160 -72 -311q-17 131 -63 246q25 174 -5 361q-27 178 -94 342 q114 -90 212 -211q9 -37 15 -80q26 -179 7 -347zM1520 1440q9 -17 23.5 -49.5t43.5 -117.5t50.5 -178t34 -227.5t5 -269t-47 -300t-112.5 -323.5q-22 -48 -66 -75.5t-95 -27.5q-39 0 -74 16q-67 31 -92.5 100t4.5 136q58 126 90 257.5t37.5 239.5t-3.5 213.5t-26.5 180.5 t-38.5 138.5t-32.5 90t-15.5 32.5q-34 65 -11.5 135.5t87.5 104.5q37 20 81 20q49 0 91.5 -25.5t66.5 -70.5z" /> +<glyph unicode="" horiz-adv-x="2304" d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27 q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128 q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="2304" d="M671 603h-13q-47 0 -47 -32q0 -22 20 -22q17 0 28 15t12 39zM1066 639h62v3q1 4 0.5 6.5t-1 7t-2 8t-4.5 6.5t-7.5 5t-11.5 2q-28 0 -36 -38zM1606 603h-12q-48 0 -48 -32q0 -22 20 -22q17 0 28 15t12 39zM1925 629q0 41 -30 41q-19 0 -31 -20t-12 -51q0 -42 28 -42 q20 0 32.5 20t12.5 52zM480 770h87l-44 -262h-56l32 201l-71 -201h-39l-4 200l-34 -200h-53l44 262h81l2 -163zM733 663q0 -6 -4 -42q-16 -101 -17 -113h-47l1 22q-20 -26 -58 -26q-23 0 -37.5 16t-14.5 42q0 39 26 60.5t73 21.5q14 0 23 -1q0 3 0.5 5.5t1 4.5t0.5 3 q0 20 -36 20q-29 0 -59 -10q0 4 7 48q38 11 67 11q74 0 74 -62zM889 721l-8 -49q-22 3 -41 3q-27 0 -27 -17q0 -8 4.5 -12t21.5 -11q40 -19 40 -60q0 -72 -87 -71q-34 0 -58 6q0 2 7 49q29 -8 51 -8q32 0 32 19q0 7 -4.5 11.5t-21.5 12.5q-43 20 -43 59q0 72 84 72 q30 0 50 -4zM977 721h28l-7 -52h-29q-2 -17 -6.5 -40.5t-7 -38.5t-2.5 -18q0 -16 19 -16q8 0 16 2l-8 -47q-21 -7 -40 -7q-43 0 -45 47q0 12 8 56q3 20 25 146h55zM1180 648q0 -23 -7 -52h-111q-3 -22 10 -33t38 -11q30 0 58 14l-9 -54q-30 -8 -57 -8q-95 0 -95 95 q0 55 27.5 90.5t69.5 35.5q35 0 55.5 -21t20.5 -56zM1319 722q-13 -23 -22 -62q-22 2 -31 -24t-25 -128h-56l3 14q22 130 29 199h51l-3 -33q14 21 25.5 29.5t28.5 4.5zM1506 763l-9 -57q-28 14 -50 14q-31 0 -51 -27.5t-20 -70.5q0 -30 13.5 -47t38.5 -17q21 0 48 13 l-10 -59q-28 -8 -50 -8q-45 0 -71.5 30.5t-26.5 82.5q0 70 35.5 114.5t91.5 44.5q26 0 61 -13zM1668 663q0 -18 -4 -42q-13 -79 -17 -113h-46l1 22q-20 -26 -59 -26q-23 0 -37 16t-14 42q0 39 25.5 60.5t72.5 21.5q15 0 23 -1q2 7 2 13q0 20 -36 20q-29 0 -59 -10q0 4 8 48 q38 11 67 11q73 0 73 -62zM1809 722q-14 -24 -21 -62q-23 2 -31.5 -23t-25.5 -129h-56l3 14q19 104 29 199h52q0 -11 -4 -33q15 21 26.5 29.5t27.5 4.5zM1950 770h56l-43 -262h-53l3 19q-23 -23 -52 -23q-31 0 -49.5 24t-18.5 64q0 53 27.5 92t64.5 39q31 0 53 -29z M2061 640q0 148 -72.5 273t-198 198t-273.5 73q-181 0 -328 -110q127 -116 171 -284h-50q-44 150 -158 253q-114 -103 -158 -253h-50q44 168 171 284q-147 110 -328 110q-148 0 -273.5 -73t-198 -198t-72.5 -273t72.5 -273t198 -198t273.5 -73q181 0 328 110 q-120 111 -165 264h50q46 -138 152 -233q106 95 152 233h50q-45 -153 -165 -264q147 -110 328 -110q148 0 273.5 73t198 198t72.5 273zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="2304" d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42 q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604 v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569 q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73 t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" /> +<glyph unicode="" horiz-adv-x="2304" d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260 l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279 v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040 q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168 q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5 t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21 h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5 t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" /> +<glyph unicode="" horiz-adv-x="2304" d="M322 689h-15q-19 0 -19 18q0 28 19 85q5 15 15 19.5t28 4.5q77 0 77 -49q0 -41 -30.5 -59.5t-74.5 -18.5zM664 528q-47 0 -47 29q0 62 123 62l3 -3q-5 -88 -79 -88zM1438 687h-15q-19 0 -19 19q0 28 19 85q5 15 14.5 19t28.5 4q77 0 77 -49q0 -41 -30.5 -59.5 t-74.5 -18.5zM1780 527q-47 0 -47 30q0 62 123 62l3 -3q-5 -89 -79 -89zM373 894h-128q-8 0 -14.5 -4t-8.5 -7.5t-7 -12.5q-3 -7 -45 -190t-42 -192q0 -7 5.5 -12.5t13.5 -5.5h62q25 0 32.5 34.5l15 69t32.5 34.5q47 0 87.5 7.5t80.5 24.5t63.5 52.5t23.5 84.5 q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM719 798q-38 0 -74 -6q-2 0 -8.5 -1t-9 -1.5l-7.5 -1.5t-7.5 -2t-6.5 -3t-6.5 -4t-5 -5t-4.5 -7t-4 -9q-9 -29 -9 -39t9 -10q5 0 21.5 5t19.5 6q30 8 58 8q74 0 74 -36q0 -11 -10 -14q-8 -2 -18 -3t-21.5 -1.5t-17.5 -1.5 q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5q0 -38 26 -59.5t64 -21.5q24 0 45.5 6.5t33 13t38.5 23.5q-3 -7 -3 -15t5.5 -13.5t12.5 -5.5h56q1 1 7 3.5t7.5 3.5t5 3.5t5 5.5t2.5 8l45 194q4 13 4 30q0 81 -145 81zM1247 793h-74q-22 0 -39 -23q-5 -7 -29.5 -51 t-46.5 -81.5t-26 -38.5l-5 4q0 77 -27 166q-1 5 -3.5 8.5t-6 6.5t-6.5 5t-8.5 3t-8.5 1.5t-9.5 1t-9 0.5h-10h-8.5q-38 0 -38 -21l1 -5q5 -53 25 -151t25 -143q2 -16 2 -24q0 -19 -30.5 -61.5t-30.5 -58.5q0 -13 40 -13q61 0 76 25l245 415q10 20 10 26q0 9 -8 9zM1489 892 h-129q-18 0 -29 -23q-6 -13 -46.5 -191.5t-40.5 -190.5q0 -20 43 -20h7.5h9h9t9.5 1t8.5 2t8.5 3t6.5 4.5t5.5 6t3 8.5l21 91q2 10 10.5 17t19.5 7q47 0 87.5 7t80.5 24.5t63.5 52.5t23.5 84q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM1835 798q-26 0 -74 -6 q-38 -6 -48 -16q-7 -8 -11 -19q-8 -24 -8 -39q0 -10 8 -10q1 0 41 12q30 8 58 8q74 0 74 -36q0 -12 -10 -14q-4 -1 -57 -7q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5t26 -58.5t64 -21.5q24 0 45 6t34 13t38 24q-3 -15 -3 -16q0 -5 2 -8.5t6.5 -5.5t8 -3.5 t10.5 -2t9.5 -0.5h9.5h8q42 0 48 25l45 194q3 15 3 31q0 81 -145 81zM2157 889h-55q-25 0 -33 -40q-10 -44 -36.5 -167t-42.5 -190v-5q0 -16 16 -18h1h57q10 0 18.5 6.5t10.5 16.5l83 374h-1l1 5q0 7 -5.5 12.5t-13.5 5.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048 q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="2304" d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109 q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118 q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151 q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31 q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5 l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5 l418 363q10 8 23.5 7t21.5 -11z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128 q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161 q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" /> +<glyph unicode="" horiz-adv-x="1408" d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704 q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167 q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5 t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53 q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24 t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61 t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10 t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5 t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11t55.5 -11t52.5 -38q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5t47 37.5 q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-35 0 -55.5 11t-52.5 38q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38t-58 27 t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448h256v448 h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51 t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" /> +<glyph unicode="" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" /> +<glyph unicode="" horiz-adv-x="1792" d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9 t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20 q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50 t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1 q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" /> +<glyph unicode="" d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73 q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110 q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5 t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5 t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5 t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" /> +<glyph unicode="" horiz-adv-x="2304" d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94 q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469 q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400 q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" /> +<glyph unicode="" d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5 h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327 q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5 q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" /> +<glyph unicode="" horiz-adv-x="1280" d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q18 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119 t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5 t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14 q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88 q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5 t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206 q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307 t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14 t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" /> +<glyph unicode="" d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5 t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55 q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410 q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/media/fonts/fontawesome-webfont.ttf b/Documentation/html/Documentation/Api/Fortran/media/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..96a3639cdde5e8ab459c6380e3b9524ee81641dc Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/media/fonts/fontawesome-webfont.ttf differ diff --git a/Documentation/html/Documentation/Api/Fortran/media/fonts/fontawesome-webfont.woff b/Documentation/html/Documentation/Api/Fortran/media/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..628b6a52a87e62c6f22426e17c01f6a303aa194e Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/media/fonts/fontawesome-webfont.woff differ diff --git a/Documentation/html/Documentation/Api/Fortran/media/fonts/glyphicons-halflings-regular.eot b/Documentation/html/Documentation/Api/Fortran/media/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/media/fonts/glyphicons-halflings-regular.eot differ diff --git a/Documentation/html/Documentation/Api/Fortran/media/fonts/glyphicons-halflings-regular.svg b/Documentation/html/Documentation/Api/Fortran/media/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000000000000000000000000000000000000..25691af8f193a67185a696cb6626ea6418ff6a20 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > +<font-face units-per-em="1200" ascent="960" descent="-240" /> +<missing-glyph horiz-adv-x="500" /> +<glyph /> +<glyph /> +<glyph unicode="
" /> +<glyph unicode=" " /> +<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" /> +<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" /> +<glyph unicode=" " /> +<glyph unicode=" " horiz-adv-x="652" /> +<glyph unicode=" " horiz-adv-x="1304" /> +<glyph unicode=" " horiz-adv-x="652" /> +<glyph unicode=" " horiz-adv-x="1304" /> +<glyph unicode=" " horiz-adv-x="434" /> +<glyph unicode=" " horiz-adv-x="326" /> +<glyph unicode=" " horiz-adv-x="217" /> +<glyph unicode=" " horiz-adv-x="217" /> +<glyph unicode=" " horiz-adv-x="163" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="72" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="326" /> +<glyph unicode="€" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" /> +<glyph unicode="−" d="M200 400h900v300h-900v-300z" /> +<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="☁" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" /> +<glyph unicode="✉" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" /> +<glyph unicode="✏" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" /> +<glyph unicode="" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" /> +<glyph unicode="" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" /> +<glyph unicode="" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" /> +<glyph unicode="" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" /> +<glyph unicode="" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" /> +<glyph unicode="" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" /> +<glyph unicode="" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" /> +<glyph unicode="" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" /> +<glyph unicode="" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" /> +<glyph unicode="" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" /> +<glyph unicode="" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" /> +<glyph unicode="" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" /> +<glyph unicode="" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" /> +<glyph unicode="" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" /> +<glyph unicode="" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" /> +<glyph unicode="" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" /> +<glyph unicode="" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" /> +<glyph unicode="" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" /> +<glyph unicode="" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" /> +<glyph unicode="" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" /> +<glyph unicode="" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" /> +<glyph unicode="" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" /> +<glyph unicode="" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" /> +<glyph unicode="" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" /> +<glyph unicode="" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" /> +<glyph unicode="" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" /> +<glyph unicode="" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" /> +<glyph unicode="" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" /> +<glyph unicode="" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" /> +<glyph unicode="" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" /> +<glyph unicode="" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" /> +<glyph unicode="" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" /> +<glyph unicode="" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" /> +<glyph unicode="" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" /> +<glyph unicode="" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" /> +<glyph unicode="" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" /> +<glyph unicode="" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" /> +<glyph unicode="" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" /> +<glyph unicode="" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" /> +<glyph unicode="" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" /> +<glyph unicode="" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" /> +<glyph unicode="" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " /> +<glyph unicode="" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" /> +<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" /> +<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" /> +<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" /> +<glyph unicode="" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" /> +<glyph unicode="" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" /> +<glyph unicode="" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " /> +<glyph unicode="" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" /> +<glyph unicode="" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" /> +<glyph unicode="" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" /> +<glyph unicode="" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" /> +<glyph unicode="" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" /> +<glyph unicode="" d="M200 0l900 550l-900 550v-1100z" /> +<glyph unicode="" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" /> +<glyph unicode="" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" /> +<glyph unicode="" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" /> +<glyph unicode="" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" /> +<glyph unicode="" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" /> +<glyph unicode="" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" /> +<glyph unicode="" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" /> +<glyph unicode="" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" /> +<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" /> +<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" /> +<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" /> +<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" /> +<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" /> +<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" /> +<glyph unicode="" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" /> +<glyph unicode="" d="M0 547l600 453v-300h600v-300h-600v-301z" /> +<glyph unicode="" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" /> +<glyph unicode="" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" /> +<glyph unicode="" d="M104 600h296v600h300v-600h298l-449 -600z" /> +<glyph unicode="" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" /> +<glyph unicode="" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" /> +<glyph unicode="" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" /> +<glyph unicode="" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" /> +<glyph unicode="" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" /> +<glyph unicode="" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" /> +<glyph unicode="" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" /> +<glyph unicode="" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" /> +<glyph unicode="" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" /> +<glyph unicode="" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" /> +<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" /> +<glyph unicode="" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" /> +<glyph unicode="" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" /> +<glyph unicode="" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" /> +<glyph unicode="" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" /> +<glyph unicode="" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" /> +<glyph unicode="" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" /> +<glyph unicode="" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" /> +<glyph unicode="" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" /> +<glyph unicode="" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" /> +<glyph unicode="" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" /> +<glyph unicode="" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" /> +<glyph unicode="" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" /> +<glyph unicode="" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" /> +<glyph unicode="" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" /> +<glyph unicode="" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" /> +<glyph unicode="" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" /> +<glyph unicode="" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" /> +<glyph unicode="" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" /> +<glyph unicode="" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" /> +<glyph unicode="" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" /> +<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" /> +<glyph unicode="" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" /> +<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" /> +<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" /> +<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" /> +<glyph unicode="" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" /> +<glyph unicode="" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" /> +<glyph unicode="" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" /> +<glyph unicode="" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" /> +<glyph unicode="" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" /> +<glyph unicode="" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" /> +<glyph unicode="" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" /> +<glyph unicode="" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" /> +<glyph unicode="" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" /> +<glyph unicode="" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" /> +<glyph unicode="" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" /> +<glyph unicode="" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" /> +<glyph unicode="" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" /> +<glyph unicode="" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" /> +<glyph unicode="" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" /> +<glyph unicode="" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" /> +<glyph unicode="" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" /> +<glyph unicode="" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" /> +<glyph unicode="" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " /> +<glyph unicode="" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" /> +<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" /> +<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" /> +<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" /> +<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" /> +<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" /> +<glyph unicode="" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" /> +<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" /> +<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" /> +<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" /> +<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" /> +<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" /> +<glyph unicode="" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" /> +<glyph unicode="" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" /> +<glyph unicode="" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" /> +<glyph unicode="" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" /> +<glyph unicode="" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" /> +<glyph unicode="" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" /> +<glyph unicode="" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" /> +<glyph unicode="" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" /> +<glyph unicode="" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" /> +<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" /> +<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" /> +<glyph unicode="" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" /> +<glyph unicode="" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" /> +<glyph unicode="" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" /> +<glyph unicode="" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" /> +<glyph unicode="" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/media/fonts/glyphicons-halflings-regular.ttf b/Documentation/html/Documentation/Api/Fortran/media/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..67fa00bf83801d2fa568546b982c80d27f6ef74e Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/media/fonts/glyphicons-halflings-regular.ttf differ diff --git a/Documentation/html/Documentation/Api/Fortran/media/fonts/glyphicons-halflings-regular.woff b/Documentation/html/Documentation/Api/Fortran/media/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..8c54182aa5d4d1ab3c9171976b615c1dcb1dc187 Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/media/fonts/glyphicons-halflings-regular.woff differ diff --git a/Documentation/html/Documentation/Api/Fortran/media/js/bootstrap.js b/Documentation/html/Documentation/Api/Fortran/media/js/bootstrap.js new file mode 100644 index 0000000000000000000000000000000000000000..b6ac8d9903bd002426887977dd457f19b8fa9bb9 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/js/bootstrap.js @@ -0,0 +1,2320 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} + ++function ($) { + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher') + } +}(jQuery); + +/* ======================================================================== + * Bootstrap: transition.js v3.3.1 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.3.1 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.VERSION = '3.3.1' + + Alert.TRANSITION_DURATION = 150 + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.closest('.alert') + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.alert + + $.fn.alert = Plugin + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.3.1 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.VERSION = '3.3.1' + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked') && this.$element.hasClass('active')) changed = false + else $parent.find('.active').removeClass('active') + } + if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + } + + if (changed) this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + var old = $.fn.button + + $.fn.button = Plugin + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + Plugin.call($btn, 'toggle') + e.preventDefault() + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.3.1 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) + } + + Carousel.VERSION = '3.3.1' + + Carousel.TRANSITION_DURATION = 600 + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true + } + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.getItemForDirection = function (direction, active) { + var delta = direction == 'prev' ? -1 : 1 + var activeIndex = this.getItemIndex(active) + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + if (!$next.length) { + if (!this.options.wrap) return + $next = this.$element.find('.item')[fallback]() + } + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.3.1 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.$trigger = $(this.options.trigger).filter('[href="#' + element.id + '"], [data-target="#' + element.id + '"]') + this.transitioning = null + + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + + if (this.options.toggle) this.toggle() + } + + Collapse.VERSION = '3.3.1' + + Collapse.TRANSITION_DURATION = 350 + + Collapse.DEFAULTS = { + toggle: true, + trigger: '[data-toggle="collapse"]' + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var activesData + var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + if (actives && actives.length) { + Plugin.call(actives, 'hide') + activesData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true) + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension]('') + this.transitioning = 0 + this.$element + .trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse in') + .attr('aria-expanded', false) + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false) + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .removeClass('collapsing') + .addClass('collapse') + .trigger('hidden.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element) + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + } + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in') + + $element.attr('aria-expanded', isOpen) + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + } + + function getTargetFromTrigger($trigger) { + var href + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + + return $(target) + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && option == 'show') options.toggle = false + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse + + $.fn.collapse = Plugin + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this) + + if (!$this.attr('data-target')) e.preventDefault() + + var $target = getTargetFromTrigger($this) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this }) + + Plugin.call($target, option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.1 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.1' + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus) + } + + var relatedTarget = { relatedTarget: this } + $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this + .trigger('focus') + .attr('aria-expanded', 'true') + + $parent + .toggleClass('open') + .trigger('shown.bs.dropdown', relatedTarget) + } + + return false + } + + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return + + var $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + if ((!isActive && e.which != 27) || (isActive && e.which == 27)) { + if (e.which == 27) $parent.find(toggle).trigger('focus') + return $this.trigger('click') + } + + var desc = ' li:not(.divider):visible a' + var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc) + + if (!$items.length) return + + var index = $items.index(e.target) + + if (e.which == 38 && index > 0) index-- // up + if (e.which == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items.eq(index).trigger('focus') + } + + function clearMenus(e) { + if (e && e.which === 3) return + $(backdrop).remove() + $(toggle).each(function () { + var $this = $(this) + var $parent = getParent($this) + var relatedTarget = { relatedTarget: this } + + if (!$parent.hasClass('open')) return + + $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this.attr('aria-expanded', 'false') + $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget) + }) + } + + function getParent($this) { + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = selector && $(selector) + + return $parent && $parent.length ? $parent : $this.parent() + } + + + // DROPDOWN PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.dropdown') + + if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.dropdown + + $.fn.dropdown = Plugin + $.fn.dropdown.Constructor = Dropdown + + + // DROPDOWN NO CONFLICT + // ==================== + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + + $(document) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) + .on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown) + .on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: modal.js v3.3.1 + * http://getbootstrap.com/javascript/#modals + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // MODAL CLASS DEFINITION + // ====================== + + var Modal = function (element, options) { + this.options = options + this.$body = $(document.body) + this.$element = $(element) + this.$backdrop = + this.isShown = null + this.scrollbarWidth = 0 + + if (this.options.remote) { + this.$element + .find('.modal-content') + .load(this.options.remote, $.proxy(function () { + this.$element.trigger('loaded.bs.modal') + }, this)) + } + } + + Modal.VERSION = '3.3.1' + + Modal.TRANSITION_DURATION = 300 + Modal.BACKDROP_TRANSITION_DURATION = 150 + + Modal.DEFAULTS = { + backdrop: true, + keyboard: true, + show: true + } + + Modal.prototype.toggle = function (_relatedTarget) { + return this.isShown ? this.hide() : this.show(_relatedTarget) + } + + Modal.prototype.show = function (_relatedTarget) { + var that = this + var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.checkScrollbar() + this.setScrollbar() + this.$body.addClass('modal-open') + + this.escape() + this.resize() + + this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(that.$body) // don't move modals dom position + } + + that.$element + .show() + .scrollTop(0) + + if (that.options.backdrop) that.adjustBackdrop() + that.adjustDialog() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element + .addClass('in') + .attr('aria-hidden', false) + + that.enforceFocus() + + var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) + + transition ? + that.$element.find('.modal-dialog') // wait for modal to slide in + .one('bsTransitionEnd', function () { + that.$element.trigger('focus').trigger(e) + }) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + that.$element.trigger('focus').trigger(e) + }) + } + + Modal.prototype.hide = function (e) { + if (e) e.preventDefault() + + e = $.Event('hide.bs.modal') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + this.resize() + + $(document).off('focusin.bs.modal') + + this.$element + .removeClass('in') + .attr('aria-hidden', true) + .off('click.dismiss.bs.modal') + + $.support.transition && this.$element.hasClass('fade') ? + this.$element + .one('bsTransitionEnd', $.proxy(this.hideModal, this)) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + this.hideModal() + } + + Modal.prototype.enforceFocus = function () { + $(document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { + this.$element.trigger('focus') + } + }, this)) + } + + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keydown.dismiss.bs.modal') + } + } + + Modal.prototype.resize = function () { + if (this.isShown) { + $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) + } else { + $(window).off('resize.bs.modal') + } + } + + Modal.prototype.hideModal = function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.$body.removeClass('modal-open') + that.resetAdjustments() + that.resetScrollbar() + that.$element.trigger('hidden.bs.modal') + }) + } + + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + Modal.prototype.backdrop = function (callback) { + var that = this + var animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') + .prependTo(this.$element) + .on('click.dismiss.bs.modal', $.proxy(function (e) { + if (e.target !== e.currentTarget) return + this.options.backdrop == 'static' + ? this.$element[0].focus.call(this.$element[0]) + : this.hide.call(this) + }, this)) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + if (!callback) return + + doAnimate ? + this.$backdrop + .one('bsTransitionEnd', callback) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + var callbackRemove = function () { + that.removeBackdrop() + callback && callback() + } + $.support.transition && this.$element.hasClass('fade') ? + this.$backdrop + .one('bsTransitionEnd', callbackRemove) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callbackRemove() + + } else if (callback) { + callback() + } + } + + // these following methods are used to handle overflowing modals + + Modal.prototype.handleUpdate = function () { + if (this.options.backdrop) this.adjustBackdrop() + this.adjustDialog() + } + + Modal.prototype.adjustBackdrop = function () { + this.$backdrop + .css('height', 0) + .css('height', this.$element[0].scrollHeight) + } + + Modal.prototype.adjustDialog = function () { + var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight + + this.$element.css({ + paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', + paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' + }) + } + + Modal.prototype.resetAdjustments = function () { + this.$element.css({ + paddingLeft: '', + paddingRight: '' + }) + } + + Modal.prototype.checkScrollbar = function () { + this.bodyIsOverflowing = document.body.scrollHeight > document.documentElement.clientHeight + this.scrollbarWidth = this.measureScrollbar() + } + + Modal.prototype.setScrollbar = function () { + var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) + if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) + } + + Modal.prototype.resetScrollbar = function () { + this.$body.css('padding-right', '') + } + + Modal.prototype.measureScrollbar = function () { // thx walsh + var scrollDiv = document.createElement('div') + scrollDiv.className = 'modal-scrollbar-measure' + this.$body.append(scrollDiv) + var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth + this.$body[0].removeChild(scrollDiv) + return scrollbarWidth + } + + + // MODAL PLUGIN DEFINITION + // ======================= + + function Plugin(option, _relatedTarget) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.modal') + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option](_relatedTarget) + else if (options.show) data.show(_relatedTarget) + }) + } + + var old = $.fn.modal + + $.fn.modal = Plugin + $.fn.modal.Constructor = Modal + + + // MODAL NO CONFLICT + // ================= + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + // MODAL DATA-API + // ============== + + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + var href = $this.attr('href') + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 + var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) + + if ($this.is('a')) e.preventDefault() + + $target.one('show.bs.modal', function (showEvent) { + if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown + $target.one('hidden.bs.modal', function () { + $this.is(':visible') && $this.trigger('focus') + }) + }) + Plugin.call($target, option, this) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tooltip.js v3.3.1 + * http://getbootstrap.com/javascript/#tooltip + * Inspired by the original jQuery.tipsy by Jason Frame + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TOOLTIP PUBLIC CLASS DEFINITION + // =============================== + + var Tooltip = function (element, options) { + this.type = + this.options = + this.enabled = + this.timeout = + this.hoverState = + this.$element = null + + this.init('tooltip', element, options) + } + + Tooltip.VERSION = '3.3.1' + + Tooltip.TRANSITION_DURATION = 150 + + Tooltip.DEFAULTS = { + animation: true, + placement: 'top', + selector: false, + template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + container: false, + viewport: { + selector: 'body', + padding: 0 + } + } + + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport) + + var triggers = this.options.trigger.split(' ') + + for (var i = triggers.length; i--;) { + var trigger = triggers[i] + + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' + var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' + + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + } + + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay, + hide: options.delay + } + } + + return options + } + + Tooltip.prototype.getDelegateOptions = function () { + var options = {} + var defaults = this.getDefaults() + + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }) + + return options + } + + Tooltip.prototype.enter = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (self && self.$tip && self.$tip.is(':visible')) { + self.hoverState = 'in' + return + } + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + clearTimeout(self.timeout) + + self.hoverState = 'in' + + if (!self.options.delay || !self.options.delay.show) return self.show() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + clearTimeout(self.timeout) + + self.hoverState = 'out' + + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.' + this.type) + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + + var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) + if (e.isDefaultPrevented() || !inDom) return + var that = this + + var $tip = this.tip() + + var tipId = this.getUID(this.type) + + this.setContent() + $tip.attr('id', tipId) + this.$element.attr('aria-describedby', tipId) + + if (this.options.animation) $tip.addClass('fade') + + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + var autoToken = /\s?auto?\s?/i + var autoPlace = autoToken.test(placement) + if (autoPlace) placement = placement.replace(autoToken, '') || 'top' + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + .addClass(placement) + .data('bs.' + this.type, this) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + + var pos = this.getPosition() + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (autoPlace) { + var orgPlacement = placement + var $container = this.options.container ? $(this.options.container) : this.$element.parent() + var containerDim = this.getPosition($container) + + placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' : + placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' : + placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' : + placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' : + placement + + $tip + .removeClass(orgPlacement) + .addClass(placement) + } + + var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) + + this.applyPlacement(calculatedOffset, placement) + + var complete = function () { + var prevHoverState = that.hoverState + that.$element.trigger('shown.bs.' + that.type) + that.hoverState = null + + if (prevHoverState == 'out') that.leave(that) + } + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + } + } + + Tooltip.prototype.applyPlacement = function (offset, placement) { + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight + + // manually read margins because getBoundingClientRect includes difference + var marginTop = parseInt($tip.css('margin-top'), 10) + var marginLeft = parseInt($tip.css('margin-left'), 10) + + // we must check for NaN for ie 8/9 + if (isNaN(marginTop)) marginTop = 0 + if (isNaN(marginLeft)) marginLeft = 0 + + offset.top = offset.top + marginTop + offset.left = offset.left + marginLeft + + // $.fn.offset doesn't round pixel values + // so we use setOffset directly with our own function B-0 + $.offset.setOffset($tip[0], $.extend({ + using: function (props) { + $tip.css({ + top: Math.round(props.top), + left: Math.round(props.left) + }) + } + }, offset), 0) + + $tip.addClass('in') + + // check to see if placing tip in new offset caused the tip to resize itself + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + offset.top = offset.top + height - actualHeight + } + + var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) + + if (delta.left) offset.left += delta.left + else offset.top += delta.top + + var isVertical = /top|bottom/.test(placement) + var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight + var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' + + $tip.offset(offset) + this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) + } + + Tooltip.prototype.replaceArrow = function (delta, dimension, isHorizontal) { + this.arrow() + .css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') + .css(isHorizontal ? 'top' : 'left', '') + } + + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + Tooltip.prototype.hide = function (callback) { + var that = this + var $tip = this.tip() + var e = $.Event('hide.bs.' + this.type) + + function complete() { + if (that.hoverState != 'in') $tip.detach() + that.$element + .removeAttr('aria-describedby') + .trigger('hidden.bs.' + that.type) + callback && callback() + } + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + $tip.removeClass('in') + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + + this.hoverState = null + + return this + } + + Tooltip.prototype.fixTitle = function () { + var $e = this.$element + if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + } + + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } + + Tooltip.prototype.getPosition = function ($element) { + $element = $element || this.$element + + var el = $element[0] + var isBody = el.tagName == 'BODY' + + var elRect = el.getBoundingClientRect() + if (elRect.width == null) { + // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 + elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) + } + var elOffset = isBody ? { top: 0, left: 0 } : $element.offset() + var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } + var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null + + return $.extend({}, elRect, scroll, outerDims, elOffset) + } + + Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { + return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : + /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } + + } + + Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { + var delta = { top: 0, left: 0 } + if (!this.$viewport) return delta + + var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 + var viewportDimensions = this.getPosition(this.$viewport) + + if (/right|left/.test(placement)) { + var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll + var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight + if (topEdgeOffset < viewportDimensions.top) { // top overflow + delta.top = viewportDimensions.top - topEdgeOffset + } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow + delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset + } + } else { + var leftEdgeOffset = pos.left - viewportPadding + var rightEdgeOffset = pos.left + viewportPadding + actualWidth + if (leftEdgeOffset < viewportDimensions.left) { // left overflow + delta.left = viewportDimensions.left - leftEdgeOffset + } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow + delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset + } + } + + return delta + } + + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + Tooltip.prototype.getUID = function (prefix) { + do prefix += ~~(Math.random() * 1000000) + while (document.getElementById(prefix)) + return prefix + } + + Tooltip.prototype.tip = function () { + return (this.$tip = this.$tip || $(this.options.template)) + } + + Tooltip.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) + } + + Tooltip.prototype.enable = function () { + this.enabled = true + } + + Tooltip.prototype.disable = function () { + this.enabled = false + } + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } + + Tooltip.prototype.toggle = function (e) { + var self = this + if (e) { + self = $(e.currentTarget).data('bs.' + this.type) + if (!self) { + self = new this.constructor(e.currentTarget, this.getDelegateOptions()) + $(e.currentTarget).data('bs.' + this.type, self) + } + } + + self.tip().hasClass('in') ? self.leave(self) : self.enter(self) + } + + Tooltip.prototype.destroy = function () { + var that = this + clearTimeout(this.timeout) + this.hide(function () { + that.$element.off('.' + that.type).removeData('bs.' + that.type) + }) + } + + + // TOOLTIP PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option + var selector = options && options.selector + + if (!data && option == 'destroy') return + if (selector) { + if (!data) $this.data('bs.tooltip', (data = {})) + if (!data[selector]) data[selector] = new Tooltip(this, options) + } else { + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) + } + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tooltip + + $.fn.tooltip = Plugin + $.fn.tooltip.Constructor = Tooltip + + + // TOOLTIP NO CONFLICT + // =================== + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: popover.js v3.3.1 + * http://getbootstrap.com/javascript/#popovers + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // POPOVER PUBLIC CLASS DEFINITION + // =============================== + + var Popover = function (element, options) { + this.init('popover', element, options) + } + + if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') + + Popover.VERSION = '3.3.1' + + Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { + placement: 'right', + trigger: 'click', + content: '', + template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' + }) + + + // NOTE: POPOVER EXTENDS tooltip.js + // ================================ + + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) + + Popover.prototype.constructor = Popover + + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS + } + + Popover.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + var content = this.getContent() + + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events + this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' + ](content) + + $tip.removeClass('fade top bottom left right in') + + // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do + // this manually by checking the contents. + if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() + } + + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + } + + Popover.prototype.getContent = function () { + var $e = this.$element + var o = this.options + + return $e.attr('data-content') + || (typeof o.content == 'function' ? + o.content.call($e[0]) : + o.content) + } + + Popover.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.arrow')) + } + + Popover.prototype.tip = function () { + if (!this.$tip) this.$tip = $(this.options.template) + return this.$tip + } + + + // POPOVER PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.popover') + var options = typeof option == 'object' && option + var selector = options && options.selector + + if (!data && option == 'destroy') return + if (selector) { + if (!data) $this.data('bs.popover', (data = {})) + if (!data[selector]) data[selector] = new Popover(this, options) + } else { + if (!data) $this.data('bs.popover', (data = new Popover(this, options))) + } + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.popover + + $.fn.popover = Plugin + $.fn.popover.Constructor = Popover + + + // POPOVER NO CONFLICT + // =================== + + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: scrollspy.js v3.3.1 + * http://getbootstrap.com/javascript/#scrollspy + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // SCROLLSPY CLASS DEFINITION + // ========================== + + function ScrollSpy(element, options) { + var process = $.proxy(this.process, this) + + this.$body = $('body') + this.$scrollElement = $(element).is('body') ? $(window) : $(element) + this.options = $.extend({}, ScrollSpy.DEFAULTS, options) + this.selector = (this.options.target || '') + ' .nav li > a' + this.offsets = [] + this.targets = [] + this.activeTarget = null + this.scrollHeight = 0 + + this.$scrollElement.on('scroll.bs.scrollspy', process) + this.refresh() + this.process() + } + + ScrollSpy.VERSION = '3.3.1' + + ScrollSpy.DEFAULTS = { + offset: 10 + } + + ScrollSpy.prototype.getScrollHeight = function () { + return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) + } + + ScrollSpy.prototype.refresh = function () { + var offsetMethod = 'offset' + var offsetBase = 0 + + if (!$.isWindow(this.$scrollElement[0])) { + offsetMethod = 'position' + offsetBase = this.$scrollElement.scrollTop() + } + + this.offsets = [] + this.targets = [] + this.scrollHeight = this.getScrollHeight() + + var self = this + + this.$body + .find(this.selector) + .map(function () { + var $el = $(this) + var href = $el.data('target') || $el.attr('href') + var $href = /^#./.test(href) && $(href) + + return ($href + && $href.length + && $href.is(':visible') + && [[$href[offsetMethod]().top + offsetBase, href]]) || null + }) + .sort(function (a, b) { return a[0] - b[0] }) + .each(function () { + self.offsets.push(this[0]) + self.targets.push(this[1]) + }) + } + + ScrollSpy.prototype.process = function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset + var scrollHeight = this.getScrollHeight() + var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() + var offsets = this.offsets + var targets = this.targets + var activeTarget = this.activeTarget + var i + + if (this.scrollHeight != scrollHeight) { + this.refresh() + } + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) + } + + if (activeTarget && scrollTop < offsets[0]) { + this.activeTarget = null + return this.clear() + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) + && this.activate(targets[i]) + } + } + + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target + + this.clear() + + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' + + var active = $(selector) + .parents('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') + } + + active.trigger('activate.bs.scrollspy') + } + + ScrollSpy.prototype.clear = function () { + $(this.selector) + .parentsUntil(this.options.target, '.active') + .removeClass('active') + } + + + // SCROLLSPY PLUGIN DEFINITION + // =========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.scrollspy') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.scrollspy + + $.fn.scrollspy = Plugin + $.fn.scrollspy.Constructor = ScrollSpy + + + // SCROLLSPY NO CONFLICT + // ===================== + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this + } + + + // SCROLLSPY DATA-API + // ================== + + $(window).on('load.bs.scrollspy.data-api', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + Plugin.call($spy, $spy.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tab.js v3.3.1 + * http://getbootstrap.com/javascript/#tabs + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TAB CLASS DEFINITION + // ==================== + + var Tab = function (element) { + this.element = $(element) + } + + Tab.VERSION = '3.3.1' + + Tab.TRANSITION_DURATION = 150 + + Tab.prototype.show = function () { + var $this = this.element + var $ul = $this.closest('ul:not(.dropdown-menu)') + var selector = $this.data('target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + if ($this.parent('li').hasClass('active')) return + + var $previous = $ul.find('.active:last a') + var hideEvent = $.Event('hide.bs.tab', { + relatedTarget: $this[0] + }) + var showEvent = $.Event('show.bs.tab', { + relatedTarget: $previous[0] + }) + + $previous.trigger(hideEvent) + $this.trigger(showEvent) + + if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return + + var $target = $(selector) + + this.activate($this.closest('li'), $ul) + this.activate($target, $target.parent(), function () { + $previous.trigger({ + type: 'hidden.bs.tab', + relatedTarget: $this[0] + }) + $this.trigger({ + type: 'shown.bs.tab', + relatedTarget: $previous[0] + }) + }) + } + + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active') + var transition = callback + && $.support.transition + && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length) + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', false) + + element + .addClass('active') + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if (element.parent('.dropdown-menu')) { + element + .closest('li.dropdown') + .addClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + } + + callback && callback() + } + + $active.length && transition ? + $active + .one('bsTransitionEnd', next) + .emulateTransitionEnd(Tab.TRANSITION_DURATION) : + next() + + $active.removeClass('in') + } + + + // TAB PLUGIN DEFINITION + // ===================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tab') + + if (!data) $this.data('bs.tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tab + + $.fn.tab = Plugin + $.fn.tab.Constructor = Tab + + + // TAB NO CONFLICT + // =============== + + $.fn.tab.noConflict = function () { + $.fn.tab = old + return this + } + + + // TAB DATA-API + // ============ + + var clickHandler = function (e) { + e.preventDefault() + Plugin.call($(this), 'show') + } + + $(document) + .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) + .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: affix.js v3.3.1 + * http://getbootstrap.com/javascript/#affix + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // AFFIX CLASS DEFINITION + // ====================== + + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options) + + this.$target = $(this.options.target) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) + + this.$element = $(element) + this.affixed = + this.unpin = + this.pinnedOffset = null + + this.checkPosition() + } + + Affix.VERSION = '3.3.1' + + Affix.RESET = 'affix affix-top affix-bottom' + + Affix.DEFAULTS = { + offset: 0, + target: window + } + + Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + var targetHeight = this.$target.height() + + if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false + + if (this.affixed == 'bottom') { + if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' + return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' + } + + var initializing = this.affixed == null + var colliderTop = initializing ? scrollTop : position.top + var colliderHeight = initializing ? targetHeight : height + + if (offsetTop != null && colliderTop <= offsetTop) return 'top' + if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' + + return false + } + + Affix.prototype.getPinnedOffset = function () { + if (this.pinnedOffset) return this.pinnedOffset + this.$element.removeClass(Affix.RESET).addClass('affix') + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + return (this.pinnedOffset = position.top - scrollTop) + } + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var height = this.$element.height() + var offset = this.options.offset + var offsetTop = offset.top + var offsetBottom = offset.bottom + var scrollHeight = $('body').height() + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) + + var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) + + if (this.affixed != affix) { + if (this.unpin != null) this.$element.css('top', '') + + var affixType = 'affix' + (affix ? '-' + affix : '') + var e = $.Event(affixType + '.bs.affix') + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + this.affixed = affix + this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null + + this.$element + .removeClass(Affix.RESET) + .addClass(affixType) + .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') + } + + if (affix == 'bottom') { + this.$element.offset({ + top: scrollHeight - height - offsetBottom + }) + } + } + + + // AFFIX PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.affix') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.affix + + $.fn.affix = Plugin + $.fn.affix.Constructor = Affix + + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + var data = $spy.data() + + data.offset = data.offset || {} + + if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom + if (data.offsetTop != null) data.offset.top = data.offsetTop + + Plugin.call($spy, data) + }) + }) + +}(jQuery); diff --git a/Documentation/html/Documentation/Api/Fortran/media/js/bootstrap.min.js b/Documentation/html/Documentation/Api/Fortran/media/js/bootstrap.min.js new file mode 100644 index 0000000000000000000000000000000000000000..d839865900c1ab1245618347dcb0a0d4bb01b893 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.1",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.1",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.1",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c="prev"==a?-1:1,d=this.getItemIndex(b),e=(d+c)%this.$items.length;return this.$items.eq(e)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i="next"==b?"first":"last",j=this;if(!f.length){if(!this.options.wrap)return;f=this.$element.find(".item")[i]()}if(f.hasClass("active"))return this.sliding=!1;var k=f[0],l=a.Event("slide.bs.carousel",{relatedTarget:k,direction:h});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var m=a(this.$indicators.children()[this.getItemIndex(f)]);m&&m.addClass("active")}var n=a.Event("slid.bs.carousel",{relatedTarget:k,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),j.sliding=!1,setTimeout(function(){j.$element.trigger(n)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(n)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.1",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.find("> .panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.1",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.1",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.options.backdrop&&d.adjustBackdrop(),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').prependTo(this.$element).on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.options.backdrop&&this.adjustBackdrop(),this.adjustDialog()},c.prototype.adjustBackdrop=function(){this.$backdrop.css("height",0).css("height",this.$element[0].scrollHeight)},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){this.bodyIsOverflowing=document.body.scrollHeight>document.documentElement.clientHeight,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.tooltip",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=this.tip(),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.popover",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.1",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.1",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]}) +})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.1",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=i?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a("body").height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/media/js/ie10-viewport-bug-workaround.js b/Documentation/html/Documentation/Api/Fortran/media/js/ie10-viewport-bug-workaround.js new file mode 100644 index 0000000000000000000000000000000000000000..7f53b614584cadb28aa9fc31f4aa89d5ddc9f622 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/js/ie10-viewport-bug-workaround.js @@ -0,0 +1,22 @@ +/*! + * IE10 viewport hack for Surface/desktop Windows 8 bug + * Copyright 2014 Twitter, Inc. + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see http://creativecommons.org/licenses/by/3.0/. + */ + +// See the Getting Started docs for more information: +// http://getbootstrap.com/getting-started/#support-ie10-width + +(function () { + 'use strict'; + if (navigator.userAgent.match(/IEMobile\/10\.0/)) { + var msViewportStyle = document.createElement('style') + msViewportStyle.appendChild( + document.createTextNode( + '@-ms-viewport{width:auto!important}' + ) + ) + document.querySelector('head').appendChild(msViewportStyle) + } +})(); diff --git a/Documentation/html/Documentation/Api/Fortran/media/js/jquery-2.1.3.min.js b/Documentation/html/Documentation/Api/Fortran/media/js/jquery-2.1.3.min.js new file mode 100644 index 0000000000000000000000000000000000000000..25714ed29ab6fcf0355da4b45ac602fac0154efb --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/js/jquery-2.1.3.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"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){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.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||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},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?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;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;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=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=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(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 pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),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){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.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===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(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,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||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 gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.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},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.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=gb.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=gb.selectors={cacheLength:50,createPseudo:ib,match:X,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(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===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]||gb.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]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.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(cb,db).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("(^|"+L+")"+a+"("+L+"|$)"))&&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=gb.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(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},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;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(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:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).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:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!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 Z.test(a.nodeName)},input:function(a){return Y.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:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?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]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.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=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[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?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(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 ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(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?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(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}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;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};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c) +},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.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=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.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 L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.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=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),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),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==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,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(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=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={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,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.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 this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(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&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.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 yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=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};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{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=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):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):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.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 Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.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;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.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=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.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)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.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;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b)) +},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.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){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},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)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec=/#.*$/,fc=/([?&])_=[^&]*/,gc=/^(.*?):[ \t]*([^\r\n]*)$/gm,hc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ic=/^(?:GET|HEAD)$/,jc=/^\/\//,kc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lc={},mc={},nc="*/".concat("*"),oc=a.location.href,pc=kc.exec(oc.toLowerCase())||[];function qc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.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 rc(a,b,c,d){var e={},f=a===mc;function g(h){var i;return e[h]=!0,n.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 sc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tc(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}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function uc(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}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:oc,type:"GET",isLocal:hc.test(pc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sc(sc(a,n.ajaxSettings),b):sc(n.ajaxSettings,a)},ajaxPrefilter:qc(lc),ajaxTransport:qc(mc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gc.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||oc)+"").replace(ec,"").replace(jc,pc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pc[1]&&h[2]===pc[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pc[3]||("http:"===pc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rc(lc,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ic.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fc.test(d)?d.replace(fc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+nc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rc(mc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tc(k,v,f)),u=uc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(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 this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vc=/%20/g,wc=/\[\]$/,xc=/\r?\n/g,yc=/^(?:submit|button|image|reset|file)$/i,zc=/^(?:input|select|textarea|keygen)/i;function Ac(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wc.test(a)?d(a,e):Ac(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ac(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ac(c,a[c],b,e);return d.join("&").replace(vc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zc.test(this.nodeName)&&!yc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xc,"\r\n")}}):{name:b.name,value:c.replace(xc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bc=0,Cc={},Dc={0:200,1223:204},Ec=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cc)Cc[a]()}),k.cors=!!Ec&&"withCredentials"in Ec,k.ajax=Ec=!!Ec,n.ajaxTransport(function(a){var b;return k.cors||Ec&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Dc[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Cc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fc=[],Gc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Fc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hc)return Hc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ic=a.document.documentElement;function Jc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.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),n.isFunction(b)&&(b=b.call(a,c,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)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ic;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ic})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Kc=a.jQuery,Lc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lc),b&&a.jQuery===n&&(a.jQuery=Kc),n},typeof b===U&&(a.jQuery=a.$=n),n}); diff --git a/Documentation/html/Documentation/Api/Fortran/media/js/svg-pan-zoom.min.js b/Documentation/html/Documentation/Api/Fortran/media/js/svg-pan-zoom.min.js new file mode 100644 index 0000000000000000000000000000000000000000..328f5e742f24ba61944b3f34ee6ac1557e297ebe --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/js/svg-pan-zoom.min.js @@ -0,0 +1,3 @@ +// svg-pan-zoom v3.2.3 +// https://github.com/ariutta/svg-pan-zoom +!function t(e,o,n){function i(r,a){if(!o[r]){if(!e[r]){var l="function"==typeof require&&require;if(!a&&l)return l(r,!0);if(s)return s(r,!0);var u=new Error("Cannot find module '"+r+"'");throw u.code="MODULE_NOT_FOUND",u}var h=o[r]={exports:{}};e[r][0].call(h.exports,function(t){var o=e[r][1][t];return i(o?o:t)},h,h.exports,t,e,o,n)}return o[r].exports}for(var s="function"==typeof require&&require,r=0;r<n.length;r++)i(n[r]);return i}({1:[function(t,e){var o=t("./svg-pan-zoom.js");!function(t){"function"==typeof define&&define.amd?define("svg-pan-zoom",function(){return o}):"undefined"!=typeof e&&e.exports&&(e.exports=o,t.svgPanZoom=o)}(window,document)},{"./svg-pan-zoom.js":4}],2:[function(t,e){var o=t("./svg-utilities");e.exports={enable:function(t){var e=t.svg.querySelector("defs");e||(e=document.createElementNS(o.svgNS,"defs"),t.svg.appendChild(e));var n=document.createElementNS(o.svgNS,"style");n.setAttribute("type","text/css"),n.textContent=".svg-pan-zoom-control { cursor: pointer; fill: black; fill-opacity: 0.333; } .svg-pan-zoom-control:hover { fill-opacity: 0.8; } .svg-pan-zoom-control-background { fill: white; fill-opacity: 0.5; } .svg-pan-zoom-control-background { fill-opacity: 0.8; }",e.appendChild(n);var i=document.createElementNS(o.svgNS,"g");i.setAttribute("id","svg-pan-zoom-controls"),i.setAttribute("transform","translate("+(t.width-70)+" "+(t.height-76)+") scale(0.75)"),i.setAttribute("class","svg-pan-zoom-control"),i.appendChild(this._createZoomIn(t)),i.appendChild(this._createZoomReset(t)),i.appendChild(this._createZoomOut(t)),t.svg.appendChild(i),t.controlIcons=i},_createZoomIn:function(t){var e=document.createElementNS(o.svgNS,"g");e.setAttribute("id","svg-pan-zoom-zoom-in"),e.setAttribute("transform","translate(30.5 5) scale(0.015)"),e.setAttribute("class","svg-pan-zoom-control"),e.addEventListener("click",function(){t.getPublicInstance().zoomIn()},!1),e.addEventListener("touchstart",function(){t.getPublicInstance().zoomIn()},!1);var n=document.createElementNS(o.svgNS,"rect");n.setAttribute("x","0"),n.setAttribute("y","0"),n.setAttribute("width","1500"),n.setAttribute("height","1400"),n.setAttribute("class","svg-pan-zoom-control-background"),e.appendChild(n);var i=document.createElementNS(o.svgNS,"path");return i.setAttribute("d","M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z"),i.setAttribute("class","svg-pan-zoom-control-element"),e.appendChild(i),e},_createZoomReset:function(t){var e=document.createElementNS(o.svgNS,"g");e.setAttribute("id","svg-pan-zoom-reset-pan-zoom"),e.setAttribute("transform","translate(5 35) scale(0.4)"),e.setAttribute("class","svg-pan-zoom-control"),e.addEventListener("click",function(){t.getPublicInstance().reset()},!1),e.addEventListener("touchstart",function(){t.getPublicInstance().reset()},!1);var n=document.createElementNS(o.svgNS,"rect");n.setAttribute("x","2"),n.setAttribute("y","2"),n.setAttribute("width","182"),n.setAttribute("height","58"),n.setAttribute("class","svg-pan-zoom-control-background"),e.appendChild(n);var i=document.createElementNS(o.svgNS,"path");i.setAttribute("d","M33.051,20.632c-0.742-0.406-1.854-0.609-3.338-0.609h-7.969v9.281h7.769c1.543,0,2.701-0.188,3.473-0.562c1.365-0.656,2.048-1.953,2.048-3.891C35.032,22.757,34.372,21.351,33.051,20.632z"),i.setAttribute("class","svg-pan-zoom-control-element"),e.appendChild(i);var s=document.createElementNS(o.svgNS,"path");return s.setAttribute("d","M170.231,0.5H15.847C7.102,0.5,0.5,5.708,0.5,11.84v38.861C0.5,56.833,7.102,61.5,15.847,61.5h154.384c8.745,0,15.269-4.667,15.269-10.798V11.84C185.5,5.708,178.976,0.5,170.231,0.5z M42.837,48.569h-7.969c-0.219-0.766-0.375-1.383-0.469-1.852c-0.188-0.969-0.289-1.961-0.305-2.977l-0.047-3.211c-0.03-2.203-0.41-3.672-1.142-4.406c-0.732-0.734-2.103-1.102-4.113-1.102h-7.05v13.547h-7.055V14.022h16.524c2.361,0.047,4.178,0.344,5.45,0.891c1.272,0.547,2.351,1.352,3.234,2.414c0.731,0.875,1.31,1.844,1.737,2.906s0.64,2.273,0.64,3.633c0,1.641-0.414,3.254-1.242,4.84s-2.195,2.707-4.102,3.363c1.594,0.641,2.723,1.551,3.387,2.73s0.996,2.98,0.996,5.402v2.32c0,1.578,0.063,2.648,0.19,3.211c0.19,0.891,0.635,1.547,1.333,1.969V48.569z M75.579,48.569h-26.18V14.022h25.336v6.117H56.454v7.336h16.781v6H56.454v8.883h19.125V48.569z M104.497,46.331c-2.44,2.086-5.887,3.129-10.34,3.129c-4.548,0-8.125-1.027-10.731-3.082s-3.909-4.879-3.909-8.473h6.891c0.224,1.578,0.662,2.758,1.316,3.539c1.196,1.422,3.246,2.133,6.15,2.133c1.739,0,3.151-0.188,4.236-0.562c2.058-0.719,3.087-2.055,3.087-4.008c0-1.141-0.504-2.023-1.512-2.648c-1.008-0.609-2.607-1.148-4.796-1.617l-3.74-0.82c-3.676-0.812-6.201-1.695-7.576-2.648c-2.328-1.594-3.492-4.086-3.492-7.477c0-3.094,1.139-5.664,3.417-7.711s5.623-3.07,10.036-3.07c3.685,0,6.829,0.965,9.431,2.895c2.602,1.93,3.966,4.73,4.093,8.402h-6.938c-0.128-2.078-1.057-3.555-2.787-4.43c-1.154-0.578-2.587-0.867-4.301-0.867c-1.907,0-3.428,0.375-4.565,1.125c-1.138,0.75-1.706,1.797-1.706,3.141c0,1.234,0.561,2.156,1.682,2.766c0.721,0.406,2.25,0.883,4.589,1.43l6.063,1.43c2.657,0.625,4.648,1.461,5.975,2.508c2.059,1.625,3.089,3.977,3.089,7.055C108.157,41.624,106.937,44.245,104.497,46.331z M139.61,48.569h-26.18V14.022h25.336v6.117h-18.281v7.336h16.781v6h-16.781v8.883h19.125V48.569z M170.337,20.14h-10.336v28.43h-7.266V20.14h-10.383v-6.117h27.984V20.14z"),s.setAttribute("class","svg-pan-zoom-control-element"),e.appendChild(s),e},_createZoomOut:function(t){var e=document.createElementNS(o.svgNS,"g");e.setAttribute("id","svg-pan-zoom-zoom-out"),e.setAttribute("transform","translate(30.5 70) scale(0.015)"),e.setAttribute("class","svg-pan-zoom-control"),e.addEventListener("click",function(){t.getPublicInstance().zoomOut()},!1),e.addEventListener("touchstart",function(){t.getPublicInstance().zoomOut()},!1);var n=document.createElementNS(o.svgNS,"rect");n.setAttribute("x","0"),n.setAttribute("y","0"),n.setAttribute("width","1500"),n.setAttribute("height","1400"),n.setAttribute("class","svg-pan-zoom-control-background"),e.appendChild(n);var i=document.createElementNS(o.svgNS,"path");return i.setAttribute("d","M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z"),i.setAttribute("class","svg-pan-zoom-control-element"),e.appendChild(i),e},disable:function(t){t.controlIcons&&(t.controlIcons.parentNode.removeChild(t.controlIcons),t.controlIcons=null)}}},{"./svg-utilities":5}],3:[function(t,e){var o=t("./svg-utilities"),n=t("./utilities"),i=function(t,e){this.init(t,e)};i.prototype.init=function(t,e){this.viewport=t,this.options=e,this.originalState={zoom:1,x:0,y:0},this.activeState={zoom:1,x:0,y:0},this.updateCTMCached=n.proxy(this.updateCTM,this),this.requestAnimationFrame=n.createRequestAnimationFrame(this.options.refreshRate),this.viewBox={x:0,y:0,width:0,height:0},this.cacheViewBox(),this.processCTM(),this.updateCTM()},i.prototype.cacheViewBox=function(){var t=this.options.svg.getAttribute("viewBox");if(t){var e=t.split(/[\s\,]/).filter(function(t){return t}).map(parseFloat);this.viewBox.x=e[0],this.viewBox.y=e[1],this.viewBox.width=e[2],this.viewBox.height=e[3];var o=Math.min(this.options.width/this.viewBox.width,this.options.height/this.viewBox.height);this.activeState.zoom=o,this.activeState.x=(this.options.width-this.viewBox.width*o)/2,this.activeState.y=(this.options.height-this.viewBox.height*o)/2,this.updateCTMOnNextFrame(),this.options.svg.removeAttribute("viewBox")}else{var n=this.viewport.getBBox();this.viewBox.x=n.x,this.viewBox.y=n.y,this.viewBox.width=n.width,this.viewBox.height=n.height}},i.prototype.recacheViewBox=function(){var t=this.viewport.getBoundingClientRect(),e=t.width/this.getZoom(),o=t.height/this.getZoom();this.viewBox.x=0,this.viewBox.y=0,this.viewBox.width=e,this.viewBox.height=o},i.prototype.getViewBox=function(){return n.extend({},this.viewBox)},i.prototype.processCTM=function(){var t=this.getCTM();if(this.options.fit||this.options.contain){var e;e=this.options.fit?Math.min(this.options.width/this.viewBox.width,this.options.height/this.viewBox.height):Math.max(this.options.width/this.viewBox.width,this.options.height/this.viewBox.height),t.a=e,t.d=e,t.e=-this.viewBox.x*e,t.f=-this.viewBox.y*e}if(this.options.center){var o=.5*(this.options.width-(this.viewBox.width+2*this.viewBox.x)*t.a),n=.5*(this.options.height-(this.viewBox.height+2*this.viewBox.y)*t.a);t.e=o,t.f=n}this.originalState.zoom=t.a,this.originalState.x=t.e,this.originalState.y=t.f,this.setCTM(t)},i.prototype.getOriginalState=function(){return n.extend({},this.originalState)},i.prototype.getState=function(){return n.extend({},this.activeState)},i.prototype.getZoom=function(){return this.activeState.zoom},i.prototype.getRelativeZoom=function(){return this.activeState.zoom/this.originalState.zoom},i.prototype.computeRelativeZoom=function(t){return t/this.originalState.zoom},i.prototype.getPan=function(){return{x:this.activeState.x,y:this.activeState.y}},i.prototype.getCTM=function(){var t=this.options.svg.createSVGMatrix();return t.a=this.activeState.zoom,t.b=0,t.c=0,t.d=this.activeState.zoom,t.e=this.activeState.x,t.f=this.activeState.y,t},i.prototype.setCTM=function(t){var e=this.isZoomDifferent(t),o=this.isPanDifferent(t);if(e||o){if(e&&this.options.beforeZoom(this.getRelativeZoom(),this.computeRelativeZoom(t.a))===!1&&(t.a=t.d=this.activeState.zoom,e=!1),o){var i=this.options.beforePan(this.getPan(),{x:t.e,y:t.f}),s=!1,r=!1;i===!1?(t.e=this.getPan().x,t.f=this.getPan().y,s=r=!0):n.isObject(i)&&(i.x===!1?(t.e=this.getPan().x,s=!0):n.isNumber(i.x)&&(t.e=i.x),i.y===!1?(t.f=this.getPan().y,r=!0):n.isNumber(i.y)&&(t.f=i.y)),s&&r&&(o=!1)}(e||o)&&(this.updateCache(t),this.updateCTMOnNextFrame(),e&&this.options.onZoom(this.getRelativeZoom()),o&&this.options.onPan(this.getPan()))}},i.prototype.isZoomDifferent=function(t){return this.activeState.zoom!==t.a},i.prototype.isPanDifferent=function(t){return this.activeState.x!==t.e||this.activeState.y!==t.f},i.prototype.updateCache=function(t){this.activeState.zoom=t.a,this.activeState.x=t.e,this.activeState.y=t.f},i.prototype.pendingUpdate=!1,i.prototype.updateCTMOnNextFrame=function(){this.pendingUpdate||(this.pendingUpdate=!0,this.requestAnimationFrame.call(window,this.updateCTMCached))},i.prototype.updateCTM=function(){o.setCTM(this.viewport,this.getCTM(),this.defs),this.pendingUpdate=!1},e.exports=function(t,e){return new i(t,e)}},{"./svg-utilities":5,"./utilities":7}],4:[function(t,e){var o=t("./uniwheel"),n=t("./control-icons"),i=t("./utilities"),s=t("./svg-utilities"),r=t("./shadow-viewport"),a=function(t,e){this.init(t,e)},l={viewportSelector:".svg-pan-zoom_viewport",panEnabled:!0,controlIconsEnabled:!1,zoomEnabled:!0,dblClickZoomEnabled:!0,mouseWheelZoomEnabled:!0,preventMouseEventsDefault:!0,zoomScaleSensitivity:.1,minZoom:.5,maxZoom:10,fit:!0,contain:!1,center:!0,refreshRate:"auto",beforeZoom:null,onZoom:null,beforePan:null,onPan:null,customEventsHandler:null};a.prototype.init=function(t,e){var o=this;this.svg=t,this.defs=t.querySelector("defs"),s.setupSvgAttributes(this.svg),this.options=i.extend(i.extend({},l),e),this.state="none";var a=s.getBoundingClientRectNormalized(t);this.width=a.width,this.height=a.height,this.viewport=r(s.getOrCreateViewport(this.svg,this.options.viewportSelector),{svg:this.svg,width:this.width,height:this.height,fit:this.options.fit,contain:this.options.contain,center:this.options.center,refreshRate:this.options.refreshRate,beforeZoom:function(t,e){return o.viewport&&o.options.beforeZoom?o.options.beforeZoom(t,e):void 0},onZoom:function(t){return o.viewport&&o.options.onZoom?o.options.onZoom(t):void 0},beforePan:function(t,e){return o.viewport&&o.options.beforePan?o.options.beforePan(t,e):void 0},onPan:function(t){return o.viewport&&o.options.onPan?o.options.onPan(t):void 0}});var u=this.getPublicInstance();u.setBeforeZoom(this.options.beforeZoom),u.setOnZoom(this.options.onZoom),u.setBeforePan(this.options.beforePan),u.setOnPan(this.options.onPan),this.options.controlIconsEnabled&&n.enable(this),this.lastMouseWheelEventTime=Date.now(),this.setupHandlers()},a.prototype.setupHandlers=function(){var t=this,e=null;if(this.eventListeners={mousedown:function(e){return t.handleMouseDown(e,null)},touchstart:function(o){var n=t.handleMouseDown(o,e);return e=o,n},mouseup:function(e){return t.handleMouseUp(e)},touchend:function(e){return t.handleMouseUp(e)},mousemove:function(e){return t.handleMouseMove(e)},touchmove:function(e){return t.handleMouseMove(e)},mouseleave:function(e){return t.handleMouseUp(e)},touchleave:function(e){return t.handleMouseUp(e)},touchcancel:function(e){return t.handleMouseUp(e)}},null!=this.options.customEventsHandler){this.options.customEventsHandler.init({svgElement:this.svg,instance:this.getPublicInstance()});var o=this.options.customEventsHandler.haltEventListeners;if(o&&o.length)for(var n=o.length-1;n>=0;n--)this.eventListeners.hasOwnProperty(o[n])&&delete this.eventListeners[o[n]]}for(var i in this.eventListeners)this.svg.addEventListener(i,this.eventListeners[i],!1);this.options.mouseWheelZoomEnabled&&(this.options.mouseWheelZoomEnabled=!1,this.enableMouseWheelZoom())},a.prototype.enableMouseWheelZoom=function(){if(!this.options.mouseWheelZoomEnabled){var t=this;this.wheelListener=function(e){return t.handleMouseWheel(e)},o.on(this.svg,this.wheelListener,!1),this.options.mouseWheelZoomEnabled=!0}},a.prototype.disableMouseWheelZoom=function(){this.options.mouseWheelZoomEnabled&&(o.off(this.svg,this.wheelListener,!1),this.options.mouseWheelZoomEnabled=!1)},a.prototype.handleMouseWheel=function(t){if(this.options.zoomEnabled&&"none"===this.state){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1);var e=t.deltaY||1,o=Date.now()-this.lastMouseWheelEventTime,n=3+Math.max(0,30-o);this.lastMouseWheelEventTime=Date.now(),"deltaMode"in t&&0===t.deltaMode&&t.wheelDelta&&(e=0===t.deltaY?0:Math.abs(t.wheelDelta)/t.deltaY),e=e>-.3&&.3>e?e:(e>0?1:-1)*Math.log(Math.abs(e)+10)/n;var i=this.svg.getScreenCTM().inverse(),r=s.getEventPoint(t,this.svg).matrixTransform(i),a=Math.pow(1+this.options.zoomScaleSensitivity,-1*e);this.zoomAtPoint(a,r)}},a.prototype.zoomAtPoint=function(t,e,o){var n=this.viewport.getOriginalState();o?(t=Math.max(this.options.minZoom*n.zoom,Math.min(this.options.maxZoom*n.zoom,t)),t/=this.getZoom()):this.getZoom()*t<this.options.minZoom*n.zoom?t=this.options.minZoom*n.zoom/this.getZoom():this.getZoom()*t>this.options.maxZoom*n.zoom&&(t=this.options.maxZoom*n.zoom/this.getZoom());var i=this.viewport.getCTM(),s=e.matrixTransform(i.inverse()),r=this.svg.createSVGMatrix().translate(s.x,s.y).scale(t).translate(-s.x,-s.y),a=i.multiply(r);a.a!==i.a&&this.viewport.setCTM(a)},a.prototype.zoom=function(t,e){this.zoomAtPoint(t,s.getSvgCenterPoint(this.svg,this.width,this.height),e)},a.prototype.publicZoom=function(t,e){e&&(t=this.computeFromRelativeZoom(t)),this.zoom(t,e)},a.prototype.publicZoomAtPoint=function(t,e,o){if(o&&(t=this.computeFromRelativeZoom(t)),!("SVGPoint"!==i.getType(e)&&"x"in e&&"y"in e))throw new Error("Given point is invalid");e=s.createSVGPoint(this.svg,e.x,e.y),this.zoomAtPoint(t,e,o)},a.prototype.getZoom=function(){return this.viewport.getZoom()},a.prototype.getRelativeZoom=function(){return this.viewport.getRelativeZoom()},a.prototype.computeFromRelativeZoom=function(t){return t*this.viewport.getOriginalState().zoom},a.prototype.resetZoom=function(){var t=this.viewport.getOriginalState();this.zoom(t.zoom,!0)},a.prototype.resetPan=function(){this.pan(this.viewport.getOriginalState())},a.prototype.reset=function(){this.resetZoom(),this.resetPan()},a.prototype.handleDblClick=function(t){if(this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),this.options.controlIconsEnabled){var e=t.target.getAttribute("class")||"";if(e.indexOf("svg-pan-zoom-control")>-1)return!1}var o;o=t.shiftKey?1/(2*(1+this.options.zoomScaleSensitivity)):2*(1+this.options.zoomScaleSensitivity);var n=s.getEventPoint(t,this.svg).matrixTransform(this.svg.getScreenCTM().inverse());this.zoomAtPoint(o,n)},a.prototype.handleMouseDown=function(t,e){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),i.mouseAndTouchNormalize(t,this.svg),this.options.dblClickZoomEnabled&&i.isDblClick(t,e)?this.handleDblClick(t):(this.state="pan",this.firstEventCTM=this.viewport.getCTM(),this.stateOrigin=s.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()))},a.prototype.handleMouseMove=function(t){if(this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),"pan"===this.state&&this.options.panEnabled){var e=s.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()),o=this.firstEventCTM.translate(e.x-this.stateOrigin.x,e.y-this.stateOrigin.y);this.viewport.setCTM(o)}},a.prototype.handleMouseUp=function(t){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),"pan"===this.state&&(this.state="none")},a.prototype.fit=function(){var t=this.viewport.getViewBox(),e=Math.min(this.width/t.width,this.height/t.height);this.zoom(e,!0)},a.prototype.contain=function(){var t=this.viewport.getViewBox(),e=Math.max(this.width/t.width,this.height/t.height);this.zoom(e,!0)},a.prototype.center=function(){var t=this.viewport.getViewBox(),e=.5*(this.width-(t.width+2*t.x)*this.getZoom()),o=.5*(this.height-(t.height+2*t.y)*this.getZoom());this.getPublicInstance().pan({x:e,y:o})},a.prototype.updateBBox=function(){this.viewport.recacheViewBox()},a.prototype.pan=function(t){var e=this.viewport.getCTM();e.e=t.x,e.f=t.y,this.viewport.setCTM(e)},a.prototype.panBy=function(t){var e=this.viewport.getCTM();e.e+=t.x,e.f+=t.y,this.viewport.setCTM(e)},a.prototype.getPan=function(){var t=this.viewport.getState();return{x:t.x,y:t.y}},a.prototype.resize=function(){var t=s.getBoundingClientRectNormalized(this.svg);this.width=t.width,this.height=t.height,this.options.controlIconsEnabled&&(this.getPublicInstance().disableControlIcons(),this.getPublicInstance().enableControlIcons())},a.prototype.destroy=function(){var t=this;this.beforeZoom=null,this.onZoom=null,this.beforePan=null,this.onPan=null,null!=this.options.customEventsHandler&&this.options.customEventsHandler.destroy({svgElement:this.svg,instance:this.getPublicInstance()});for(var e in this.eventListeners)this.svg.removeEventListener(e,this.eventListeners[e],!1);this.disableMouseWheelZoom(),this.getPublicInstance().disableControlIcons(),this.reset(),u=u.filter(function(e){return e.svg!==t.svg}),delete this.options,delete this.publicInstance,delete this.pi,this.getPublicInstance=function(){return null}},a.prototype.getPublicInstance=function(){var t=this;return this.publicInstance||(this.publicInstance=this.pi={enablePan:function(){return t.options.panEnabled=!0,t.pi},disablePan:function(){return t.options.panEnabled=!1,t.pi},isPanEnabled:function(){return!!t.options.panEnabled},pan:function(e){return t.pan(e),t.pi},panBy:function(e){return t.panBy(e),t.pi},getPan:function(){return t.getPan()},setBeforePan:function(e){return t.options.beforePan=null===e?null:i.proxy(e,t.publicInstance),t.pi},setOnPan:function(e){return t.options.onPan=null===e?null:i.proxy(e,t.publicInstance),t.pi},enableZoom:function(){return t.options.zoomEnabled=!0,t.pi},disableZoom:function(){return t.options.zoomEnabled=!1,t.pi},isZoomEnabled:function(){return!!t.options.zoomEnabled},enableControlIcons:function(){return t.options.controlIconsEnabled||(t.options.controlIconsEnabled=!0,n.enable(t)),t.pi},disableControlIcons:function(){return t.options.controlIconsEnabled&&(t.options.controlIconsEnabled=!1,n.disable(t)),t.pi},isControlIconsEnabled:function(){return!!t.options.controlIconsEnabled},enableDblClickZoom:function(){return t.options.dblClickZoomEnabled=!0,t.pi},disableDblClickZoom:function(){return t.options.dblClickZoomEnabled=!1,t.pi},isDblClickZoomEnabled:function(){return!!t.options.dblClickZoomEnabled},enableMouseWheelZoom:function(){return t.enableMouseWheelZoom(),t.pi},disableMouseWheelZoom:function(){return t.disableMouseWheelZoom(),t.pi},isMouseWheelZoomEnabled:function(){return!!t.options.mouseWheelZoomEnabled},setZoomScaleSensitivity:function(e){return t.options.zoomScaleSensitivity=e,t.pi},setMinZoom:function(e){return t.options.minZoom=e,t.pi},setMaxZoom:function(e){return t.options.maxZoom=e,t.pi},setBeforeZoom:function(e){return t.options.beforeZoom=null===e?null:i.proxy(e,t.publicInstance),t.pi},setOnZoom:function(e){return t.options.onZoom=null===e?null:i.proxy(e,t.publicInstance),t.pi},zoom:function(e){return t.publicZoom(e,!0),t.pi},zoomBy:function(e){return t.publicZoom(e,!1),t.pi},zoomAtPoint:function(e,o){return t.publicZoomAtPoint(e,o,!0),t.pi},zoomAtPointBy:function(e,o){return t.publicZoomAtPoint(e,o,!1),t.pi},zoomIn:function(){return this.zoomBy(1+t.options.zoomScaleSensitivity),t.pi},zoomOut:function(){return this.zoomBy(1/(1+t.options.zoomScaleSensitivity)),t.pi},getZoom:function(){return t.getRelativeZoom()},resetZoom:function(){return t.resetZoom(),t.pi},resetPan:function(){return t.resetPan(),t.pi},reset:function(){return t.reset(),t.pi},fit:function(){return t.fit(),t.pi},contain:function(){return t.contain(),t.pi},center:function(){return t.center(),t.pi},updateBBox:function(){return t.updateBBox(),t.pi},resize:function(){return t.resize(),t.pi},getSizes:function(){return{width:t.width,height:t.height,realZoom:t.getZoom(),viewBox:t.viewport.getViewBox()}},destroy:function(){return t.destroy(),t.pi}}),this.publicInstance};var u=[],h=function(t,e){var o=i.getSvg(t);if(null===o)return null;for(var n=u.length-1;n>=0;n--)if(u[n].svg===o)return u[n].instance.getPublicInstance();return u.push({svg:o,instance:new a(o,e)}),u[u.length-1].instance.getPublicInstance()};e.exports=h},{"./control-icons":2,"./shadow-viewport":3,"./svg-utilities":5,"./uniwheel":6,"./utilities":7}],5:[function(t,e){var o=t("./utilities"),n="unknown";document.documentMode&&(n="ie"),e.exports={svgNS:"http://www.w3.org/2000/svg",xmlNS:"http://www.w3.org/XML/1998/namespace",xmlnsNS:"http://www.w3.org/2000/xmlns/",xlinkNS:"http://www.w3.org/1999/xlink",evNS:"http://www.w3.org/2001/xml-events",getBoundingClientRectNormalized:function(t){if(t.clientWidth&&t.clientHeight)return{width:t.clientWidth,height:t.clientHeight};if(t.getBoundingClientRect())return t.getBoundingClientRect();throw new Error("Cannot get BoundingClientRect for SVG.")},getOrCreateViewport:function(t,e){var n=null;if(n=o.isElement(e)?e:t.querySelector(e),!n){var i=Array.prototype.slice.call(t.childNodes||t.children).filter(function(t){return"defs"!==t.nodeName&&"#text"!==t.nodeName});1===i.length&&"g"===i[0].nodeName&&null===i[0].getAttribute("transform")&&(n=i[0])}if(!n){var s="viewport-"+(new Date).toISOString().replace(/\D/g,"");n=document.createElementNS(this.svgNS,"g"),n.setAttribute("id",s);var r=t.childNodes||t.children;if(r&&r.length>0)for(var a=r.length;a>0;a--)"defs"!==r[r.length-a].nodeName&&n.appendChild(r[r.length-a]);t.appendChild(n)}var l=[];return n.getAttribute("class")&&(l=n.getAttribute("class").split(" ")),~l.indexOf("svg-pan-zoom_viewport")||(l.push("svg-pan-zoom_viewport"),n.setAttribute("class",l.join(" "))),n},setupSvgAttributes:function(t){if(t.setAttribute("xmlns",this.svgNS),t.setAttributeNS(this.xmlnsNS,"xmlns:xlink",this.xlinkNS),t.setAttributeNS(this.xmlnsNS,"xmlns:ev",this.evNS),null!==t.parentNode){var e=t.getAttribute("style")||"";-1===e.toLowerCase().indexOf("overflow")&&t.setAttribute("style","overflow: hidden; "+e)}},internetExplorerRedisplayInterval:300,refreshDefsGlobal:o.throttle(function(){for(var t=document.querySelectorAll("defs"),e=t.length,o=0;e>o;o++){var n=t[o];n.parentNode.insertBefore(n,n)}},this.internetExplorerRedisplayInterval),setCTM:function(t,e,o){var i=this,s="matrix("+e.a+","+e.b+","+e.c+","+e.d+","+e.e+","+e.f+")";t.setAttributeNS(null,"transform",s),"ie"===n&&o&&(o.parentNode.insertBefore(o,o),window.setTimeout(function(){i.refreshDefsGlobal()},i.internetExplorerRedisplayInterval))},getEventPoint:function(t,e){var n=e.createSVGPoint();return o.mouseAndTouchNormalize(t,e),n.x=t.clientX,n.y=t.clientY,n},getSvgCenterPoint:function(t,e,o){return this.createSVGPoint(t,e/2,o/2)},createSVGPoint:function(t,e,o){var n=t.createSVGPoint();return n.x=e,n.y=o,n}}},{"./utilities":7}],6:[function(t,e){e.exports=function(){function t(t,e,o){var n=function(t){!t&&(t=window.event);var o={originalEvent:t,target:t.target||t.srcElement,type:"wheel",deltaMode:"MozMousePixelScroll"==t.type?0:1,deltaX:0,delatZ:0,preventDefault:function(){t.preventDefault?t.preventDefault():t.returnValue=!1}};return"mousewheel"==u?(o.deltaY=-1/40*t.wheelDelta,t.wheelDeltaX&&(o.deltaX=-1/40*t.wheelDeltaX)):o.deltaY=t.detail,e(o)};return c.push({element:t,fn:n,capture:o}),n}function e(t,e){for(var o=0;o<c.length;o++)if(c[o].element===t&&c[o].capture===e)return c[o].fn;return function(){}}function o(t,e){for(var o=0;o<c.length;o++)if(c[o].element===t&&c[o].capture===e)return c.splice(o,1)}function n(e,o,n,i){var s;s="wheel"===u?n:t(e,n,i),e[a](h+o,s,i||!1)}function i(t,n,i,s){cb="wheel"===u?i:e(t,s),t[l](h+n,cb,s||!1),o(t,s)}function s(t,e,o){n(t,u,e,o),"DOMMouseScroll"==u&&n(t,"MozMousePixelScroll",e,o)}function r(t,e,o){i(t,u,e,o),"DOMMouseScroll"==u&&i(t,"MozMousePixelScroll",e,o)}var a,l,u,h="",c=[];return window.addEventListener?(a="addEventListener",l="removeEventListener"):(a="attachEvent",l="detachEvent",h="on"),u="onwheel"in document.createElement("div")?"wheel":void 0!==document.onmousewheel?"mousewheel":"DOMMouseScroll",{on:s,off:r}}()},{}],7:[function(t,e){function o(t){return function(e){window.setTimeout(e,t)}}e.exports={extend:function(t,e){t=t||{};for(var o in e)t[o]=this.isObject(e[o])?this.extend(t[o],e[o]):e[o];return t},isElement:function(t){return t instanceof HTMLElement||t instanceof SVGElement||t instanceof SVGSVGElement||t&&"object"==typeof t&&null!==t&&1===t.nodeType&&"string"==typeof t.nodeName},isObject:function(t){return"[object Object]"===Object.prototype.toString.call(t)},isNumber:function(t){return!isNaN(parseFloat(t))&&isFinite(t)},getSvg:function(t){var e,o;if(this.isElement(t))e=t;else{if(!("string"==typeof t||t instanceof String))throw new Error("Provided selector is not an HTML object nor String");if(e=document.querySelector(t),!e)throw new Error("Provided selector did not find any elements. Selector: "+t)}if("svg"===e.tagName.toLowerCase())o=e;else if("object"===e.tagName.toLowerCase())o=e.contentDocument.documentElement;else{if("embed"!==e.tagName.toLowerCase())throw new Error("img"===e.tagName.toLowerCase()?'Cannot script an SVG in an "img" element. Please use an "object" element or an in-line SVG.':"Cannot get SVG.");o=e.getSVGDocument().documentElement}return o},proxy:function(t,e){return function(){return t.apply(e,arguments)}},getType:function(t){return Object.prototype.toString.apply(t).replace(/^\[object\s/,"").replace(/\]$/,"")},mouseAndTouchNormalize:function(t,e){if(void 0===t.clientX||null===t.clientX)if(t.clientX=0,t.clientY=0,void 0!==t.changedTouches&&t.changedTouches.length){if(void 0!==t.changedTouches[0].clientX)t.clientX=t.changedTouches[0].clientX,t.clientY=t.changedTouches[0].clientY;else if(void 0!==t.changedTouches[0].pageX){var o=e.getBoundingClientRect();t.clientX=t.changedTouches[0].pageX-o.left,t.clientY=t.changedTouches[0].pageY-o.top}}else void 0!==t.originalEvent&&void 0!==t.originalEvent.clientX&&(t.clientX=t.originalEvent.clientX,t.clientY=t.originalEvent.clientY)},isDblClick:function(t,e){if(2===t.detail)return!0;if(void 0!==e&&null!==e){var o=t.timeStamp-e.timeStamp,n=Math.sqrt(Math.pow(t.clientX-e.clientX,2)+Math.pow(t.clientY-e.clientY,2));return 250>o&&10>n}return!1},now:Date.now||function(){return(new Date).getTime()},throttle:function(t,e,o){var n,i,s,r=this,a=null,l=0;o||(o={});var u=function(){l=o.leading===!1?0:r.now(),a=null,s=t.apply(n,i),a||(n=i=null)};return function(){var h=r.now();l||o.leading!==!1||(l=h);var c=e-(h-l);return n=this,i=arguments,0>=c||c>e?(clearTimeout(a),a=null,l=h,s=t.apply(n,i),a||(n=i=null)):a||o.trailing===!1||(a=setTimeout(u,c)),s}},createRequestAnimationFrame:function(t){var e=null;return"auto"!==t&&60>t&&t>1&&(e=Math.floor(1e3/t)),null===e?window.requestAnimationFrame||o(33):o(e)}}},{}]},{},[1]); \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/img/loader.gif b/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/img/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..9c97738a27ad26d4e63494485484f1b5e4a5c73a Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/img/loader.gif differ diff --git a/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/img/search.png b/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/img/search.png new file mode 100644 index 0000000000000000000000000000000000000000..8c6943d42ab8e861373162f11056f1d198146ebf Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/img/search.png differ diff --git a/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/tipuesearch.css b/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/tipuesearch.css new file mode 100644 index 0000000000000000000000000000000000000000..5a94440f9067950769216b1cb3b3d39dfd611dea --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/tipuesearch.css @@ -0,0 +1,158 @@ + +/* +Tipue Search 4.0 +Copyright (c) 2014 Tipue +Tipue Search is released under the MIT License +http://www.tipue.com/search +*/ + + +/* +#tipue_search_input +{ + font: 13px/1.6 'open sans', sans-serif; + color: #333; + padding: 12px 12px 12px 40px; + width: 170px; + border: 1px solid #e2e2e2; + border-radius: 0; + -moz-appearance: none; + -webkit-appearance: none; + box-shadow: none; + outline: 0; + margin: 0; + background: #fff url('img/search.png') no-repeat 15px 15px; +} +*/ + +#tipue_search_content +{ + max-width: 650px; + padding-top: 15px; + margin: 0; +} +#tipue_search_loading +{ + padding-top: 60px; + background: #fff url('img/loader.gif') no-repeat left; +} + +#tipue_search_warning_head +{ + font: 300 15px/1.6 'Open Sans', sans-serif; + color: #555; +} +#tipue_search_warning +{ + font: 300 13px/1.6 'Open Sans', sans-serif; + color: #333; + margin: 7px 0; +} +#tipue_search_warning a +{ + color: #36c; + font-weight: 300; + text-decoration: none; +} +#tipue_search_warning a:hover +{ + color: #333; +} +#tipue_search_results_count +{ + font: 300 13px/1.6 'Open Sans', sans-serif; + color: #333; +} +.tipue_search_content_title +{ + font: 300 25px/1.7 'Open Sans', sans-serif; + text-rendering: optimizelegibility; + margin-top: 23px; +} +.tipue_search_content_title a +{ + color: #333; + text-decoration: none; +} +.tipue_search_content_title a:hover +{ + color: #555; +} +.tipue_search_content_url +{ + font: 300 13px/1.7 'Open Sans', sans-serif; + word-break: break-all; + word-break: break-word; + -webkit-hyphens: auto; + -moz-hyphens: auto; + hyphens: auto; +} +.tipue_search_content_url a +{ + color: #06c; + text-decoration: none; +} +.tipue_search_content_url a:hover +{ + color: #333; +} +.tipue_search_content_text +{ + font: 300 15px/1.6 'Open Sans', sans-serif; + color: #555; + word-break: break-all; + word-break: break-word; + -webkit-hyphens: auto; + -moz-hyphens: auto; + hyphens: auto; + margin-top: 3px; +} +.h01 +{ + color: #333; + font-weight: 400; +} + +#tipue_search_foot +{ + margin: 51px 0 21px 0; +} +#tipue_search_foot_boxes +{ + padding: 0; + margin: 0; + font: 12px/1 'Open Sans', sans-serif; +} +#tipue_search_foot_boxes li +{ + list-style: none; + margin: 0; + padding: 0; + display: inline; +} +#tipue_search_foot_boxes li a +{ + padding: 9px 15px 10px 15px; + background-color: #f1f1f1; + border: 1px solid #dcdcdc; + border-radius: 1px; + color: #333; + margin-right: 7px; + text-decoration: none; + text-align: center; +} +#tipue_search_foot_boxes li.current +{ + padding: 9px 15px 10px 15px; + background: #fff; + border: 1px solid #dcdcdc; + border-radius: 1px; + color: #333; + margin-right: 7px; + text-align: center; +} +#tipue_search_foot_boxes li a:hover +{ + border: 1px solid #ccc; + background-color: #f3f3f3; +} diff --git a/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/tipuesearch.js b/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/tipuesearch.js new file mode 100644 index 0000000000000000000000000000000000000000..b411af5d3a477747db82a77f9eb130d782f57ed6 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/tipuesearch.js @@ -0,0 +1,452 @@ + +/* +Tipue Search 4.0 +Copyright (c) 2014 Tipue +Tipue Search is released under the MIT License +http://www.tipue.com/search +*/ + + +(function($) { + + $.fn.tipuesearch = function(options) { + + var set = $.extend( { + + 'show' : 7, + 'newWindow' : false, + 'showURL' : true, + 'minimumLength' : 3, + 'descriptiveWords' : 25, + 'highlightTerms' : true, + 'highlightEveryTerm' : false, + 'mode' : 'static', + 'liveDescription' : '*', + 'liveContent' : '*', + 'contentLocation' : 'tipuesearch/tipuesearch_content.json' + + }, options); + + return this.each(function() { + + var tipuesearch_in = { + pages: [] + }; + $.ajaxSetup({ + async: false + }); + + if (set.mode == 'live') + { + for (var i = 0; i < tipuesearch_pages.length; i++) + { + $.get(tipuesearch_pages[i], '', + function (html) + { + var cont = $(set.liveContent, html).text(); + cont = cont.replace(/\s+/g, ' '); + var desc = $(set.liveDescription, html).text(); + desc = desc.replace(/\s+/g, ' '); + + var t_1 = html.toLowerCase().indexOf('<title>'); + var t_2 = html.toLowerCase().indexOf('</title>', t_1 + 7); + if (t_1 != -1 && t_2 != -1) + { + var tit = html.slice(t_1 + 7, t_2); + } + else + { + var tit = 'No title'; + } + + tipuesearch_in.pages.push({ + "title": tit, + "text": desc, + "tags": cont, + "loc": tipuesearch_pages[i] + }); + } + ); + } + } + + if (set.mode == 'json') + { + $.getJSON(set.contentLocation, + function(json) + { + tipuesearch_in = $.extend({}, json); + } + ); + } + + if (set.mode == 'static') + { + tipuesearch_in = $.extend({}, tipuesearch); + } + + var tipue_search_w = ''; + if (set.newWindow) + { + tipue_search_w = ' target="_blank"'; + } + + function getURLP(name) + { + return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20')) || null; + } + if (getURLP('q')) + { + $('#tipue_search_input').val(getURLP('q')); + getTipueSearch(0, true); + } + + $(this).keyup(function(event) + { + if(event.keyCode == '13') + { + getTipueSearch(0, true); + } + }); + + function getTipueSearch(start, replace) + { + $('#tipue_search_content').hide(); + var out = ''; + var results = ''; + var show_replace = false; + var show_stop = false; + var standard = true; + var c = 0; + found = new Array(); + + var d = $('#tipue_search_input').val().toLowerCase(); + d = $.trim(d); + + if ((d.match("^\"") && d.match("\"$")) || (d.match("^'") && d.match("'$"))) + { + standard = false; + } + + if (standard) + { + var d_w = d.split(' '); + d = ''; + for (var i = 0; i < d_w.length; i++) + { + var a_w = true; + for (var f = 0; f < tipuesearch_stop_words.length; f++) + { + if (d_w[i] == tipuesearch_stop_words[f]) + { + a_w = false; + show_stop = true; + } + } + if (a_w) + { + d = d + ' ' + d_w[i]; + } + } + d = $.trim(d); + d_w = d.split(' '); + } + else + { + d = d.substring(1, d.length - 1); + } + + if (d.length >= set.minimumLength) + { + if (standard) + { + if (replace) + { + var d_r = d; + for (var i = 0; i < d_w.length; i++) + { + for (var f = 0; f < tipuesearch_replace.words.length; f++) + { + if (d_w[i] == tipuesearch_replace.words[f].word) + { + d = d.replace(d_w[i], tipuesearch_replace.words[f].replace_with); + show_replace = true; + } + } + } + d_w = d.split(' '); + } + + var d_t = d; + for (var i = 0; i < d_w.length; i++) + { + for (var f = 0; f < tipuesearch_stem.words.length; f++) + { + if (d_w[i] == tipuesearch_stem.words[f].word) + { + d_t = d_t + ' ' + tipuesearch_stem.words[f].stem; + } + } + } + d_w = d_t.split(' '); + + for (var i = 0; i < tipuesearch_in.pages.length; i++) + { + var score = 1000000000; + var s_t = tipuesearch_in.pages[i].text; + for (var f = 0; f < d_w.length; f++) + { + var pat = new RegExp(d_w[f], 'i'); + if (tipuesearch_in.pages[i].title.search(pat) != -1) + { + score -= (200000 - i); + } + if (tipuesearch_in.pages[i].text.search(pat) != -1) + { + score -= (150000 - i); + } + + if (set.highlightTerms) + { + if (set.highlightEveryTerm) + { + var patr = new RegExp('(' + d_w[f] + ')', 'gi'); + } + else + { + var patr = new RegExp('(' + d_w[f] + ')', 'i'); + } + s_t = s_t.replace(patr, "<span class=\"h01\">$1</span>"); + } + if (tipuesearch_in.pages[i].tags.search(pat) != -1) + { + score -= (100000 - i); + } + + if (d_w[f].match("^-")) + { + pat = new RegExp(d_w[f].substring(1), 'i'); + if (tipuesearch_in.pages[i].title.search(pat) != -1 || tipuesearch_in.pages[i].text.search(pat) != -1 || tipuesearch_in.pages[i].tags.search(pat) != -1) + { + score = 1000000000; + } + } + } + + if (score < 1000000000) + { + found[c++] = score + '^' + tipuesearch_in.pages[i].title + '^' + s_t + '^' + tipuesearch_in.pages[i].loc; + } + } + } + else + { + for (var i = 0; i < tipuesearch_in.pages.length; i++) + { + var score = 1000000000; + var s_t = tipuesearch_in.pages[i].text; + var pat = new RegExp(d, 'i'); + if (tipuesearch_in.pages[i].title.search(pat) != -1) + { + score -= (200000 - i); + } + if (tipuesearch_in.pages[i].text.search(pat) != -1) + { + score -= (150000 - i); + } + + if (set.highlightTerms) + { + if (set.highlightEveryTerm) + { + var patr = new RegExp('(' + d + ')', 'gi'); + } + else + { + var patr = new RegExp('(' + d + ')', 'i'); + } + s_t = s_t.replace(patr, "<span class=\"h01\">$1</span>"); + } + if (tipuesearch_in.pages[i].tags.search(pat) != -1) + { + score -= (100000 - i); + } + + if (score < 1000000000) + { + found[c++] = score + '^' + tipuesearch_in.pages[i].title + '^' + s_t + '^' + tipuesearch_in.pages[i].loc; + } + } + } + + if (c != 0) + { + if (show_replace == 1) + { + out += '<div id="tipue_search_warning_head">Showing results for ' + d + '</div>'; + out += '<div id="tipue_search_warning">Search instead for <a href="javascript:void(0)" id="tipue_search_replaced">' + d_r + '</a></div>'; + } + if (c == 1) + { + out += '<div id="tipue_search_results_count">1 result</div>'; + } + else + { + c_c = c.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); + out += '<div id="tipue_search_results_count">' + c_c + ' results</div>'; + } + + found.sort(); + var l_o = 0; + for (var i = 0; i < found.length; i++) + { + var fo = found[i].split('^'); + if (l_o >= start && l_o < set.show + start) + { + out += '<div class="tipue_search_content_title"><a href="' + fo[3] + '"' + tipue_search_w + '>' + fo[1] + '</a></div>'; + + if (set.showURL) + { + out += '<div class="tipue_search_content_url"><a href="' + fo[3] + '"' + tipue_search_w + '>' + fo[3] + '</a></div>'; + } + + var t = fo[2]; + var t_d = ''; + var t_w = t.split(' '); + if (t_w.length < set.descriptiveWords) + { + t_d = t; + } + else + { + for (var f = 0; f < set.descriptiveWords; f++) + { + t_d += t_w[f] + ' '; + } + } + t_d = $.trim(t_d); + if (t_d.charAt(t_d.length - 1) != '.') + { + t_d += ' ...'; + } + out += '<div class="tipue_search_content_text">' + t_d + '</div>'; + } + l_o++; + } + + if (c > set.show) + { + var pages = Math.ceil(c / set.show); + var page = (start / set.show); + out += '<nav><ul class="pagination">'; + + if (start > 0) + { + out += '<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="' + (start - set.show) + '_' + replace + '"><span aria-hidden="true">«</span></a></li>'; + } + else + { + out += '<li class="disabled"><span aria-hidden="true">«</span></li>'; + } + + if (page <= 2) + { + var p_b = pages; + if (pages > 3) + { + p_b = 3; + } + for (var f = 0; f < p_b; f++) + { + if (f == page) + { + out += '<li class="active"><a href="#">' + (f + 1) + '<span class="sr-only">(current)</span></a></li>'; + } + else + { + out += '<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="' + (f * set.show) + '_' + replace + '">' + (f + 1) + '</a></li>'; + } + } + } + else + { + var p_b = page + 2; + if (p_b > pages) + { + p_b = pages; + } + for (var f = page - 1; f < p_b; f++) + { + if (f == page) + { + out += '<li class="active"><a href="#">' + (f + 1) + '<span class="sr-only">(current)</span></a></li>'; + } + else + { + out += '<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="' + (f * set.show) + '_' + replace + '">' + (f + 1) + '</a></li>'; + } + } + } + + if (page + 1 != pages) + { + out += '<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="' + (start + set.show) + '_' + replace + '"><span aria-hidden="true">»</span></a></li>'; + } + else + { + out += '<li class="disabled"><span aria-hidden="true">»</span></li>'; + } + + out += '</ul></div>'; + } + } + else + { + out += '<div id="tipue_search_warning_head">Nothing found</div>'; + } + } + else + { + if (show_stop) + { + out += '<div id="tipue_search_warning_head">Nothing found</div><div id="tipue_search_warning">Common words are largely ignored</div>'; + } + else + { + out += '<div id="tipue_search_warning_head">Search too short</div>'; + if (set.minimumLength == 1) + { + out += '<div id="tipue_search_warning">Should be one character or more</div>'; + } + else + { + out += '<div id="tipue_search_warning">Should be ' + set.minimumLength + ' characters or more</div>'; + } + } + } + + $('#tipue_search_content').html(out); + $('#tipue_search_content').slideDown(200); + + $('#tipue_search_replaced').click(function() + { + getTipueSearch(0, false); + }); + + $('.tipue_search_foot_box').click(function() + { + var id_v = $(this).attr('id'); + var id_a = id_v.split('_'); + + getTipueSearch(parseInt(id_a[0]), id_a[1]); + }); + } + + }); + }; + +})(jQuery); + + + + diff --git a/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/tipuesearch.min.js b/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/tipuesearch.min.js new file mode 100644 index 0000000000000000000000000000000000000000..f6cd2b4e76d2152c0ccbd28659e42fa9d5c54d80 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/tipuesearch.min.js @@ -0,0 +1,14 @@ +(function($){$.fn.tipuesearch=function(options){var set=$.extend({"show":7,"newWindow":false,"showURL":true,"minimumLength":3,"descriptiveWords":25,"highlightTerms":true,"highlightEveryTerm":false,"mode":"static","liveDescription":"*","liveContent":"*","contentLocation":"tipuesearch/tipuesearch_content.json"},options);return this.each(function(){var tipuesearch_in={pages:[]};$.ajaxSetup({async:false});if(set.mode=="live")for(var i=0;i<tipuesearch_pages.length;i++)$.get(tipuesearch_pages[i],"",function(html){var cont= +$(set.liveContent,html).text();cont=cont.replace(/\s+/g," ");var desc=$(set.liveDescription,html).text();desc=desc.replace(/\s+/g," ");var t_1=html.toLowerCase().indexOf("<title>");var t_2=html.toLowerCase().indexOf("</title>",t_1+7);if(t_1!=-1&&t_2!=-1)var tit=html.slice(t_1+7,t_2);else var tit="No title";tipuesearch_in.pages.push({"title":tit,"text":desc,"tags":cont,"loc":tipuesearch_pages[i]})});if(set.mode=="json")$.getJSON(set.contentLocation,function(json){tipuesearch_in=$.extend({},json)}); +if(set.mode=="static")tipuesearch_in=$.extend({},tipuesearch);var tipue_search_w="";if(set.newWindow)tipue_search_w=' target="_blank"';function getURLP(name){return decodeURIComponent(((new RegExp("[?|&]"+name+"="+"([^&;]+?)(&|#|;|$)")).exec(location.search)||[,""])[1].replace(/\+/g,"%20"))||null}if(getURLP("q")){$("#tipue_search_input").val(getURLP("q"));getTipueSearch(0,true)}$(this).keyup(function(event){if(event.keyCode=="13")getTipueSearch(0,true)});function getTipueSearch(start,replace){$("#tipue_search_content").hide(); +var out="";var results="";var show_replace=false;var show_stop=false;var standard=true;var c=0;found=new Array;var d=$("#tipue_search_input").val().toLowerCase();d=$.trim(d);if(d.match('^"')&&d.match('"$')||d.match("^'")&&d.match("'$"))standard=false;if(standard){var d_w=d.split(" ");d="";for(var i=0;i<d_w.length;i++){var a_w=true;for(var f=0;f<tipuesearch_stop_words.length;f++)if(d_w[i]==tipuesearch_stop_words[f]){a_w=false;show_stop=true}if(a_w)d=d+" "+d_w[i]}d=$.trim(d);d_w=d.split(" ")}else d= +d.substring(1,d.length-1);if(d.length>=set.minimumLength){if(standard){if(replace){var d_r=d;for(var i=0;i<d_w.length;i++)for(var f=0;f<tipuesearch_replace.words.length;f++)if(d_w[i]==tipuesearch_replace.words[f].word){d=d.replace(d_w[i],tipuesearch_replace.words[f].replace_with);show_replace=true}d_w=d.split(" ")}var d_t=d;for(var i=0;i<d_w.length;i++)for(var f=0;f<tipuesearch_stem.words.length;f++)if(d_w[i]==tipuesearch_stem.words[f].word)d_t=d_t+" "+tipuesearch_stem.words[f].stem;d_w=d_t.split(" "); +for(var i=0;i<tipuesearch_in.pages.length;i++){var score=1E9;var s_t=tipuesearch_in.pages[i].text;for(var f=0;f<d_w.length;f++){var pat=new RegExp(d_w[f],"i");if(tipuesearch_in.pages[i].title.search(pat)!=-1)score-=2E5-i;if(tipuesearch_in.pages[i].text.search(pat)!=-1)score-=15E4-i;if(set.highlightTerms){if(set.highlightEveryTerm)var patr=new RegExp("("+d_w[f]+")","gi");else var patr=new RegExp("("+d_w[f]+")","i");s_t=s_t.replace(patr,'<span class="h01">$1</span>')}if(tipuesearch_in.pages[i].tags.search(pat)!= +-1)score-=1E5-i;if(d_w[f].match("^-")){pat=new RegExp(d_w[f].substring(1),"i");if(tipuesearch_in.pages[i].title.search(pat)!=-1||tipuesearch_in.pages[i].text.search(pat)!=-1||tipuesearch_in.pages[i].tags.search(pat)!=-1)score=1E9}}if(score<1E9)found[c++]=score+"^"+tipuesearch_in.pages[i].title+"^"+s_t+"^"+tipuesearch_in.pages[i].loc}}else for(var i=0;i<tipuesearch_in.pages.length;i++){var score=1E9;var s_t=tipuesearch_in.pages[i].text;var pat=new RegExp(d,"i");if(tipuesearch_in.pages[i].title.search(pat)!= +-1)score-=2E5-i;if(tipuesearch_in.pages[i].text.search(pat)!=-1)score-=15E4-i;if(set.highlightTerms){if(set.highlightEveryTerm)var patr=new RegExp("("+d+")","gi");else var patr=new RegExp("("+d+")","i");s_t=s_t.replace(patr,'<span class="h01">$1</span>')}if(tipuesearch_in.pages[i].tags.search(pat)!=-1)score-=1E5-i;if(score<1E9)found[c++]=score+"^"+tipuesearch_in.pages[i].title+"^"+s_t+"^"+tipuesearch_in.pages[i].loc}if(c!=0){if(show_replace==1){out+='<div id="tipue_search_warning_head">Showing results for '+ +d+"</div>";out+='<div id="tipue_search_warning">Search instead for <a href="javascript:void(0)" id="tipue_search_replaced">'+d_r+"</a></div>"}if(c==1)out+='<div id="tipue_search_results_count">1 result</div>';else{c_c=c.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");out+='<div id="tipue_search_results_count">'+c_c+" results</div>"}found.sort();var l_o=0;for(var i=0;i<found.length;i++){var fo=found[i].split("^");if(l_o>=start&&l_o<set.show+start){out+='<div class="tipue_search_content_title"><a href="'+ +fo[3]+'"'+tipue_search_w+">"+fo[1]+"</a></div>";if(set.showURL)out+='<div class="tipue_search_content_url"><a href="'+fo[3]+'"'+tipue_search_w+">"+fo[3]+"</a></div>";var t=fo[2];var t_d="";var t_w=t.split(" ");if(t_w.length<set.descriptiveWords)t_d=t;else for(var f=0;f<set.descriptiveWords;f++)t_d+=t_w[f]+" ";t_d=$.trim(t_d);if(t_d.charAt(t_d.length-1)!=".")t_d+=" ...";out+='<div class="tipue_search_content_text">'+t_d+"</div>"}l_o++}if(c>set.show){var pages=Math.ceil(c/set.show);var page=start/set.show; +out+='<div id="tipue_search_foot"><ul id="tipue_search_foot_boxes">';if(start>0)out+='<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="'+(start-set.show)+"_"+replace+'">Prev</a></li>';if(page<=2){var p_b=pages;if(pages>3)p_b=3;for(var f=0;f<p_b;f++)if(f==page)out+='<li class="current">'+(f+1)+"</li>";else out+='<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="'+f*set.show+"_"+replace+'">'+(f+1)+"</a></li>"}else{var p_b=page+2;if(p_b>pages)p_b=pages;for(var f=page- +1;f<p_b;f++)if(f==page)out+='<li class="current">'+(f+1)+"</li>";else out+='<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="'+f*set.show+"_"+replace+'">'+(f+1)+"</a></li>"}if(page+1!=pages)out+='<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="'+(start+set.show)+"_"+replace+'">Next</a></li>';out+="</ul></div>"}}else out+='<div id="tipue_search_warning_head">Nothing found</div>'}else if(show_stop)out+='<div id="tipue_search_warning_head">Nothing found</div><div id="tipue_search_warning">Common words are largely ignored</div>'; +else{out+='<div id="tipue_search_warning_head">Search too short</div>';if(set.minimumLength==1)out+='<div id="tipue_search_warning">Should be one character or more</div>';else out+='<div id="tipue_search_warning">Should be '+set.minimumLength+" characters or more</div>"}$("#tipue_search_content").html(out);$("#tipue_search_content").slideDown(200);$("#tipue_search_replaced").click(function(){getTipueSearch(0,false)});$(".tipue_search_foot_box").click(function(){var id_v=$(this).attr("id");var id_a= +id_v.split("_");getTipueSearch(parseInt(id_a[0]),id_a[1])})}})}})(jQuery); diff --git a/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/tipuesearch_content.js b/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/tipuesearch_content.js new file mode 100644 index 0000000000000000000000000000000000000000..db1f3534ffa2746682897995953b4028afe1c0e9 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/tipuesearch_content.js @@ -0,0 +1 @@ +var tipuesearch = {"pages":[{"text":"Flex_extract: Calculation of etadot Note for this version:\nAll code transferred to free form.\nSome code cosmetics, should not have any effects\nRename some source files Developer Info Leopold Haimberger 1 1 Univ. of Vienna, Dept. of Meteorology & Geophysics","tags":"home","loc":"index.html","title":" Flex_extract: Calculation of etadot "},{"text":"This file depends on sourcefile~~calc_etadot.f90~~EfferentGraph sourcefile~calc_etadot.f90 calc_etadot.f90 sourcefile~rwgrib2.f90 rwgrib2.f90 sourcefile~calc_etadot.f90->sourcefile~rwgrib2.f90 sourcefile~ftrafo.f90 ftrafo.f90 sourcefile~calc_etadot.f90->sourcefile~ftrafo.f90 sourcefile~phgrreal.f90 phgrreal.f90 sourcefile~calc_etadot.f90->sourcefile~phgrreal.f90 sourcefile~grphreal.f90 grphreal.f90 sourcefile~calc_etadot.f90->sourcefile~grphreal.f90 sourcefile~ftrafo.f90->sourcefile~phgrreal.f90 sourcefile~grphreal.f90->sourcefile~phgrreal.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\n is dependent upon another if the latter must be compiled before the former\n can be. Contents Programs calc_etadot Functions IA Subroutines STATIS Source Code calc_etadot.f90 Source Code PROGRAM calc_etadot !! Prepare input data for FLEXPART, esp. vertical velocity as !! etadot or etadot * dp/deta !*---------------------------------------------------------------- ! author: L. Haimberger ! date: 03/2010 ! version: V4.0 ! !## Program calc_etadot ! ! **Prepares input data for POP model meteorological preprocessor** ! !----------------------------------------------------------------- ! ! Calculation of etapoint on a regular \\lambda-\\phi grid and writing ! `U,V,ETAPOINT,T,PS,Q,SD,MSL,TCC,10U, 10V, 2T,2D,LSP,CP,SSHF,SSR, ! EWSS,NSSS` ! to an output file (input and output in GRIB 1 or 2 format). ! etapoint is defined as the total time derivative of ! ECMWF vertical coordinate eta multiplied by the derivative ! of pressure with respect to eta: ! \\frac{\\mathrm{d}\\eta}{\\mathrm{d}t}\\frac{\\partial p}{\\partial \\eta} ! !### Version history and authors: ! - 04/1994: Leopold Haimberger, Gerhard Wotawa ! ! - 2003-05-11: Alexander Beck ! ! - 12/2006: L. Haimberger V2.0, ! handle arbitrary regular grids and T799 resolution data ! ! - 03/2010: L. Haimberger V4.0, ! handle GRIB edition 2 fields and T1279 resolution data ! - 04-06/2019: Petra Seibert, ! beautify code and add FORD documentation ! !----------------------------------------------------------------- ! # !## Input required: ! ! UNIT FILE PARAMETER(S) DATA REPRESENTATION ! ! 11 fort.11 T,U,V regular lambda phi grid ! 12 fort.12 D regular lambda phi grid ! 13 fort.13 LNSP spherical harmonics ! 14 fort.14 SD,MSL,TCC,10U, ! 10V,2T,2D regular lambda phi grid ! 16 fort.16 LSP,CP,SSHF, ! SSR,EWSS,NSSS regular lambda phi grid ! 17 fort.17 Q regular lambda phi grid ! !------------------------------------------------------------------ ! !### Output produced: ! ! UNIT FILE PARAMETER(S) DATA REPRESENTATION ! ! 15 fort.15 `U,V,ETA,T,PS, ! `Q,SD,MSL,TCC,` ! `10U,10V,2T,2D,` regular lambda phi grid ! `LSP,CP,SSHF,` ! `SSR,EWSS,NSSS` ! !------------------------------------------------------------------ USE PHTOGR USE GRTOPH USE FTRAFO USE RWGRIB2 USE GRIB_API IMPLICIT NONE REAL , ALLOCATABLE , DIMENSION (:,:) :: LNPS REAL , ALLOCATABLE , DIMENSION (:,:) :: Z REAL , ALLOCATABLE , DIMENSION (:,:,:) :: T , UV , UV2 REAL , ALLOCATABLE , DIMENSION (:,:,:) :: QA , OM , OMR REAL , ALLOCATABLE , DIMENSION (:,:,:) :: DIV , ETA , ETAR REAL , ALLOCATABLE , DIMENSION (:,:) :: DPSDL , DPSDM REAL , ALLOCATABLE , DIMENSION (:,:,:) :: PS , DPSDT REAL , ALLOCATABLE , DIMENSION (:,:,:) :: SURF , FLUX , OROLSM REAL , ALLOCATABLE , DIMENSION (:) :: WSAVE , H , SINL , COSL , WSAVE2 REAL , ALLOCATABLE , DIMENSION (:) :: BREITE , GBREITE , AK , BK , pv ! Arrays for Gaussian grid calculations REAL :: X1 , X2 , RMS , MW , SIG , LAM REAL , ALLOCATABLE :: CUA (:,:,:), CVA (:,:,:) REAL , ALLOCATABLE , DIMENSION (:,:) :: P , PP , P2 REAL , ALLOCATABLE , DIMENSION (:,:) :: XMN , HILFUV REAL , ALLOCATABLE , DIMENSION (:) :: LNPMN , LNPMN2 , LNPMN3 REAL , ALLOCATABLE , DIMENSION (:) :: WEIGHT REAL , ALLOCATABLE , DIMENSION (:,:) :: UGVG REAL , ALLOCATABLE , DIMENSION (:,:) :: DG , ETAG REAL , ALLOCATABLE , DIMENSION (:,:) :: GWSAVE REAL , ALLOCATABLE , DIMENSION (:) :: PSG , HILF ! end arrays for Gaussian grid calculations INTEGER , ALLOCATABLE , DIMENSION (:) :: MLAT , MPSURF , MPFLUX , MPORO , MPAR INTEGER , ALLOCATABLE :: GIFAX (:,:) REAL PI , COSB , DAK , DBK , P00 REAL URLAR8 , JMIN1 , LLLAR8 , MAXBMIN1 , PIR8 , DCOSB INTEGER I , J , K , L , IERR , M , LTEST , MK , NGI , NGJ INTEGER MFLUX , MSURF , MORO INTEGER LUNIT , LUNIT2 INTEGER MAXL , MAXB , MLEVEL , LEVOUT , LEVMIN , LEVMAX INTEGER MOMEGA , MOMEGADIFF , MGAUSS , MSMOOTH , MNAUF , META , METADIFF INTEGER MDPDETA , METAPAR REAL RLO0 , RLO1 , RLA0 , RLA1 CHARACTER * 300 MLEVELIST INTEGER MAUF , MANF , IFAX ( 10 ) INTEGER IGRIB ( 1 ), iret , ogrib CHARACTER * 80 FILENAME NAMELIST / NAMGEN / & MAXL , MAXB , & MLEVEL , MLEVELIST , MNAUF , METAPAR , & RLO0 , RLO1 , RLA0 , RLA1 , & MOMEGA , MOMEGADIFF , MGAUSS , MSMOOTH , META , METADIFF ,& MDPDETA LTEST = 1 CALL POSNAM ( 4 , 'NAMGEN' ) READ ( 4 , NAMGEN ) MAUF = INT ( 36 0. * ( REAL ( MAXL ) - 1. ) / ( RLO1 - RLO0 ) + 0.0001 ) ! PRINT*, MAUF MANF = INT ( REAL ( MAUF ) / 36 0. * ( 36 0. + RLO0 ) + 1.0001 ) IF ( MANF . gt . MAUF ) MANF = MANF - MAUF !------------------------------------------------------------------ !! ALLOCATE VARIABLES !------------------------------------------------------------------ ALLOCATE ( LNPS ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , 1 )) ALLOCATE ( H ( 0 :( MNAUF + 2 ) * ( MNAUF + 3 ) / 2 )) ALLOCATE ( OM ( MAXL , MAXB , MLEVEL )) ALLOCATE ( ETA ( MAXL , MAXB , MLEVEL )) ALLOCATE ( PS ( MAXL , MAXB , 1 ), DPSDT ( MAXL , MAXB , 1 )) ALLOCATE ( WSAVE ( 4 * MAUF + 15 ), WSAVE2 ( 4 * MAUF + 15 )) ALLOCATE ( BREITE ( MAXB ), AK ( MLEVEL + 1 ), BK ( MLEVEL + 1 ), PV ( 2 * MLEVEL + 2 )) ALLOCATE ( MPAR ( 2 )) ALLOCATE ( COSL ( MAXL ), SINL ( MAXL )) ALLOCATE ( CUA ( 2 , 4 , MLEVEL ), CVA ( 2 , 4 , MLEVEL )) !------------------------------------------------------------------ ! GAUSS STUFF !------------------------------------------------------------------ IF ( MGAUSS . EQ . 1 ) THEN LUNIT = 0 FILENAME = 'fort.18' CALL GRIB_OPEN_FILE ( LUNIT , TRIM ( FILENAME ), 'R' ) CALL GRIB_NEW_FROM_FILE ( LUNIT , IGRIB ( 1 ), IRET ) ! we can close the file CALL GRIB_CLOSE_FILE ( LUNIT ) ! call grib_get(igrib(1),'gridType', j) NGJ = MNAUF + 1 ALLOCATE ( GWSAVE ( 8 * NGJ + 15 , NGJ / 2 )) ALLOCATE ( GIFAX ( 10 , NGJ )) ALLOCATE ( GBREITE ( NGJ ), WEIGHT ( NGJ )) ALLOCATE ( MLAT ( NGJ )) ALLOCATE ( P ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 , NGJ / 2 )) ALLOCATE ( PP ( NGJ / 2 , 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 )) ALLOCATE ( Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 , MAXB )) CALL GRIB_GET ( IGRIB ( 1 ), 'numberOfPointsAlongAMeridian' , NGJ ) ! get as a integer call grib_get ( igrib ( 1 ), 'pl' , MLAT ) NGI = SUM ( MLAT ) CALL GRIB_GET ( IGRIB ( 1 ), 'numberOfVerticalCoordinateValues' , MK ) IF ( MK / 2 - 1 . NE . MLEVEL ) THEN WRITE ( * , * ) 'FATAL: Number of model levels' , mk , & ' does not agree with' , MLEVEL , ' in namelist' STOP END IF call grib_get ( igrib ( 1 ), 'pv' , pv ) AK = PV ( 1 : 1 + MLEVEL ) BK = PV ( 2 + MLEVEL : 2 * MLEVEL + 2 ) ALLOCATE ( LNPMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 )) ALLOCATE ( LNPMN2 ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 )) ALLOCATE ( UGVG ( NGI , 2 * MLEVEL ), HILFUV ( 2 * MAXL , 2 )) ALLOCATE ( DPSDL ( NGI , 1 ), DPSDM ( NGI , 1 )) ALLOCATE ( PSG ( NGI ), HILF ( NGI )) ALLOCATE ( UV ( MAXL , MAXB , 2 * MLEVEL )) ! ALLOCATE (UV2(MAXL, MAXB, 2*MLEVEL)) ALLOCATE ( XMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , 2 * MLEVEL )) ALLOCATE ( DG ( NGI , MLEVEL ), ETAG ( NGI , MLEVEL )) !! Initialisieren Legendretransformation auf das LaT/LON Gitter PI = ACOS ( - 1.D0 ) !$OMP PARALLEL DO DO 20 J = 1 , MAXB BREITE ( J ) = SIN (( RLA1 - ( J - 1.D0 ) * ( RLA1 - RLA0 ) / ( MAXB - 1 )) * PI / 18 0.D0 ) CALL PLGNFA ( MNAUF , BREITE ( J ), Z ( 0 , J )) 20 CONTINUE !$OMP END PARALLEL DO ! Avoid possible Pole problem ! IF (RLA0 .EQ. -90.0) BREITE(MAXB)=sin(-89.99*PI/180.d0) ! IF (RLA1 .EQ. 90.0) BREITE(1)=sin(89.99*PI/180.d0) !* Initialisation of fields for FFT and Legendre transformation ! to Gaussian grid and back to phase space X1 =- 1.D0 X2 = 1.D0 CALL GAULEG ( X1 , X2 , GBREITE , WEIGHT , NGJ ) !$OMP PARALLEL DO PRIVATE(M) DO J = 1 , NGJ / 2 CALL PLGNFA ( MNAUF , GBREITE ( J ), P (:, J )) DO M = 0 ,( MNAUF + 3 ) * ( MNAUF + 4 ) / 2 PP ( J , M ) = P ( M , J ) END DO END DO !$OMP END PARALLEL DO ! MPAR(1)=152 FILENAME = 'fort.12' !! read LNSP in SH CALL READSPECTRAL ( FILENAME , LNPMN , MNAUF , 1 , MLEVEL ,( / 152 / ), AK , BK ) CALL SET99 ( WSAVE , IFAX , mauf ) CALL PHGCUT ( LNPMN , PS , WSAVE , IFAX , Z , MNAUF , MNAUF , MAUF , MANF , MAXL , MAXB , 1 ) CALL STATIS ( MAXL , MAXB , 1 , EXP ( PS ), RMS , MW , SIG ) WRITE ( * , '(A,T20,3F12.4)' ) 'STATISTICS PS: ' , RMS , MW , SIG DO J = 1 , NGJ / 2 CALL SET99 ( GWSAVE ( 1 , J ), GIFAX ( 1 , J ), MLAT ( J )) END DO CALL PHGR213 ( LNPMN , HILF , GWSAVE , GIFAX , P , MLAT , MNAUF , NGI , NGJ , 1 ) PSG = HILF CALL GRPH213 ( LNPMN2 , PSG , GWSAVE , GIFAX , PP , WEIGHT , MLAT , MNAUF , NGI , NGJ , 1 ) CALL PHGR213 ( LNPMN2 , HILF , GWSAVE , GIFAX , P , MLAT , MNAUF , NGI , NGJ , 1 ) HILF = exp ( PSG ) - exp ( HILF ) CALL STATIS ( NGI , 1 , 1 , HILF , RMS , MW , SIG ) WRITE ( * , '(A,T20,3F12.4)' ) 'STATISTICS ratio of PS: ' , RMS , MW , SIG PSG = EXP ( PSG ) HILF = PSG CALL STATIS ( NGI , 1 , 1 , HILF , RMS , MW , SIG ) WRITE ( * , '(A,T20,3F12.4)' ) 'STATISTICS PSG: ' , RMS , MW , SIG 111 FILENAME = 'fort.10' !! read u,v in SH CALL READSPECTRAL ( FILENAME , XMN , MNAUF , 2 * MLEVEL , MLEVEL ,( / 131 , 132 / ), AK , BK ) !! Transformieren des Windes auf das Gaussgitter CALL PHGR213 ( XMN , UGVG , GWSAVE , GIFAX , P , MLAT , MNAUF , NGI , NGJ , 2 * MLEVEL ) DO K = 1 , MLEVEL ! North Pole CALL JSPPOLE ( XMN (:, K ), 1 , MNAUF ,. TRUE ., CUA (:,:, K )) CALL JSPPOLE ( XMN (:, MLEVEL + K ), 1 , MNAUF ,. TRUE ., CVA (:,:, K )) ! South Pole CALL JSPPOLE ( XMN (:, K ), - 1 , MNAUF ,. TRUE ., CUA (:, 3 : 4 , K )) CALL JSPPOLE ( XMN (:, MLEVEL + K ), - 1 , MNAUF ,. TRUE ., CVA (:, 3 : 4 , K )) END DO DO K = 1 , 2 * MLEVEL IF ( MSMOOTH . ne . 0 ) CALL SPFILTER ( XMN (:, K ), MNAUF , MSMOOTH ) END DO CALL PHGCUT ( XMN , UV , WSAVE , IFAX , Z , MNAUF , MNAUF , MAUF , MANF , MAXL , MAXB , 2 * MLEVEL ) 112 FILENAME = 'fort.13' !! read DIV in SH CALL READSPECTRAL ( FILENAME , XMN , MNAUF , MLEVEL , MLEVEL ,( / 155 / ), AK , BK ) !! Transformieren der horizontalen Divergenz auf das Gaussgitter CALL PHGR213 ( XMN , DG , GWSAVE , GIFAX , P , MLAT , MNAUF , NGI , NGJ , MLEVEL ) CALL STATIS ( MAXL , MAXB , 1 , DG , RMS , MW , SIG ) WRITE ( * , '(A,T20,3p,3F12.4)' ) 'STATISTICS DG-PS: ' , RMS , MW , SIG !! Berechnung des Gradienten des Logarithmus des Bodendrucks auf dem Gaussgitter CALL PHGRAD ( LNPMN , DPSDL , DPSDM , GWSAVE , GIFAX , P , H , MLAT , MNAUF , NGI , NGJ , 1 ) !! Berechnung der Vertikalgeschwindigkeit auf dem Gaussgitter CALL CONTGL ( HILF , DPSDL , DPSDM , DG , UGVG (:, 1 ), UGVG (:, MLEVEL + 1 ), & GBREITE , ETAG , MLAT , AK , BK , NGI , NGJ , MLEVEL ) ! note that HILF is ps on input and dpsdt*ps on output CALL STATIS ( MAXL , MAXB , 1 , ETAG , RMS , MW , SIG ) WRITE ( * , '(A,T20,3p,3F12.4)' ) 'STATISTICS ETAG-PS: ' , RMS , MW , SIG CALL GRPH213 ( XMN , ETAG , GWSAVE , GIFAX , PP , WEIGHT , MLAT , MNAUF , NGI , NGJ , MLEVEL ) CALL STATIS ( MAXL , MAXB , 1 , ETAG , RMS , MW , SIG ) WRITE ( * , '(A,T20,3p,3F12.4)' ) 'STATISTICS ETAG-PS: ' , RMS , MW , SIG DO K = 1 , MLEVEL IF ( MSMOOTH . ne . 0 ) CALL SPFILTER ( XMN (:, K ), MNAUF , MSMOOTH ) END DO CALL PHGCUT ( XMN , ETA , WSAVE , IFAX , Z , MNAUF , MNAUF , MAUF , MANF , MAXL , MAXB , MLEVEL ) CALL STATIS ( MAXL , MAXB , 1 , ETA , RMS , MW , SIG ) WRITE ( * , '(A,T20,3p,3F12.4)' ) 'STATISTICS ETA-PS: ' , RMS , MW , SIG CALL GRPH213 ( XMN , HILF , GWSAVE , GIFAX , PP , WEIGHT , MLAT , MNAUF , NGI , NGJ , 1 ) CALL STATIS ( MAXL , MAXB , 1 , HILF , RMS , MW , SIG ) WRITE ( * , '(A,T20,3p,3F12.4)' ) 'STATISTICS HILF-PS: ' , RMS , MW , SIG IF ( MSMOOTH . ne . 0 ) CALL SPFILTER ( XMN (:, 1 ), MNAUF , MSMOOTH ) CALL PHGCUT ( XMN , DPSDT , WSAVE , IFAX , Z , MNAUF , MNAUF , MAUF , MANF , MAXL , MAXB , 1 ) CALL STATIS ( MAXL , MAXB , 1 , DPSDT , RMS , MW , SIG ) WRITE ( * , '(A,T20,3F12.4)' ) 'STATISTICS DPSDT: ' , RMS , MW , SIG IF ( MOMEGADIFF . ne . 0 ) THEN !! Berechnung von Omega auf dem Gaussgitter CALL OMEGA ( PSG , DPSDL , DPSDM , DG , UGVG (:, 1 ), UGVG (:, MLEVEL + 1 ), & GBREITE , ETAG , MLAT , AK , BK , NGI , NGJ , MLEVEL ) CALL GRPH213 ( XMN , ETAG , GWSAVE , GIFAX , PP , WEIGHT , MLAT , MNAUF , NGI , NGJ , MLEVEL ) DO K = 1 , MLEVEL IF ( MSMOOTH . ne . 0 ) CALL SPFILTER ( XMN (:, K ), MNAUF , MSMOOTH ) END DO CALL PHGCUT ( XMN , OM , WSAVE , IFAX , Z , MNAUF , MNAUF , MAUF , MANF , MAXL , MAXB , MLEVEL ) END IF ! MOMEGA CALL GRPH213 ( XMN , PSG , GWSAVE , GIFAX , PP , WEIGHT , MLAT , MNAUF , NGI , NGJ , 1 ) CALL STATIS ( MAXL , MAXB , 1 , PSG , RMS , MW , SIG ) WRITE ( * , '(A,T20,3F12.4)' ) 'STATISTICS PSG-PS: ' , RMS , MW , SIG CALL PHGCUT ( XMN , PS , WSAVE , IFAX , Z , MNAUF , MNAUF , MAUF , MANF , MAXL , MAXB , 1 ) CALL STATIS ( MAXL , MAXB , 1 , PS , RMS , MW , SIG ) WRITE ( * , '(A,T20,3F12.4)' ) 'STATISTICS PS: ' , RMS , MW , SIG 114 DEALLOCATE ( HILF , PSG , DPSDL , DPSDM , ETAG , DG , LNPMN ) ! ALLOCATE (UV(MAXL, MAXB, 2*MLEVEL)) ! CALL GRPH213(XMN,UGVG,GWSAVE,GIFAX,PP,WEIGHT,MLAT, ! *MNAUF,NGI,NGJ,2*MLEVEL) ! DO K=1,2*MLEVEL ! IF (MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH) ! END DO ! CALL PHGCUT(XMN,UV,WSAVE,IFAX,Z, ! *MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,2*MLEVEL) DEALLOCATE ( PP , P , UGVG , MLAT , GBREITE , WEIGHT , GWSAVE , XMN ) ! CALL ETAGAUSS(Z,WSAVE ! *,BREITE,UV,ETA,OM,PS, ! *MAUF,MAXB,MAXL,MANF,MNAUF,MLEVEL,MSMOOTH) ELSE !----------------------------------------------------------------- ! READING OF PREPARED METEOROLOGICAL FIELDS ! ! THE FOLLOWING FIELDS ARE EXPECTED: ! ! UNIT 11: T,U,V (REGULAR GRID) ! UNIT 17: Q (REGULAR GRID) ! UNIT 13: D (REGULAR GRID) ! UNIT 12: LNSP (SPHERICAL HARMONICS) ! UNIT 14: SURFACE DATA (REGULAR GRID) ! UNIT 16: FLUX DATA (REGULAR GRID) !------------------------------------------------------------------ ALLOCATE ( MLAT ( MAXB )) MLAT = MAXL ALLOCATE ( Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 , 1 )) ALLOCATE ( DPSDL ( MAXL , MAXB ), DPSDM ( MAXL , MAXB )) ALLOCATE ( UV ( MAXL , MAXB , 2 * MLEVEL ), DIV ( MAXL , MAXB , MLEVEL )) !------------------------------------------------------------------ !! READING OF SURFACE PRESSURE !------------------------------------------------------------------ FILENAME = 'fort.12' CALL READSPECTRAL ( FILENAME , LNPS , MNAUF , 1 , MLEVEL ,( / 152 / ), AK , BK ) !------------------------------------------------------------------ !! READING OF U,V !------------------------------------------------------------------ ! OPENING OF UNBLOCKED GRIB FILE FILENAME = 'fort.10' CALL READLATLON ( FILENAME , UV , MAXL , MAXB , 2 * MLEVEL ,( / 131 , 132 / )) PI = ACOS ( - 1.D0 ) DO J = 1 , MAXB BREITE ( J ) = SIN (( RLA1 - ( J - 1.D0 ) * ( RLA1 - RLA0 ) / ( MAXB - 1 )) * PI / 18 0.D0 ) END DO ! Avoid possible Pole problem ! IF (RLA0 .EQ. -90.0) BREITE(MAXB)=sin(-89.99*PI/180.d0) ! IF (RLA1 .EQ. 90.0) BREITE(1)=sin(89.99*PI/180.d0) DO K = 1 , 2 * MLEVEL DO J = 1 , MAXB COSB = SQRT ( 1.0 - ( BREITE ( J )) * ( BREITE ( J ))) IF ( RLA0 . EQ . - 9 0.0 . AND . J . EQ . MAXB . OR . & RLA1 . EQ . 9 0.0 . AND . J . EQ . 1 ) THEN UV (:, J , K ) = UV (:, J , K ) / 1.D6 ELSE UV (:, J , K ) = UV (:, J , K ) * COSB END IF END DO END DO !------------------------------------------------------------------ !! READING OF LNSP on grid !------------------------------------------------------------------ ! For debugging only ! FILENAME='LNSPG_G.20060330.600' ! INQUIRE(FILE=FILENAME,EXIST=EX) ! CALL READLATLON(FILENAME,QA, ! *MAXL,MAXB,1,1,(/152/)) !------------------------------------------------------------------ !! READING OF DIVERGENCE !------------------------------------------------------------------ IF ( META . EQ . 0 . OR . METADIFF . EQ . 1 ) THEN FILENAME = 'fort.13' CALL READLATLON ( FILENAME , DIV , MAXL , MAXB , MLEVEL ,( / 155 / )) END IF !------------------------------------------------------------------ ! ! Calculation of etapoint --> total time derivative of ! ECMWF vertical coordinate eta multiplied by the derivative ! of pressure with respect to eta: ! \\frac{\\mathrm{d}\\eta}{\\mathrm{d}t}\\frac{\\partial p}{\\partial \\eta} !------------------------------------------------------------------ !* Initialisieren Legendretransformation auf das LaT/LON Gitter !! Without Gaussian grid calculation Legendre Polynomials are calculated !! only for one latitude to save space DO J = 1 , MAXB CALL PLGNFA ( MNAUF , BREITE ( J ), Z ( 0 , 1 )) CALL PHGCUT ( LNPS , PS (:, J , 1 ), WSAVE , IFAX , Z , MNAUF , MNAUF , MAUF , MANF , MAXL , 1 , 1 ) IF ( META . EQ . 0 . OR . METADIFF . EQ . 1 ) THEN CALL PHGRACUT ( LNPS , DPSDL (:, J ), DPSDM (:, J ), WSAVE , IFAX , Z , H , MAUF , & MNAUF , MAXL , 1 , MANF , 1 ) END IF END DO PS = EXP ( PS ) ! For debugging only CALL STATIS ( MAXL , MAXB , 1 , PS (:,:, 1 ), RMS , MW , SIG ) WRITE ( * , '(A,T20,3F12.4)' ) 'STATISTICS: ' , RMS , MW , SIG IF ( MOMEGADIFF . ne . 0 ) THEN CALL OMEGA ( PS , DPSDL , DPSDM , DIV , UV (:,:, 1 ), UV (:,:, MLEVEL + 1 ), & BREITE , OM , MLAT , AK , BK , MAXL * MAXB , MAXB , MLEVEL ) END IF IF ( META . EQ . 0 . OR . METADIFF . ne . 0 ) THEN DPSDT = PS CALL CONTGL ( DPSDT , DPSDL , DPSDM , DIV , UV (:,:, 1 ), UV (:,:, MLEVEL + 1 ), & BREITE , ETA , MLAT , AK , BK , MAXL * MAXB , MAXB , MLEVEL ) END IF END IF ! MGAUSS !! CREATE FILE VERTICAL.EC NEEDED BY POP MODEL OPEN ( 21 , FILE = 'VERTICAL.EC' ) WRITE ( 21 , '(A)' ) WRITE ( 21 , '(A)' ) 'VERTICAL DISCRETIZATION OF POP MODEL' WRITE ( 21 , '(A)' ) write ( 21 , '(i3,a)' ) MLEVEL , ' number of layers' WRITE ( 21 , '(A)' ) WRITE ( 21 , '(A)' ) '* A(NLEV+1)' WRITE ( 21 , '(A)' ) DO 205 I = 1 , MLEVEL + 1 205 WRITE ( 21 , '(F18.12)' ) AK ( I ) WRITE ( 21 , '(A)' ) WRITE ( 21 , '(A)' ) '* B(NLEV+1)' WRITE ( 21 , '(A)' ) DO 210 I = 1 , MLEVEL + 1 210 WRITE ( 21 , '(F18.12)' ) BK ( I ) CLOSE ( 21 ) !------------------------------------------------------------------ ! READING OF OMEGA !------------------------------------------------------------------ IF ( MOMEGA . NE . 0 ) THEN ALLOCATE ( OMR ( MAXL , MAXB , MLEVEL )) FILENAME = 'fort.19' CALL READLATLON ( FILENAME , OMR , MAXL , MAXB , MLEVEL ,( / 135 / )) IF ( MOMEGADIFF . NE . 0 ) THEN DO K = 1 , MLEVEL CALL STATIS ( MAXL , MAXB , 1 , ETA (:,:, K ), RMS , MW , SIG ) WRITE ( * , '(A12,I3,3F12.4)' ) ' ETA: ' , K , RMS , MW , SIG CALL STATIS ( MAXL , MAXB , 1 , OMR (:,:, K ), RMS , MW , SIG ) WRITE ( * , '(A12,I3,3F12.4)' ) ' OMEGA: ' , K , RMS , MW , SIG CALL STATIS ( MAXL , MAXB , 1 , OM (:,:, K ) - OMR (:,:, K ), RMS , MW , SIG ) WRITE ( * , '(A12,I3,3F12.4)' ) 'OMEGA DIFF: ' , K , RMS , MW , SIG END DO END IF END IF !------------------------------------------------------------------ ! READING OF ETA !------------------------------------------------------------------ IF ( META . NE . 0 ) THEN ALLOCATE ( ETAR ( MAXL , MAXB , MLEVEL )) P00 = 10132 5. FILENAME = 'fort.21' CALL READLATLON ( FILENAME , ETAR , MAXL , MAXB , MLEVEL ,( / 77 / )) IF ( MDPDETA . EQ . 1 ) THEN DO K = 1 , MLEVEL DAK = AK ( K + 1 ) - AK ( K ) DBK = BK ( K + 1 ) - BK ( K ) DO J = 1 , MAXB DO I = 1 , MAXL ETAR ( I , J , K ) = 2 * ETAR ( I , J , K ) * PS ( I , J , 1 ) * ( DAK / PS ( I , J , 1 ) + DBK ) / & ( DAK / P00 + DBK ) IF ( K . GT . 1 ) ETAR ( I , J , K ) = ETAR ( I , J , K ) - ETAR ( I , J , K - 1 ) END DO END DO END DO END IF IF ( METADIFF . NE . 0 ) THEN DO K = 1 , MLEVEL CALL STATIS ( MAXL , MAXB , 1 , ETA (:,:, K ), RMS , MW , SIG ) WRITE ( * , '(A12,I3,3F12.4)' ) ' ETA: ' , K , RMS , MW , SIG CALL STATIS ( MAXL , MAXB , 1 , ETAR (:,:, K ), RMS , MW , SIG ) WRITE ( * , '(A12,I3,3F12.4)' ) ' ETAR: ' , K , RMS , MW , SIG CALL STATIS ( MAXL , MAXB , 1 , ETA (:,:, K ) - ETAR (:,:, K ), RMS , MW , SIG ) WRITE ( * , '(A12,I3,3F12.4)' ) 'ETA DIFF: ' , K , RMS , MW , SIG END DO DO K = 1 , MLEVEL WRITE ( * , '(I3,2F12.4)' ) K , ETA ( 1 , MAXB / 2 , K ), ETAR ( 1 , MAXB / 2 , K ) END DO ELSE ETA = ETAR END IF END IF ALLOCATE ( T ( MAXL , MAXB , MLEVEL )) ALLOCATE ( QA ( MAXL , MAXB , MLEVEL )) !------------------------------------------------------------------ !! READING OF T !------------------------------------------------------------------ ! OPENING OF UNBLOCKED GRIB FILE FILENAME = 'fort.11' CALL READLATLON ( FILENAME , T , MAXL , MAXB , MLEVEL ,( / 130 / )) !------------------------------------------------------------------ !! READING OF SPECIFIC HUMIDITY !------------------------------------------------------------------ FILENAME = 'fort.17' CALL READLATLON ( FILENAME , QA , MAXL , MAXB , MLEVEL ,( / 133 / )) !------------------------------------------------------------------ ! TEST READING OF UV from MARS (debug only) !------------------------------------------------------------------ ! FILENAME='fort.22' ! CALL READLATLON(FILENAME,UV2,MAXL,MAXB,2*MLEVEL,2,(/131,132/)) !------------------------------------------------------------------ !! WRITE MODEL LEVEL DATA TO fort.15 !------------------------------------------------------------------ !! Calculation of etadot in CONTGL needed scaled winds (ucosphi,vcosphi) !! Now we are transforming back to the usual winds. DO K = 1 , MLEVEL DO J = 2 , MAXB - 1 COSB = SQRT ( 1.0 - ( BREITE ( J )) * ( BREITE ( J ))) UV (:, J , K ) = UV (:, J , K ) / COSB UV (:, J , MLEVEL + K ) = UV (:, J , MLEVEL + K ) / COSB END DO ! special treatment for poles, if necessary. DO J = 1 , MAXB , MAXB - 1 COSB = SQRT ( 1.0 - ( BREITE ( J )) * ( BREITE ( J ))) IF ( 1.0 - BREITE ( J ) * BREITE ( J ) . GT . 0 . OR . MGAUSS . NE . 1 ) THEN IF ( RLA0 . EQ . - 9 0.0 . AND . J . EQ . MAXB . OR . & RLA1 . EQ . 9 0.0 . AND . J . EQ . 1 ) THEN UV (:, J , K ) = UV (:, J , K ) * 1.D6 UV (:, J , MLEVEL + K ) = UV (:, J , MLEVEL + K ) * 1.D6 ELSE UV (:, J , K ) = UV (:, J , K ) / COSB UV (:, J , MLEVEL + K ) = UV (:, J , MLEVEL + K ) / COSB END IF ELSE HILFUV ( 5 : MAXL ,:) = 0. HILFUV ( 1 : 2 ,:) = 0. IF ( J . EQ . MAXB ) THEN ! Suedpol HILFUV ( 3 : 4 , 1 ) = CUA (:, 4 , K ) HILFUV ( 3 : 4 , 2 ) = CVA (:, 4 , K ) ELSE ! Nordpol HILFUV ( 3 : 4 , 1 ) = CUA (:, 2 , K ) HILFUV ( 3 : 4 , 2 ) = CVA (:, 2 , K ) END IF CALL RFOURTR ( HILFUV (:, 1 ), WSAVE , IFAX , MAXL / 2 - 1 , MAXL , - 1 ) DO I = 0 , MAXL - 1 IF ( MANF + I . LE . MAXL ) THEN UV ( I + 1 , J , K ) = HILFUV ( MANF + I , 1 ) ELSE UV ( I + 1 , J , K ) = HILFUV ( MANF - MAXL + I , 1 ) END IF END DO CALL RFOURTR ( HILFUV (:, 2 ), WSAVE , IFAX , MAXL / 2 - 1 , MAXL , - 1 ) DO I = 0 , MAXL - 1 IF ( MANF + I . LE . MAXL ) THEN UV ( I + 1 , J , MLEVEL + K ) = HILFUV ( MANF + I , 2 ) ELSE UV ( I + 1 , J , MLEVEL + K ) = HILFUV ( MANF - MAXL + I , 2 ) END IF END DO end if END DO END DO ! open output file call grib_open_file ( LUNIT , 'fort.15' , 'w' ) ! we use temperature on lat/lon on model levels as template for model level data LUNIT2 = 0 CALL GRIB_OPEN_FILE ( LUNIT2 , 'fort.11' , 'R' ) CALL GRIB_NEW_FROM_FILE ( LUNIT2 , IGRIB ( 1 ), IRET ) CALL GRIB_CLOSE_FILE ( LUNIT2 ) CALL WRITELATLON & ( LUNIT , IGRIB ( 1 ), OGRIB , UV (:,:, 1 ), MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 131 / )) CALL WRITELATLON & ( LUNIT , IGRIB ( 1 ), OGRIB , UV (:,:, MLEVEL + 1 ), MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 132 / )) IF ( MDPDETA . ne . 1 . AND . MGAUSS . EQ . 0 . and . META . eq . 1 ) THEN CALL WRITELATLON & ( LUNIT , IGRIB ( 1 ), OGRIB , ETA , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 77 / )) ELSE CALL WRITELATLON & ( LUNIT , IGRIB ( 1 ), OGRIB , ETA , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / METAPAR / )) END IF CALL WRITELATLON ( LUNIT , IGRIB ( 1 ), OGRIB , T , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 130 / )) CALL WRITELATLON ( LUNIT , IGRIB ( 1 ), OGRIB , PS , MAXL , MAXB , 1 , '1' , 1 ,( / 134 / )) CALL GRIB_SET ( IGRIB ( 1 ), \"levelType\" , \"ml\" ) CALL GRIB_SET ( IGRIB ( 1 ), \"typeOfLevel\" , \"hybrid\" ) CALL WRITELATLON ( LUNIT , IGRIB ( 1 ), OGRIB , QA , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 133 / )) IF ( MOMEGA . EQ . 1 ) THEN CALL GRIB_OPEN_FILE ( LUNIT2 , 'fort.25' , 'w' ) CALL WRITELATLON & ( LUNIT2 , IGRIB ( 1 ), OGRIB , OMR , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 135 / )) IF ( MOMEGADIFF . EQ . 1 ) THEN CALL WRITELATLON ( LUNIT2 , IGRIB ( 1 ), OGRIB , DPSDT , MAXL , MAXB , 1 , '1' , 1 ,( / 158 / )) OM = OM - OMR CALL WRITELATLON & ( LUNIT2 , IGRIB ( 1 ), OGRIB , OM , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 001 / )) CALL GRIB_CLOSE_FILE ( LUNIT2 ) END IF END IF IF ( META . EQ . 1 . AND . METADIFF . EQ . 1 ) THEN CALL GRIB_OPEN_FILE ( LUNIT2 , 'fort.26' , 'w' ) CALL WRITELATLON & ( LUNIT2 , IGRIB ( 1 ), OGRIB , ETAR , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 135 / )) ! IF (MOMEGADIFF .EQ. 1) THEN CALL WRITELATLON ( LUNIT2 , IGRIB ( 1 ), OGRIB , DPSDT , MAXL , MAXB , 1 , '1' , 1 ,( / 158 / )) OM = ETA - ETAR CALL WRITELATLON & ( LUNIT2 , IGRIB ( 1 ), OGRIB , OM , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 001 / )) CALL GRIB_CLOSE_FILE ( LUNIT2 ) ! END IF END IF CALL GRIB_CLOSE_FILE ( LUNIT ) 2000 STOP 'SUCCESSFULLY FINISHED calc_etadot: CONGRATULATIONS' 3000 STOP 'ROUTINE calc_etadot: ERROR' 9999 stop 'ROUTINE calc_etadot: ERROR' END !------------------------------------------------------------------ INTEGER FUNCTION IA ( FIELD1 , NI , NJ , NK , G ) !------------------------------------------------------------------ !! Calculate something that is roughly log10( maxval(field1)/g ) [PS] !------------------------------------------------------------------ IMPLICIT NONE INTEGER :: I , J , K INTEGER , INTENT ( IN ) :: NI , NJ , NK REAL , INTENT ( IN ) :: FIELD1 ( NI , NJ , NK ) REAL , INTENT ( IN ) :: G REAL :: RMIN , RMAX , XMAX , A , A1 , A2 RMAX = FIELD1 ( 1 , 1 , 1 ) RMIN = FIELD1 ( 1 , 1 , 1 ) DO 100 K = 1 , NK DO 100 J = 1 , NJ DO 100 I = 1 , NI IF ( FIELD1 ( I , J , K ) . GT . RMAX ) RMAX = FIELD1 ( I , J , K ) IF ( FIELD1 ( I , J , K ) . LT . RMIN ) RMIN = FIELD1 ( I , J , K ) 100 CONTINUE IF ( ABS ( RMIN ) . GT . RMAX . OR . ABS ( RMIN ) . EQ . RMAX ) THEN XMAX = ABS ( RMIN ) ELSE XMAX = RMAX END IF IF ( XMAX . EQ . 0 ) THEN IA = 0 RETURN END IF A1 = LOG10 ( ( G / 1 0.d0 ) / XMAX ) A2 = LOG10 ( G / XMAX ) IF ( A1 . gt . A2 ) THEN A = A2 ELSE A = A1 END IF IF ( A . GT . 0 ) IA = INT ( A ) IF ( A . LT . 0 ) IA = INT ( A - 1.0 ) RETURN END SUBROUTINE STATIS ( NI , NJ , NK , PHI , RMS , MW , SIG ) !------------------------------------------------------------------ !! calculate mean, rms, stdev !------------------------------------------------------------------ IMPLICIT REAL ( A - H , O - Z ) REAL PHI ( NI , NJ , NK ), SIG , MW , RMS , P N = NI * NJ * NK RMS = 0. MW = 0. ! 10.86 sinstead of 11.04 sec DO 10 K = 1 , NK DO 10 J = 1 , NJ DO 10 I = 1 , NI P = PHI ( I , J , K ) RMS = RMS + P * P MW = MW + P 10 CONTINUE RMS = SQRT ( RMS / N ) MW = MW / N IF ( RMS * RMS - MW * MW . LT . 0. ) THEN SIG = 0.0 ELSE SIG = SQRT ( RMS * RMS - MW * MW ) END IF RETURN END","tags":"","loc":"sourcefile/calc_etadot.f90.html","title":"calc_etadot.f90 – Flex_extract: Calculation of etadot"},{"text":"Files dependent on this one sourcefile~~rwgrib2.f90~~AfferentGraph sourcefile~rwgrib2.f90 rwgrib2.f90 sourcefile~calc_etadot.f90 calc_etadot.f90 sourcefile~calc_etadot.f90->sourcefile~rwgrib2.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\n is dependent upon another if the latter must be compiled before the former\n can be. Contents Modules RWGRIB2 Source Code rwgrib2.f90 Source Code MODULE RWGRIB2 CONTAINS SUBROUTINE READLATLON ( FILENAME , FELD , MAXL , MAXB , MLEVEL , MPAR ) !! Read a field from GRIB file on lat-lon grid USE GRIB_API IMPLICIT NONE integer :: ifile integer :: iret integer :: n , mk , parid , nm integer :: i , k integer , dimension (:), allocatable :: igrib integer :: numberOfPointsAlongAParallel integer :: numberOfPointsAlongAMeridian real , dimension (:), allocatable :: values integer :: numberOfValues real , dimension ( maxl , maxb , mlevel ) :: feld integer :: maxl , maxb , mlevel , mstride , mpar (:), irest , div , level integer :: l ( size ( mpar )) character * ( * ) :: filename feld = 0. call grib_open_file ( ifile , TRIM ( FILENAME ), 'r' ) ! count the messages in the file call grib_count_in_file ( ifile , n ) allocate ( igrib ( n )) igrib =- 1 ! Load the messages from the file. DO i = 1 , n call grib_new_from_file ( ifile , igrib ( i ), iret ) END DO ! we can close the file call grib_close_file ( ifile ) nm = size ( mpar ) div = mlevel / nm l = 0 ! Loop on all the messages in memory iloop : DO i = 1 , n ! write(*,*) 'processing message number ',i ! get as a integer call grib_get ( igrib ( i ), 'numberOfPointsAlongAParallel' , & numberOfPointsAlongAParallel ) ! get as a integer call grib_get ( igrib ( i ), 'numberOfPointsAlongAMeridian' , & numberOfPointsAlongAMeridian ) call grib_get ( igrib ( i ), 'numberOfVerticalCoordinateValues' , mk ) call grib_get_size ( igrib ( i ), 'values' , numberOfValues ) ! write(*,*) 'numberOfValues=',numberOfValues allocate ( values ( numberOfValues ), stat = iret ) ! get data values call grib_get ( igrib ( i ), 'values' , values ) call grib_get ( igrib ( i ), 'paramId' , parid ) call grib_get ( igrib ( i ), 'level' , level ) kloop : do k = 1 , nm if ( parid . eq . mpar ( k )) then ! l(k)=l(k)+1 feld (:,:,( k - 1 ) * div + level ) = reshape ( values ,( / maxl , maxb / )) ! print*,(k-1)*div+l(k),parid exit kloop end if end do kloop if ( k . gt . nm . and . parid . ne . mpar ( nm )) then write ( * , * ) k , nm , parid , mpar ( nm ) write ( * , * ) 'ERROR readlatlon: parameter ' , parid , 'is not' , mpar stop end if ! print*,i END DO iloop !! write(*,*) 'readlatlon: ',i-1,' records read' DO i = 1 , n call grib_release ( igrib ( i )) END DO if ( allocated ( values )) deallocate ( values ) deallocate ( igrib ) END SUBROUTINE READLATLON SUBROUTINE WRITELATLON ( iunit , igrib , ogrib , FELD , MAXL , MAXB , MLEVEL ,& MLEVELIST , MSTRIDE , MPAR ) !! write a field on lat-lon grid to GRIB file USE GRIB_API IMPLICIT NONE INTEGER IFIELD , MLEVEL , MNAUF , I , J , K , L , MSTRIDE , IERR , JOUT INTEGER MPAR ( MSTRIDE ), MAXL , MAXB , LEVMIN , LEVMAX INTEGER IUNIT , igrib , ogrib REAL ZSEC4 ( MAXL * MAXB ) REAL FELD ( MAXL , MAXB , MLEVEL ) CHARACTER * ( * ) MLEVELIST INTEGER ILEVEL ( MLEVEL ), MLINDEX ( MLEVEL + 1 ), LLEN ! parse MLEVELIST LLEN = len ( trim ( MLEVELIST )) if ( index ( MLEVELIST , 'to' ) . ne . 0 . or . index ( MLEVELIST , 'TO' ) . ne . 0 ) THEN i = index ( MLEVELIST , '/' ) read ( MLEVELIST ( 1 : i - 1 ), * ) LEVMIN i = index ( MLEVELIST , '/' ,. true .) read ( MLEVELIST ( i + 1 : LLEN ), * ) LEVMAX l = 0 do i = LEVMIN , LEVMAX l = l + 1 ILEVEL ( l ) = i end do else l = 1 MLINDEX ( 1 ) = 0 do i = 1 , LLEN if ( MLEVELIST ( i : i ) . eq . '/' ) THEN l = l + 1 MLINDEX ( l ) = i end if end do MLINDEX ( l + 1 ) = LLEN + 1 do i = 1 , l read ( MLEVELIST ( MLINDEX ( i ) + 1 : MLINDEX ( i + 1 ) - 1 ), * ) ILEVEL ( i ) end do end if DO k = 1 , l call grib_set ( igrib , \"level\" , ILEVEL ( k )) DO j = 1 , MSTRIDE call grib_set ( igrib , \"paramId\" , MPAR ( j )) ! if (MPAR(j) .eq. 87) then ! call grib_set(igrib,\"shortName\",\"etadot\") ! call grib_set(igrib,\"units\",\"Pa,s**-1\") ! end if ! if (MPAR(j) .eq. 77) then ! call grib_set(igrib,\"shortName\",\"etadot\") ! call grib_set(igrib,\"units\",\"s**-1\") ! end if if ( l . ne . mlevel ) then zsec4 ( 1 : maxl * maxb ) = RESHAPE ( FELD (:,:, ILEVEL ( k )),( / maxl * maxb / )) else zsec4 ( 1 : maxl * maxb ) = RESHAPE ( FELD (:,:, k ),( / maxl * maxb / )) end if call grib_set ( igrib , \"values\" , zsec4 ) call grib_write ( igrib , iunit ) END DO END DO END SUBROUTINE WRITELATLON SUBROUTINE READSPECTRAL ( FILENAME , CXMN , MNAUF , MLEVEL , MAXLEV , MPAR , A , B ) !! read a GRIB file in spherical harmonics USE GRIB_API IMPLICIT NONE integer :: ifile integer :: iret integer :: n , mk , div , nm , k integer :: i , j , parid integer , dimension (:), allocatable :: igrib real , dimension (:), allocatable :: values integer :: numberOfValues , maxlev REAL :: A ( MAXLEV + 1 ), B ( MAXLEV + 1 ), pv ( 2 * MAXLEV + 2 ) REAL :: CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , MLEVEL ) integer :: maxl , maxb , mlevel , mstride , mpar (:), mnauf , ioffset , ipar , ilev , l ( size ( mpar )) character * ( * ) :: filename call grib_open_file ( ifile , TRIM ( FILENAME ), 'r' ) ! count the messages in the file call grib_count_in_file ( ifile , n ) allocate ( igrib ( n )) igrib =- 1 ! Load the messages from the file. DO i = 1 , n call grib_new_from_file ( ifile , igrib ( i ), iret ) END DO ! we can close the file call grib_close_file ( ifile ) l = 0 ! Loop on all the messages in memory iloop : DO i = 1 , n ! write(*,*) 'processing message number ',i ! get as a integer call grib_get ( igrib ( i ), 'pentagonalResolutionParameterJ' , j ) call grib_get_size ( igrib ( i ), 'values' , numberOfValues ) ! write(*,*) 'numberOfValues=',numberOfValues call grib_get ( igrib ( i ), 'numberOfVerticalCoordinateValues' , mk ) call grib_get ( igrib ( i ), 'level' , ilev ) call grib_get ( igrib ( i ), 'pv' , pv ) allocate ( values ( numberOfValues ), stat = iret ) ! get data values call grib_get ( igrib ( i ), 'values' , values ) ! IOFFSET=mod(i-1,MSTRIDE)*(mk/2-1) ! CXMN(:,IOFFSET+ilev)=values(1:(MNAUF+1)*(MNAUF+2)) call grib_get ( igrib ( i ), 'paramId' , parid ) nm = size ( mpar ) div = mlevel / nm kloop : do k = 1 , nm if ( parid . eq . mpar ( k )) then l ( k ) = l ( k ) + 1 cxmn (:,( k - 1 ) * div + l ( k )) = values ( 1 :( MNAUF + 1 ) * ( MNAUF + 2 )) ! print*,(k-1)*div+l(k),parid exit kloop end if end do kloop if ( k . gt . nm . and . parid . ne . mpar ( nm )) then write ( * , * ) k , nm , parid , mpar ( nm ) write ( * , * ) 'ERROR readspectral: parameter ' , parid , 'is not' , mpar stop end if ! print*,i END DO iloop !! write(*,*) 'readspectral: ',i-1,' records read' DO i = 1 , n call grib_release ( igrib ( i )) END DO deallocate ( values ) deallocate ( igrib ) A = pv ( 1 : 1 + MAXLEV ) B = pv ( 2 + MAXLEV : 2 * MAXLEV + 2 ) END SUBROUTINE READSPECTRAL END MODULE RWGRIB2","tags":"","loc":"sourcefile/rwgrib2.f90.html","title":"rwgrib2.f90 – Flex_extract: Calculation of etadot"},{"text":"This file depends on sourcefile~~grphreal.f90~~EfferentGraph sourcefile~grphreal.f90 grphreal.f90 sourcefile~phgrreal.f90 phgrreal.f90 sourcefile~grphreal.f90->sourcefile~phgrreal.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\n is dependent upon another if the latter must be compiled before the former\n can be. Files dependent on this one sourcefile~~grphreal.f90~~AfferentGraph sourcefile~grphreal.f90 grphreal.f90 sourcefile~calc_etadot.f90 calc_etadot.f90 sourcefile~calc_etadot.f90->sourcefile~grphreal.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\n is dependent upon another if the latter must be compiled before the former\n can be. Contents Modules GRTOPH Source Code grphreal.f90 Source Code MODULE GRTOPH USE PHTOGR CONTAINS SUBROUTINE GRPH213 ( CXMN , FELD , WSAVE , IFAX , Z , W , MLAT , MNAUF , MAXL , MAXB , MLEVEL ) !! WRONG>>> DIE ROUTINE F]HRT EINE TRANSFORMATION EINER !! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN !! RAUM AUF KUGELKOORDINATEN DURCH ! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE ! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF ! CXM = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld ! FELD = FELD DER METEOROLOGISCHEN VARIABLEN ! WSAVE = Working Array fuer Fouriertransformation ! Z = LEGENDREFUNKTIONSWERTE ! ! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN ! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN ! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN ! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN IMPLICIT REAL ( A - H , O - Z ) ! Anzahl der Gitterpunkte pro Breitenkreis des reduzierten ! Gauss'schen Gitters INTEGER MLAT ( MAXB ), ISIZE , IFAX ( 10 , MAXB ) ! FELD DER LEGENDREPOLYNOME FUER EINE BREITE REAL Z ( MAXB / 2 , 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 ) ! LOGICAL*1 USED(((216*217)/2+1)*160) DIMENSION CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , MLEVEL ) REAL FELD ( MAXL , MLEVEL ) DIMENSION WSAVE ( 8 * MAXB + 15 , MAXB / 2 ) REAL W ( MAXB ) DIMENSION IND ( MAXB ) IND ( 1 ) = 0 DO 6 J = 2 , MAXB / 2 IND ( j ) = IND ( J - 1 ) + MLAT ( J - 1 ) 6 CONTINUE !$OMP PARALLEL DO SCHEDULE(DYNAMIC) DO 16 L = 1 , MLEVEL CALL GRPHSUB ( L , IND , CXMN , FELD , WSAVE , IFAX , Z , W , MLAT , MNAUF , MAXL , MAXB , MLEVEL ) 16 CONTINUE !$omp end parallel do RETURN END SUBROUTINE GRPH213 SUBROUTINE GRPHSUB ( L , IND , CXMN , FELD , WSAVE , IFAX , Z , W , MLAT , MNAUF , MAXL , MAXB , MLEVEL ) !! DIE ROUTINE F]HRT EINE TRANSFORMATION EINER !! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN !! RAUM AUF KUGELKOORDINATEN DURCH ! ! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE ! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF ! CXM = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld ! FELD = FELD DER METEOROLOGISCHEN VARIABLEN ! WSAVE = Working Array fuer Fouriertransformation ! Z = LEGENDREFUNKTIONSWERTE ! ! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN ! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN ! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN ! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN IMPLICIT REAL ( A - H , O - Z ) ! FELD DER FOURIERKOEFFIZIENTEN REAL CXMS ( 4 * ( MNAUF + 1 )) REAL CXMA ( 4 * ( MNAUF + 1 )) REAL , ALLOCATABLE :: CXM (:,:) ! Anzahl der Gitterpunkte pro Breitenkreis des reduzierten ! Gauss'schen Gitters INTEGER MLAT ( MAXB ), ISIZE ! FELD DER LEGENDREPOLYNOME FUER EINE BREITE REAL Z ( MAXB / 2 , 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 ) ! LOGICAL*1 USED(((216*217)/2+1)*160) REAL CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , MLEVEL ) REAL FELD ( MAXL , MLEVEL ) REAL WSAVE ( 8 * MAXB + 15 , MAXB / 2 ) INTEGER IFAX ( 10 , MAXB ) REAL W ( MAXB ) INTEGER IND ( MAXB ) ALLOCATE ( CXM ( 4 * MAXB , MAXB )) DO 5 J = 1 , MAXB / 2 CXMS ( 1 : MLAT ( J )) = FELD ( IND ( J ) + 1 : IND ( J ) + MLAT ( J ), L ) CALL RFOUFTR ( CXMS , WSAVE ( 1 , J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) CXMA ( 1 : MLAT ( J )) = FELD ( MAXL - IND ( J ) - MLAT ( J ) + 1 : MAXL - IND ( J ), L ) CALL RFOUFTR ( CXMA , WSAVE ( 1 , J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) DO 4 I = 1 , 2 * ( MNAUF + 1 ) CXM ( I , J ) = CXMS ( I ) + CXMA ( I ) CXM ( I , MAXB + 1 - J ) = CXMS ( I ) - CXMA ( I ) 4 CONTINUE 5 CONTINUE CALL LGTR213 ( CXMN ( 0 , L ), CXM , Z , W , MLAT , MNAUF , MAXB ) DEALLOCATE ( CXM ) RETURN END SUBROUTINE GRPHSUB ! SUBROUTINE LGTR213 ( CXMN , CXM , Z , W , MLAT , MNAUF , MAXB ) !! DIESE ROUTINE BERECHNET DIE KFFKs CXMN IMPLICIT REAL ( A - H , O - Z ) INTEGER MLAT ( MAXB ) DIMENSION CXM ( 0 : 4 * MAXB - 1 , MAXB ) DIMENSION CXMN ( 0 : 2 * ((( MNAUF + 1 ) * MNAUF ) / 2 + MNAUF ) + 1 ) REAL * 8 Z ( MAXB / 2 , 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 ) REAL * 8 W ( MAXB ), CR , CI , HILF LOGICAL EVEN LL = 0 LLP = 0 DO 1 I = 0 , MNAUF KM = 0 9 KM = KM + 1 IF ( MLAT ( KM ) . LE . 2 * I ) THEN GOTO 9 END IF DO 2 J = I , MNAUF CR = 0 CI = 0 EVEN = MOD ( I + J , 2 ) . EQ . 0 IF ( EVEN ) THEN DO 3 K = KM , MAXB / 2 HILF = W ( K ) * Z ( K , LLP ) CR = CR + CXM ( 2 * I , K ) * HILF CI = CI + CXM ( 2 * I + 1 , K ) * HILF 3 CONTINUE ELSE DO 4 K = KM , MAXB / 2 HILF = W ( K ) * Z ( K , LLP ) CR = CR + CXM ( 2 * I , MAXB + 1 - K ) * HILF CI = CI + CXM ( 2 * I + 1 , MAXB + 1 - K ) * HILF 4 CONTINUE END IF 5 CXMN ( 2 * LL ) = CR CXMN ( 2 * LL + 1 ) = CI LL = LL + 1 LLP = LLP + 1 2 CONTINUE LLP = LLP + 2 1 CONTINUE RETURN END SUBROUTINE LGTR213 SUBROUTINE RFOUFTR ( CXM , TRIGS , IFAX , MNAUF , MAXL , ISIGN ) ! ! BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS IMPLICIT REAL ( A - H , O - Z ) DIMENSION CXM ( 0 : 2 * MAXL - 1 ) DIMENSION FELD ( MAXL ), TRIGS ( 2 * MAXL ) DIMENSION WSAVE ( MAXAUF ) INTEGER IFAX ( 10 ) ! NORMIERUNG... WSAVE ( 1 ) = CXM ( MAXL - 1 ) CXM ( 1 : MAXL ) = CXM ( 0 : MAXL - 1 ) / 2 CXM ( 0 ) = WSAVE ( 1 ) / 2 ! CALL CFFTF(MAXL,CXM,WSAVE) CALL FFT99 ( CXM , WSAVE , TRIGS , IFAX , 1 , 1 , MAXL , 1 , - 1 ) RETURN END SUBROUTINE RFOUFTR END MODULE GRTOPH","tags":"","loc":"sourcefile/grphreal.f90.html","title":"grphreal.f90 – Flex_extract: Calculation of etadot"},{"text":"Files dependent on this one sourcefile~~phgrreal.f90~~AfferentGraph sourcefile~phgrreal.f90 phgrreal.f90 sourcefile~calc_etadot.f90 calc_etadot.f90 sourcefile~calc_etadot.f90->sourcefile~phgrreal.f90 sourcefile~ftrafo.f90 ftrafo.f90 sourcefile~calc_etadot.f90->sourcefile~ftrafo.f90 sourcefile~grphreal.f90 grphreal.f90 sourcefile~calc_etadot.f90->sourcefile~grphreal.f90 sourcefile~ftrafo.f90->sourcefile~phgrreal.f90 sourcefile~grphreal.f90->sourcefile~phgrreal.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\n is dependent upon another if the latter must be compiled before the former\n can be. Contents Modules PHTOGR Source Code phgrreal.f90 Source Code MODULE PHTOGR INTEGER , PARAMETER :: MAXAUF = 36000 CONTAINS SUBROUTINE PHGR213 ( CXMN , FELD , WSAVE , IFAX , Z , MLAT , MNAUF , MAXL , MAXB , MLEVEL ) !! DIE ROUTINE F]HRT EINE TRANSFORMATION EINER !! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN !! RAUM AUF DAS REDUZIERTE GAUSS'SCHE GITTER DURCH ! ! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE ! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF ! FELD = FELD DER METEOROLOGISCHEN VARIABLEN ! WSAVE = Working Array fuer Fouriertransformation ! Z = LEGENDREFUNKTIONSWERTE ! ! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN ! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN ! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN ! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN IMPLICIT NONE ! Anzahl der Gitterpunkte auf jedem Breitenkreis INTEGER MLAT ( MAXB / 2 ) INTEGER K , MAXL , MAXB , MLEVEL , MNAUF INTEGER IND ( MAXB ) ! FELD DER LEGENDREPOLYNOME FUER EINE BREITE REAL Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 , MAXB / 2 ) REAL CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , MLEVEL ) REAL FELD ( MAXL , MLEVEL ) REAL WSAVE ( 8 * MAXB + 15 , MAXB / 2 ) INTEGER :: IFAX ( 10 , MAXB ) IND ( 1 ) = 0 DO 7 K = 2 , MAXB / 2 IND ( K ) = IND ( K - 1 ) + MLAT ( K - 1 ) 7 CONTINUE !$OMP PARALLEL DO SCHEDULE(DYNAMIC) DO 17 K = 1 , MAXB / 2 CALL PHSYM ( K , IND , CXMN , FELD , Z , WSAVE , IFAX , MLAT , MNAUF , MAXL , MAXB , MLEVEL ) 17 CONTINUE !$OMP END PARALLEL DO RETURN END SUBROUTINE PHGR213 SUBROUTINE PHSYM ( K , IND , CXMN , FELD , Z , WSAVE , IFAX , MLAT , MNAUF , MAXL , MAXB , MLEVEL ) IMPLICIT NONE INTEGER MLAT ( MAXB / 2 ) INTEGER K , L , I , J , LLS , LLPS , LL , LLP , MAXL , MAXB , MLEVEL , MNAUF INTEGER IND ( MAXB ) INTEGER :: IFAX ( 10 , MAXB ) ! FELD DER FOURIERKOEFFIZIENTEN REAL :: CXMS ( 0 : MAXAUF - 1 ), CXMA ( 0 : MAXAUF - 1 ) ! FELD DER LEGENDREPOLYNOME FUER EINE BREITE REAL Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 , MAXB / 2 ) REAL ACR , ACI , SCR , SCI REAL CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , MLEVEL ) REAL FELD ( MAXL , MLEVEL ) REAL WSAVE ( 8 * MAXB + 15 , MAXB / 2 ) DO 6 L = 1 , MLEVEL LL = 0 LLP = 0 DO 1 I = 0 , MNAUF SCR = 0.D0 SCI = 0.D0 ACR = 0.D0 ACI = 0.D0 LLS = LL LLPS = LLP IF ( 2 * I + 1 . LT . MLAT ( K )) THEN ! Innerste Schleife aufgespalten um if-Abfrage zu sparen DO 18 J = I , MNAUF , 2 SCR = SCR + Z ( LLP , K ) * CXMN ( 2 * LL , L ) SCI = SCI + Z ( LLP , K ) * CXMN ( 2 * LL + 1 , L ) LL = LL + 2 LLP = LLP + 2 18 CONTINUE LL = LLS + 1 LLP = LLPS + 1 DO 19 J = I + 1 , MNAUF , 2 ACR = ACR + Z ( LLP , K ) * CXMN ( 2 * LL , L ) ACI = ACI + Z ( LLP , K ) * CXMN ( 2 * LL + 1 , L ) LL = LL + 2 LLP = LLP + 2 19 CONTINUE END IF LL = LLS + ( MNAUF - I + 1 ) LLP = LLPS + ( MNAUF - I + 3 ) CXMS ( 2 * I ) = SCR + ACR CXMS ( 2 * I + 1 ) = SCI + ACI CXMA ( 2 * I ) = SCR - ACR CXMA ( 2 * I + 1 ) = SCI - ACI 1 CONTINUE ! CALL FOURTR(CXMS,FELD(IND(k)+1,L),WSAVE(:,K),MNAUF,*MLAT(K),1) ! CALL FOURTR(CXMA,FELD(MAXL-IND(k)-MLAT(K)+1,L),WSAVE(:,K),MNAUF,MLAT(K),1) CALL RFOURTR ( CXMS , WSAVE (:, K ), IFAX (:, K ), MNAUF , MLAT ( K ), 1 ) FELD ( IND ( k ) + 1 : IND ( K ) + MLAT ( K ), L ) = CXMS ( 0 : MLAT ( K ) - 1 ) CALL RFOURTR ( CXMA , WSAVE (:, K ), IFAX (:, K ), MNAUF , MLAT ( K ), 1 ) FELD ( MAXL - IND ( k ) - MLAT ( K ) + 1 : MAXL - IND ( k ), L ) = CXMA ( 0 : MLAT ( K ) - 1 ) ! WRITE(*,*) IND+1,FELD(IND+1,L) 6 CONTINUE END SUBROUTINE PHSYM SUBROUTINE PHGCUT ( CXMN , FELD , WSAVE , IFAX , Z , & MNAUF , MMAX , MAUF , MANF , MAXL , MAXB , MLEVEL ) !! DIE ROUTINE FUEHRT EINE TRANSFORMATION EINER !! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN !! RAUM AUF KUGELKOORDINATEN DURCH. Es kann ein Teilausschnitt !! Der Erde angegeben werden. Diese Routine ist langsamer als phgrph ! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE ! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF ! FELD = FELD DER METEOROLOGISCHEN VARIABLEN ! BREITE = SINUS DER GEOGRAFISCHEN BREITEN ! ! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN ! MAUF ANZAHL DER LAENGEN UND DER FOURIERKOEFFIZIENTEN ! MANF ANFANG DES LAENGENBEREICHS FUER DAS GITTER, ! AUF DAS INTERPOLIERT WERDEN SOLL ! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN ! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN ! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN IMPLICIT REAL ( A - H , O - Z ) ! FELD DER FOURIERKOEFFIZIENTEN ! FELD DER LEGENDREPOLYNOME FUER EINE BREITE REAL Z ( 0 :(( MMAX + 3 ) * ( MMAX + 4 )) / 2 , MAXB ) DIMENSION CXMN ( 0 :( MMAX + 1 ) * ( MMAX + 2 ) - 1 , MLEVEL ) REAL FELD ( MAXL , MAXB , MLEVEL ) DIMENSION WSAVE ( 4 * MAUF + 15 ) INTEGER :: IFAX ( 10 ) LOGICAL SYM ! write(*,*)mauf,mnauf,manf,maxl IF ( MAUF . LE . MNAUF ) WRITE ( * , * ) 'TOO COARSE LONGITUDE RESOLUTION' IF ( MANF . LT . 1 . OR . MAXL . LT . 1 . OR . & MANF . GT . MAUF . OR . MAXL . GT . MAUF ) THEN WRITE ( * , * ) 'WRONG LONGITUDE RANGE' , MANF , MAXL STOP END IF ! Pruefe, ob Ausgabegitter symmetrisch zum Aequator ist ! Wenn ja soll Symmetrie der Legendrepolynome ausgenutzt werden IF ( MAXB . GT . 4 ) THEN SYM = . TRUE . DO 11 J = 5 , 5 IF ( ABS ( ABS ( Z ( 100 , J )) - ABS ( Z ( 100 , MAXB + 1 - J ))) . GT . 1E-11 ) SYM = . FALSE . ! WRITE(*,*) ABS(Z(100,J)),ABS(Z(100,MAXB+1-J)) 11 CONTINUE !! WRITE(*,*) 'Symmetrisch: ',SYM ELSE SYM = . FALSE . END IF IF ( SYM ) THEN !$OMP PARALLEL DO DO J = 1 ,( MAXB + 1 ) / 2 CALL PHSYMCUT ( J , CXMN , FELD , Z , WSAVE , IFAX , MAUF , MNAUF , MAXL , MAXB , MLEVEL , MANF ) END DO !$OMP END PARALLEL DO ELSE !$OMP PARALLEL DO DO J = 1 , MAXB CALL PHGPNS ( CXMN , FELD , Z , WSAVE , IFAX , J , MNAUF , MAUF , MANF , MAXL , MAXB , MLEVEL ) END DO !$OMP END PARALLEL DO END IF RETURN END SUBROUTINE PHGCUT SUBROUTINE PHSYMCUT ( J , CXMN , FELD , Z , WSAVE , IFAX , MAUF , MNAUF , MAXL , MAXB , MLEVEL , MANF ) IMPLICIT REAL ( A - H , O - Z ) ! FELD DER FOURIERKOEFFIZIENTEN REAL :: CXM ( 0 : MAXAUF - 1 ), CXMA ( 0 : MAXAUF - 1 ) ! FELD DER LEGENDREPOLYNOME FUER EINE BREITE REAL Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 , MAXB ) REAL SCR , SCI , ACR , ACI DIMENSION CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , MLEVEL ) REAL FELD ( MAXL , MAXB , MLEVEL ) DIMENSION WSAVE ( 4 * MAUF + 15 ) INTEGER :: IFAX ( 10 ) DO 16 L = 1 , MLEVEL LL = 0 LLP = 0 DO 17 I = 0 , MNAUF SCR = 0.D0 SCI = 0.D0 ACR = 0.D0 ACI = 0.D0 LLS = LL LLPS = LLP ! Innerste Schleife aufgespalten um if-Abfrage zu sparen DO 18 K = I , MNAUF , 2 SCR = SCR + Z ( LLP , J ) * CXMN ( 2 * LL , L ) SCI = SCI + Z ( LLP , J ) * CXMN ( 2 * LL + 1 , L ) LL = LL + 2 LLP = LLP + 2 18 CONTINUE LL = LLS + 1 LLP = LLPS + 1 DO 19 K = I + 1 , MNAUF , 2 ACR = ACR + Z ( LLP , J ) * CXMN ( 2 * LL , L ) ACI = ACI + Z ( LLP , J ) * CXMN ( 2 * LL + 1 , L ) LL = LL + 2 LLP = LLP + 2 19 CONTINUE LL = LLS + MNAUF - I + 1 LLP = LLPS + MNAUF - I + 3 CXM ( 2 * I ) = SCR + ACR CXM ( 2 * I + 1 ) = SCI + ACI CXMA ( 2 * I ) = SCR - ACR CXMA ( 2 * I + 1 ) = SCI - ACI 17 CONTINUE CALL RFOURTR ( CXM , WSAVE , IFAX , MNAUF , MAUF , 1 ) DO 26 I = 0 , MAXL - 1 IF ( MANF + I . LE . MAUF ) THEN FELD ( I + 1 , J , L ) = CXM ( MANF + I - 1 ) ELSE FELD ( I + 1 , J , L ) = CXM ( MANF - MAUF + I - 1 ) END IF 26 CONTINUE CALL RFOURTR ( CXMA , WSAVE , IFAX , MNAUF , MAUF , 1 ) DO 36 I = 0 , MAXL - 1 IF ( MANF + I . LE . MAUF ) THEN FELD ( I + 1 , MAXB + 1 - J , L ) = CXMA ( MANF + I - 1 ) ELSE FELD ( I + 1 , MAXB + 1 - J , L ) = CXMA ( MANF - MAUF + I - 1 ) END IF 36 CONTINUE 16 CONTINUE END SUBROUTINE PHSYMCUT SUBROUTINE PHGPNS ( CXMN , FELD , Z , WSAVE , IFAX , J , MNAUF , MAUF , MANF , MAXL , MAXB , MLEVEL ) IMPLICIT NONE INTEGER , INTENT ( IN ) :: MNAUF , MAUF , MANF , J , MAXL , MAXB , MLEVEL REAL :: CXM ( 0 : MAXAUF - 1 ) REAL , INTENT ( IN ) :: Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 , MAXB ) REAL , INTENT ( IN ) :: CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , MLEVEL ) REAL , INTENT ( IN ) :: WSAVE ( 4 * MAUF + 15 ) REAL :: FELD ( MAXL , MAXB , MLEVEL ) INTEGER :: IFAX ( 10 ) INTEGER I , L DO L = 1 , MLEVEL CALL LEGTR ( CXMN (:, L ), CXM , Z (:, J ), MNAUF , MAUF ) CALL RFOURTR ( CXM , WSAVE , IFAX , MNAUF , MAUF , 1 ) DO I = 0 , MAXL - 1 IF ( MANF + I . LE . MAUF ) THEN FELD ( I + 1 , J , L ) = CXM ( MANF + I - 1 ) ELSE FELD ( I + 1 , J , L ) = CXM ( MANF - MAUF + I - 1 ) END IF END DO END DO END SUBROUTINE PHGPNS SUBROUTINE LEGTR ( CXMN , CXM , Z , MNAUF , MAUF ) !! DIESE ROUTINE BERECHNET DIE FOURIERKOEFFIZIENTEN CXM IMPLICIT NONE INTEGER MNAUF , MAUF , LL , LLP , I , J REAL CXM ( 0 : MAXAUF - 1 ) REAL CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 ) REAL Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 ) REAL CI , CR LL = 0 LLP = 0 DO 1 I = 0 , MNAUF CR = 0.D0 CI = 0.D0 DO 2 J = I , MNAUF CR = CR + Z ( LLP ) * CXMN ( 2 * LL ) CI = CI + Z ( LLP ) * CXMN ( 2 * LL + 1 ) LL = LL + 1 LLP = LLP + 1 2 CONTINUE LLP = LLP + 2 CXM ( 2 * I ) = CR CXM ( 2 * I + 1 ) = CI 1 CONTINUE RETURN END SUBROUTINE LEGTR SUBROUTINE RFOURTR ( CXM , TRIGS , IFAX , MNAUF , MAXL , ISIGN ) !! BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS IMPLICIT REAL ( A - H , O - Z ) DIMENSION CXM ( 0 : MAXAUF - 1 ) REAL :: WSAVE ( 2 * MAXL ), TRIGS ( 2 * MAXL ) INTEGER IFAX ( 10 ) DO I = MNAUF + 1 , MAXL - 1 CXM ( 2 * I ) = 0.0 CXM ( 2 * I + 1 ) = 0.0 END DO CALL FFT99 ( CXM , WSAVE , TRIGS , IFAX , 1 , 1 , MAXL , 1 , 1 ) DO I = 0 , MAXL - 1 CXM ( I ) = CXM ( I + 1 ) END DO RETURN END SUBROUTINE RFOURTR SUBROUTINE GAULEG ( X1 , X2 , X , W , N ) !! BERECHNET DIE GAUSS+SCHEN BREITEN IMPLICIT REAL ( A - H , O - Z ) DIMENSION X ( N ), W ( N ) PARAMETER ( EPS = 3.D-14 ) M = ( N + 1 ) / 2 XM = 0.5D0 * ( X2 + X1 ) XL = 0.5D0 * ( X2 - X1 ) DO 12 I = 1 , M Z = DCOS ( 3.141592654D0 * ( I - . 25 D0 ) / ( N + . 5 D0 )) 1 CONTINUE P1 = 1.D0 P2 = 0.D0 DO 11 J = 1 , N P3 = P2 P2 = P1 P1 = (( 2.D0 * J - 1.D0 ) * Z * P2 - ( J - 1.D0 ) * P3 ) / J 11 CONTINUE PP = N * ( Z * P1 - P2 ) / ( Z * Z - 1.D0 ) Z1 = Z Z = Z1 - P1 / PP IF ( ABS ( Z - Z1 ) . GT . EPS ) GO TO 1 X ( I ) = XM - XL * Z X ( N + 1 - I ) = XM + XL * Z W ( I ) = 2.D0 * XL / (( 1.D0 - Z * Z ) * PP * PP ) W ( N + 1 - I ) = W ( I ) 12 CONTINUE RETURN END SUBROUTINE GAULEG SUBROUTINE PLGNFA ( LL , X , Z ) !! PLGNDN BERECHNET ALLE NORMIERTEN ASSOZIIERTEN !! LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) !! UND SCHREIBT SIE IN DAS FELD Z ! Die Polynome sind wie im ECMWF indiziert, d.h. ! P00,P10,P11,P20,P21,P22,... ! Ansonsten ist die Routine analog zu PLGNDN ! X IST DER COSINUS DES ZENITWINKELS ODER ! DER SINUS DER GEOGRAFISCHEN BREITE IMPLICIT REAL ( A - H , O - Z ) DIMENSION Z ( 0 :(( LL + 3 ) * ( LL + 4 )) / 2 ) L = LL + 2 I = 1 Z ( 0 ) = 1.D0 FACT = 1.D0 POT = 1.D0 SOMX2 = DSQRT ( 1.D0 - X * X ) DO 14 J = 0 , L DJ = DBLE ( J ) IF ( J . GT . 0 ) THEN FACT = FACT * ( 2.D0 * DJ - 1.D0 ) / ( 2.D0 * DJ ) POT = POT * SOMX2 Z ( I ) = DSQRT (( 2.D0 * DJ + 1.D0 ) * FACT ) * POT I = I + 1 END IF IF ( J . LT . L ) THEN Z ( I ) = X * DSQRT (( 4.D0 * DJ * DJ + 8.D0 * DJ + 3.D0 ) / ( 2.D0 * DJ + 1.D0 )) * Z ( I - 1 ) I = I + 1 END IF DK = DJ + 2.D0 DO 14 K = J + 2 , L DDK = ( DK * DK - DJ * DJ ) Z ( I ) = X * DSQRT (( 4.D0 * DK * DK - 1.D0 ) / DDK ) * Z ( I - 1 ) - & DSQRT ((( 2.D0 * DK + 1.D0 ) * ( DK - DJ - 1.D0 ) * ( DK + DJ - 1.D0 )) / & (( 2.D0 * DK - 3.D0 ) * DDK )) * Z ( I - 2 ) DK = DK + 1.D0 I = I + 1 14 CONTINUE RETURN END SUBROUTINE PLGNFA SUBROUTINE DPLGND ( MNAUF , Z , DZ ) !! DPLGND BERECHNET DIE ABLEITUNG DER NORMIERTEN ASSOZIIERTEN !! LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) !! UND SCHREIBT SIE IN DAS FELD DZ ! DIE REIHENFOLGE IST ! P00(X),P01(X),P11(X),P02(X),P12(X),P22(X),..PLL(X) IMPLICIT REAL ( A - H , O - Z ) DIMENSION Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 ) DIMENSION DZ ( 0 :(( MNAUF + 2 ) * ( MNAUF + 3 )) / 2 ) IF ( Z ( 0 ) . NE . 1.D0 ) THEN WRITE ( * , * ) 'DPLGND: Z(0) must be 1.0' STOP END IF LLP = 0 LLH = 0 DO 1 I = 0 , MNAUF + 1 DO 2 J = I , MNAUF + 1 IF ( I . EQ . J ) THEN WURZELA = DSQRT ( DBLE (( J + 1 ) * ( J + 1 ) - I * I ) / DBLE ( 4 * ( J + 1 ) * ( J + 1 ) - 1 )) DZ ( LLH ) = DBLE ( J ) * WURZELA * Z ( LLP + 1 ) ELSE WURZELB = DSQRT ( DBLE (( J + 1 ) * ( J + 1 ) - I * I ) / DBLE ( 4 * ( J + 1 ) * ( J + 1 ) - 1 )) DZ ( LLH ) = DBLE ( J ) * WURZELB * Z ( LLP + 1 ) - DBLE ( J + 1 ) * WURZELA * Z ( LLP - 1 ) WURZELA = WURZELB END IF LLH = LLH + 1 LLP = LLP + 1 2 CONTINUE LLP = LLP + 1 1 CONTINUE RETURN END SUBROUTINE DPLGND SUBROUTINE SPFILTER ( FELDMN , MM , MMAX ) !! Spectral Filter of Sardeshmukh and Hoskins (1984, MWR) ! MM=Spectral truncation of field ! MMAX= Spectral truncation of filter IMPLICIT NONE INTEGER MM , MMAX , I , J , K , L REAL FELDMN ( 0 :( MM + 1 ) * ( MM + 2 ) - 1 ) REAL KMAX , SMAX , FAK SMAX = 0.1 KMAX =- ALOG ( SMAX ) KMAX = KMAX / ( float ( MMAX ) * float ( MMAX + 1 )) ** 2 ! WRITE(*,*)'alogsmax',alog(smax),'KMAX:',KMAX L = 0 DO I = 0 , MM DO J = I , MM ! WRITE(*,*) I,J,FELD(K),FELD(K)*EXP(-KMAX*(J*(J+1))**2) IF ( J . LE . MMAX ) THEN ! FAK=EXP(-KMAX*(J*(J+1))**2) FAK = 1.0 FELDMN ( 2 * L ) = FELDMN ( 2 * L ) * FAK FELDMN ( 2 * L + 1 ) = FELDMN ( 2 * L + 1 ) * FAK ELSE FELDMN ( 2 * L ) = 0. FELDMN ( 2 * L + 1 ) = 0. END IF L = L + 1 END DO END DO END SUBROUTINE SPFILTER END MODULE PHTOGR","tags":"","loc":"sourcefile/phgrreal.f90.html","title":"phgrreal.f90 – Flex_extract: Calculation of etadot"},{"text":"Contents Subroutines POSNAM Source Code posnam.f90 Source Code SUBROUTINE POSNAM ( KULNAM , CDNAML ) !! position in namelist file. ! author: Mats Hamrud, ECMWF INTEGER , INTENT ( IN ) :: KULNAM CHARACTER * ( * ), INTENT ( IN ) :: CDNAML CHARACTER * 120 CLINE CHARACTER * 1 CLTEST REWIND ( KULNAM ) ILEN = LEN ( CDNAML ) 102 CONTINUE CLINE = ' ' READ ( KULNAM , '(A)' ) CLINE IND1 = INDEX ( CLINE , '&' // CDNAML ) IF ( IND1 . EQ . 0 ) GO TO 102 CLTEST = CLINE ( IND1 + ILEN + 1 : IND1 + ILEN + 1 ) IF ( LGE ( CLTEST , '0' ) . AND . LLE ( CLTEST , '9' ) . OR . & LGE ( CLTEST , 'A' ) . AND . LLE ( CLTEST , 'Z' )) GOTO 102 BACKSPACE ( KULNAM ) RETURN END SUBROUTINE POSNAM","tags":"","loc":"sourcefile/posnam.f90.html","title":"posnam.f90 – Flex_extract: Calculation of etadot"},{"text":"This file depends on sourcefile~~ftrafo.f90~~EfferentGraph sourcefile~ftrafo.f90 ftrafo.f90 sourcefile~phgrreal.f90 phgrreal.f90 sourcefile~ftrafo.f90->sourcefile~phgrreal.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\n is dependent upon another if the latter must be compiled before the former\n can be. Files dependent on this one sourcefile~~ftrafo.f90~~AfferentGraph sourcefile~ftrafo.f90 ftrafo.f90 sourcefile~calc_etadot.f90 calc_etadot.f90 sourcefile~calc_etadot.f90->sourcefile~ftrafo.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\n is dependent upon another if the latter must be compiled before the former\n can be. Contents Modules FTRAFO Source Code ftrafo.f90 Source Code MODULE FTRAFO !! Implementation of the spectral transformation using reduced the Gaussian grid CONTAINS ! Implementierung der spektralen Transformationsmethode unter Verwendung ! des reduzierten Gauss'schen Gitters SUBROUTINE VDTOUV ( XMN , XLAM , XPHI , GWSAVE , IFAX , P , MLAT , MNAUF , NI , NJ , NK ) !! Berechnung der scale winds aus Vorticity und Divergenz !! uebergibt man in XMN die Divergenz, so wird der divergente Anteil des !! Windes (XPHI=Ud,XPHI=Vd) zurueckgegeben, uebergibt man die Vorticity, so !! erhaelt man den rotationellen Wind (XLAM=Vrot,XPHI=-Urot). !! Summiert man beide, erhaelt man den gesamten Scale wind ! GWSAVE ist ein Hilfsfeld fuer die FFT ! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung ! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis ! MNAUF gibt die spektrale Aufloesung an, ! NI = Anzahl der Gauss'schen Gitterpunkte pro Flaeche ! NJ = Anzahl der Gauss'schen Breiten, ! NK = Anzahl der Niveaus USE PHTOGR IMPLICIT NONE INTEGER J , N , NI , NJ , NK , MNAUF , GGIND ( NJ / 2 ) INTEGER MLAT ( NJ ), IFAX ( 10 , NJ ) REAL XMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , NK ) REAL P ( 0 :( MNAUF + 3 ) * ( MNAUF + 4 ) / 2 , NJ / 2 ) REAL H ( 0 :( MNAUF + 2 ) * ( MNAUF + 3 ) / 2 ) REAL XLAM ( NI , NK ), XPHI ( NI , NK ) REAL GWSAVE ( 8 * NJ + 15 , NJ / 2 ) REAL SCR , SCI , ACR , ACI , MUSCR , MUSCI , MUACR , MUACI REAL RT , IT GGIND ( 1 ) = 0 DO 4 J = 2 , NJ / 2 GGIND ( J ) = GGIND ( J - 1 ) + MLAT ( J - 1 ) 4 CONTINUE !$OMP PARALLEL DO SCHEDULE(DYNAMIC) DO 5 J = 1 , NJ / 2 CALL VDUVSUB ( J , XMN , XLAM , XPHI , GWSAVE , IFAX , P , GGIND ( J ), MLAT , MNAUF , NI , NJ , NK ) 5 CONTINUE !$OMP END PARALLEL DO RETURN END SUBROUTINE VDTOUV SUBROUTINE VDUVSUB ( J , XMN , XLAM , XPHI , GWSAVE , IFAX , P , GGIND , MLAT , MNAUF , NI , NJ , NK ) USE PHTOGR IMPLICIT NONE INTEGER J , K , M , N , NI , NJ , NK , MNAUF , GGIND , LL , LLP , LLH , LLS , LLPS , LLHS INTEGER MLAT ( NJ ), IFAX ( 10 , NJ ) REAL UFOUC ( 0 : MAXAUF ), MUFOUC ( 0 : MAXAUF ) REAL VFOUC ( 0 : MAXAUF ), MVFOUC ( 0 : MAXAUF ) REAL XMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , NK ) REAL P ( 0 :( MNAUF + 3 ) * ( MNAUF + 4 ) / 2 , NJ / 2 ) REAL H ( 0 :( MNAUF + 2 ) * ( MNAUF + 3 ) / 2 ) REAL XLAM ( NI , NK ), XPHI ( NI , NK ) REAL GWSAVE ( 8 * NJ + 15 , NJ / 2 ) REAL ERAD , SCR , SCI , ACR , ACI , MUSCR , MUSCI , MUACR , MUACI REAL FAC ( 0 : MNAUF ), RT , IT ERAD = 636747 0.D0 FAC ( 0 ) = 0.D0 DO 12 N = 1 , MNAUF FAC ( N ) =- ERAD / DBLE ( N ) / DBLE ( N + 1 ) 12 CONTINUE CALL DPLGND ( MNAUF , P ( 0 , J ), H ) DO 3 K = 1 , NK LL = 0 LLP = 0 LLH = 0 DO 2 M = 0 , MNAUF SCR = 0.D0 SCI = 0.D0 ACR = 0.D0 ACI = 0.D0 MUSCR = 0.D0 MUSCI = 0.D0 MUACR = 0.D0 MUACI = 0.D0 LLS = LL LLPS = LLP LLHS = LLH IF ( 2 * M + 1 . LT . MLAT ( J )) THEN DO 1 N = M , MNAUF , 2 RT = XMN ( 2 * LL , K ) * FAC ( N ) IT = XMN ( 2 * LL + 1 , K ) * FAC ( N ) SCR = SCR + RT * P ( LLP , J ) SCI = SCI + IT * P ( LLP , J ) MUACR = MUACR + RT * H ( LLH ) MUACI = MUACI + IT * H ( LLH ) LL = LL + 2 LLP = LLP + 2 LLH = LLH + 2 1 CONTINUE LL = LLS + 1 LLP = LLPS + 1 LLH = LLHS + 1 DO 11 N = M + 1 , MNAUF , 2 RT = XMN ( 2 * LL , K ) * FAC ( N ) IT = XMN ( 2 * LL + 1 , K ) * FAC ( N ) ACR = ACR + RT * P ( LLP , J ) ACI = ACI + IT * P ( LLP , J ) MUSCR = MUSCR + RT * H ( LLH ) MUSCI = MUSCI + IT * H ( LLH ) LL = LL + 2 LLP = LLP + 2 LLH = LLH + 2 11 CONTINUE END IF LL = LLS + ( MNAUF - M + 1 ) LLP = LLPS + ( MNAUF - M + 3 ) LLH = LLHS + ( MNAUF - M + 2 ) UFOUC ( 2 * M ) =- M * ( SCI - ACI ) UFOUC ( 2 * M + 1 ) = M * ( SCR - ACR ) VFOUC ( 2 * M ) =- M * ( SCI + ACI ) VFOUC ( 2 * M + 1 ) = M * ( SCR + ACR ) MUFOUC ( 2 * M ) =- ( MUSCR - MUACR ) MUFOUC ( 2 * M + 1 ) =- ( MUSCI - MUACI ) MVFOUC ( 2 * M ) =- ( MUSCR + MUACR ) MVFOUC ( 2 * M + 1 ) =- ( MUSCI + MUACI ) 2 CONTINUE CALL RFOURTR ( VFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XLAM ( GGIND + 1 : GGIND + MLAT ( J ), K ) = VFOUC ( 0 : MLAT ( J ) - 1 ) CALL RFOURTR ( UFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XLAM ( NI - GGIND - MLAT ( J ) + 1 : NI - GGIND , K ) = UFOUC ( 0 : MLAT ( J ) - 1 ) CALL RFOURTR ( MVFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XPHI ( GGIND + 1 : GGIND + MLAT ( J ), K ) = MVFOUC ( 0 : MLAT ( J ) - 1 ) CALL RFOURTR ( MUFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XPHI ( NI - GGIND - MLAT ( J ) + 1 : NI - GGIND , K ) = MUFOUC ( 0 : MLAT ( J ) - 1 ) 3 CONTINUE RETURN END SUBROUTINE VDUVSUB SUBROUTINE PHGRAD ( XMN , XLAM , XPHI , GWSAVE , IFAX , P , H , MLAT , MNAUF , NI , NJ , NK ) !! Berechnung des Gradienten eines Skalars aus dem Feld des !! Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der !! Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. ! GWSAVE ist ein Hilfsfeld fuer die FFT ! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung ! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis ! MNAUF gibt die spektrale Aufloesung an, ! NI = Anzahl der Gauss'schen Gitterpunkte, ! NJ = Anzahl der Gauss'schen Breiten, ! NK = Anzahl der Niveaus USE PHTOGR IMPLICIT NONE INTEGER J , K , M , N , NI , NJ , NK , MNAUF , GGIND , LL , LLP , LLH , LLS , LLPS , LLHS INTEGER MLAT ( NJ ), IFAX ( 10 , NJ ) REAL UFOUC ( 0 : MAXAUF ), MUFOUC ( 0 : MAXAUF ) REAL VFOUC ( 0 : MAXAUF ), MVFOUC ( 0 : MAXAUF ) REAL XMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , NK ) REAL P ( 0 :( MNAUF + 3 ) * ( MNAUF + 4 ) / 2 , NJ / 2 ) REAL H ( 0 :( MNAUF + 2 ) * ( MNAUF + 3 ) / 2 ) REAL XLAM ( NI , NK ), XPHI ( NI , NK ) REAL GWSAVE ( 8 * NJ + 15 , NJ / 2 ) REAL ERAD REAL SCR , SCI , ACR , ACI , MUSCR , MUSCI , MUACR , MUACI , RT , IT ERAD = 636747 0.0 GGIND = 0 DO 4 J = 1 , NJ / 2 CALL DPLGND ( MNAUF , P ( 0 , J ), H ) DO 3 K = 1 , NK LL = 0 LLP = 0 LLH = 0 DO 2 M = 0 , MNAUF SCR = 0.D0 SCI = 0.D0 ACR = 0.D0 ACI = 0.D0 MUSCR = 0.D0 MUSCI = 0.D0 MUACR = 0.D0 MUACI = 0.D0 LLS = LL LLPS = LLP LLHS = LLH IF ( 2 * M + 1 . LT . MLAT ( J )) THEN DO 1 N = M , MNAUF , 2 RT = XMN ( 2 * LL , K ) IT = XMN ( 2 * LL + 1 , K ) SCR = SCR + RT * P ( LLP , J ) SCI = SCI + IT * P ( LLP , J ) MUACR = MUACR + RT * H ( LLH ) MUACI = MUACI + IT * H ( LLH ) LL = LL + 2 LLP = LLP + 2 LLH = LLH + 2 1 CONTINUE LL = LLS + 1 LLP = LLPS + 1 LLH = LLHS + 1 DO 11 N = M + 1 , MNAUF , 2 RT = XMN ( 2 * LL , K ) IT = XMN ( 2 * LL + 1 , K ) ACR = ACR + RT * P ( LLP , J ) ACI = ACI + IT * P ( LLP , J ) MUSCR = MUSCR + RT * H ( LLH ) MUSCI = MUSCI + IT * H ( LLH ) LL = LL + 2 LLP = LLP + 2 LLH = LLH + 2 11 CONTINUE END IF LL = LLS + ( MNAUF - M + 1 ) LLP = LLPS + ( MNAUF - M + 3 ) LLH = LLHS + ( MNAUF - M + 2 ) UFOUC ( 2 * M ) =- M * ( SCI - ACI ) / ERAD UFOUC ( 2 * M + 1 ) = M * ( SCR - ACR ) / ERAD VFOUC ( 2 * M ) =- M * ( SCI + ACI ) / ERAD VFOUC ( 2 * M + 1 ) = M * ( SCR + ACR ) / ERAD MUFOUC ( 2 * M ) =- ( MUSCR - MUACR ) / ERAD MUFOUC ( 2 * M + 1 ) =- ( MUSCI - MUACI ) / ERAD MVFOUC ( 2 * M ) =- ( MUSCR + MUACR ) / ERAD MVFOUC ( 2 * M + 1 ) =- ( MUSCI + MUACI ) / ERAD 2 CONTINUE CALL RFOURTR ( VFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XLAM ( GGIND + 1 : GGIND + MLAT ( J ), K ) = VFOUC ( 0 : MLAT ( J ) - 1 ) CALL RFOURTR ( UFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XLAM ( NI - GGIND - MLAT ( J ) + 1 : NI - GGIND , K ) = UFOUC ( 0 : MLAT ( J ) - 1 ) CALL RFOURTR ( MVFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XPHI ( GGIND + 1 : GGIND + MLAT ( J ), K ) = MVFOUC ( 0 : MLAT ( J ) - 1 ) CALL RFOURTR ( MUFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XPHI ( NI - GGIND - MLAT ( J ) + 1 : NI - GGIND , K ) = MUFOUC ( 0 : MLAT ( J ) - 1 ) 3 CONTINUE GGIND = GGIND + MLAT ( J ) 4 CONTINUE RETURN END SUBROUTINE PHGRAD SUBROUTINE PHGRACUT ( XMN , XLAM , XPHI , GWSAVE , IFAX , P , H , MAUF , MNAUF , NI , NJ , MANF , NK ) !! Berechnung des Gradienten eines Skalars aus dem Feld des !! Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der !! Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. ! GWSAVE ist ein Hilfsfeld fuer die FFT ! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung ! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis ! MNAUF gibt die spektrale Aufloesung an, ! NI = Anzahl der Gauss'schen Gitterpunkte, ! NJ = Anzahl der Gauss'schen Breiten, ! NK = Anzahl der Niveaus USE PHTOGR IMPLICIT NONE INTEGER J , K , M , N , NI , NJ , NK , MNAUF , GGIND , LL , LLP , LLH , LLS , LLPS , LLHS INTEGER MAUF , MANF , I , IFAX ( 10 ) REAL UFOUC ( 0 : MAXAUF ), MUFOUC ( 0 : MAXAUF ) REAL VFOUC ( 0 : MAXAUF ), MVFOUC ( 0 : MAXAUF ) REAL XMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , NK ) REAL P ( 0 :( MNAUF + 3 ) * ( MNAUF + 4 ) / 2 , NJ ) REAL H ( 0 :( MNAUF + 2 ) * ( MNAUF + 3 ) / 2 ) REAL XLAM ( NI , NJ , NK ), XPHI ( NI , NJ , NK ) REAL HLAM ( MAXAUF , 2 ), HPHI ( MAXAUF , 2 ) REAL GWSAVE ( 4 * MAUF + 15 ) REAL ERAD REAL SCR , SCI , ACR , ACI , MUSCR , MUSCI , MUACR , MUACI , RT , IT ERAD = 636747 0.0 GGIND = 0 DO 4 J = 1 , NJ CALL DPLGND ( MNAUF , P ( 0 , J ), H ) DO 3 K = 1 , NK LL = 0 LLP = 0 LLH = 0 DO 2 M = 0 , MNAUF SCR = 0.D0 SCI = 0.D0 ACR = 0.D0 ACI = 0.D0 MUSCR = 0.D0 MUSCI = 0.D0 MUACR = 0.D0 MUACI = 0.D0 LLS = LL LLPS = LLP LLHS = LLH IF ( 2 * M + 1 . LT . MAUF ) THEN DO 1 N = M , MNAUF , 2 RT = XMN ( 2 * LL , K ) IT = XMN ( 2 * LL + 1 , K ) SCR = SCR + RT * P ( LLP , J ) SCI = SCI + IT * P ( LLP , J ) MUACR = MUACR + RT * H ( LLH ) MUACI = MUACI + IT * H ( LLH ) LL = LL + 2 LLP = LLP + 2 LLH = LLH + 2 1 CONTINUE LL = LLS + 1 LLP = LLPS + 1 LLH = LLHS + 1 DO 11 N = M + 1 , MNAUF , 2 RT = XMN ( 2 * LL , K ) IT = XMN ( 2 * LL + 1 , K ) ACR = ACR + RT * P ( LLP , J ) ACI = ACI + IT * P ( LLP , J ) MUSCR = MUSCR + RT * H ( LLH ) MUSCI = MUSCI + IT * H ( LLH ) LL = LL + 2 LLP = LLP + 2 LLH = LLH + 2 11 CONTINUE END IF LL = LLS + ( MNAUF - M + 1 ) LLP = LLPS + ( MNAUF - M + 3 ) LLH = LLHS + ( MNAUF - M + 2 ) UFOUC ( 2 * M ) =- M * ( SCI - ACI ) / ERAD UFOUC ( 2 * M + 1 ) = M * ( SCR - ACR ) / ERAD VFOUC ( 2 * M ) =- M * ( SCI + ACI ) / ERAD VFOUC ( 2 * M + 1 ) = M * ( SCR + ACR ) / ERAD MUFOUC ( 2 * M ) =- ( MUSCR - MUACR ) / ERAD MUFOUC ( 2 * M + 1 ) =- ( MUSCI - MUACI ) / ERAD MVFOUC ( 2 * M ) =- ( MUSCR + MUACR ) / ERAD MVFOUC ( 2 * M + 1 ) =- ( MUSCI + MUACI ) / ERAD 2 CONTINUE CALL RFOURTR ( VFOUC , GWSAVE , IFAX , MNAUF , MAUF , 1 ) CALL RFOURTR ( MVFOUC , GWSAVE , IFAX , MNAUF , MAUF , 1 ) DO 6 I = 0 , NI - 1 IF ( MANF + I . LE . MAUF ) THEN XLAM ( I + 1 , J , K ) = VFOUC ( MANF + I - 1 ) XPHI ( I + 1 , J , K ) = MVFOUC ( MANF + I - 1 ) ELSE XLAM ( I + 1 , J , K ) = VFOUC ( MANF - MAUF + I - 1 ) XPHI ( I + 1 , J , K ) = MVFOUC ( MANF - MAUF + I - 1 ) END IF 6 CONTINUE 3 CONTINUE GGIND = GGIND + MAUF 4 CONTINUE RETURN END SUBROUTINE PHGRACUT SUBROUTINE CONTGL ( PS , DPSDL , DPSDM , DIV , U , V , BREITE , ETA , MLAT , A , B , NI , NJ , NK ) !! Berechnung der Divergenz aus dem Windfeld (U,V) !! im Phasenraum. Zurueckgegeben werden die Felder der !! Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. ! GWSAVE ist ein Hilfsfeld fuer die FFT ! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung ! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis ! MNAUF gibt die spektrale Aufloesung an, ! NI = Anzahl der Gauss'schen Gitterpunkte, ! NJ = Anzahl der Gauss'schen Breiten, ! NK = Anzahl der Niveaus ! Beachte, dass das Windfeld eine um 1 erhoehte Aufloesung in mu-Richtung hat. IMPLICIT NONE INTEGER NI , NJ , NK , I , J , K , MLAT ( NJ ), L REAL A ( NK + 1 ), B ( NK + 1 ) REAL PS ( NI ), DPSDL ( NI ), DPSDM ( NI ) REAL DIV ( NI , NK ), U ( NI , NK ), V ( NI , NK ), ETA ( NI , NK ) REAL BREITE ( NJ ) REAL DIVT1 , DIVT2 , POB , PUN , DPSDT , COSB L = 0 DO 4 J = 1 , NJ COSB = ( 1.0 - BREITE ( J ) * BREITE ( J )) DO 3 I = 1 , MLAT ( J ) L = L + 1 DIVT1 = 0.0 DIVT2 = 0.0 DO 1 K = 1 , NK POB = A ( K ) + B ( K ) * PS ( L ) PUN = A ( K + 1 ) + B ( K + 1 ) * PS ( L ) DIVT1 = DIVT1 + DIV ( L , K ) * ( PUN - POB ) IF ( COSB . GT . 0. ) THEN DIVT2 = DIVT2 + ( B ( K + 1 ) - B ( K )) * PS ( L ) * & ( U ( L , K ) * DPSDL ( L ) + V ( L , K ) * DPSDM ( L )) / COSB END IF ETA ( L , K ) =- DIVT1 - DIVT2 1 CONTINUE DPSDT = ( - DIVT1 - DIVT2 ) / PS ( L ) DO 2 K = 1 , NK ETA ( L , K ) = ETA ( L , K ) - DPSDT * B ( K + 1 ) * PS ( L ) 2 CONTINUE PS ( L ) = DPSDT * PS ( L ) 3 CONTINUE 4 CONTINUE RETURN END SUBROUTINE CONTGL SUBROUTINE OMEGA ( PS , DPSDL , DPSDM , DIV , U , V , BREITE , E , MLAT , A , B , NGI , NGJ , MKK ) !! calculates $\\omega$ in the hybrid ($\\eta$-) coordinate system ! OMEGA berechnet omega im Hybridkoordinatensystem ! PS ist der Bodendruck, ! DPSDL,DPSDM sind die Komponenten des Gradienten des Logarithmus des ! Bodendrucks ! DIV,U,V sind die horizontale Divergenz und das horizontale Windfeld ! BREITE ist das Feld der Gauss'schen Breiten ! E ist omega, IMPLICIT NONE INTEGER I , J , K , L , NGI , NGJ , MKK , MLAT ( NGJ ) REAL PS ( NGI ), DPSDL ( NGI ), DPSDM ( NGI ), A ( MKK + 1 ), B ( MKK + 1 ) REAL DIV ( NGI , MKK ), U ( NGI , MKK ), V ( NGI , MKK ), E ( NGI , MKK ) REAL BREITE ( NGJ ) REAL DIVT1 , DIVT2 , POB , PUN , DP , X , Y , COSB REAL DIVT3 ( MKK + 2 ) L = 0 DO 4 J = 1 , NGJ COSB = ( 1.0 - BREITE ( J ) * BREITE ( J )) DO 3 I = 1 , MLAT ( J ) L = L + 1 DIVT1 = 0.0 DIVT2 = 0.0 DIVT3 ( 1 ) = 0.0 DO 1 K = 1 , MKK POB = A ( K ) + B ( K ) * PS ( L ) PUN = A ( K + 1 ) + B ( K + 1 ) * PS ( L ) DP = PUN - POB Y = PS ( L ) * ( U ( L , K ) * DPSDL ( L ) + V ( L , K ) * DPSDM ( L )) / COSB IF ( K . LT . 3 ) THEN X = 0.0 ELSE X = ( B ( K + 1 ) - B ( K )) * Y END IF DIVT1 = DIVT1 + DIV ( L , K ) * DP DIVT2 = DIVT2 + X DIVT3 ( K + 1 ) =- DIVT1 - DIVT2 IF ( K . GT . 1 ) THEN E ( L , K ) = 0.5 * ( POB + PUN ) / & DP * Y * (( B ( K + 1 ) - B ( K )) + ( A ( K + 1 ) * B ( K ) - A ( K ) * B ( K + 1 )) / DP * LOG ( PUN / POB )) ELSE E ( L , K ) = 0.0 END IF E ( L , K ) = E ( L , K ) + 0.5 * ( DIVT3 ( K ) + DIVT3 ( K + 1 )) 1 CONTINUE 3 CONTINUE 4 CONTINUE RETURN END SUBROUTINE OMEGA END MODULE FTRAFO","tags":"","loc":"sourcefile/ftrafo.f90.html","title":"ftrafo.f90 – Flex_extract: Calculation of etadot"},{"text":"function IA(FIELD1, NI, NJ, NK, G) Calculate something that is roughly log10( maxval(field1)/g ) [PS] Arguments Type Intent Optional Attributes Name real, intent(in) :: FIELD1 (NI,NJ,NK) integer, intent(in) :: NI integer, intent(in) :: NJ integer, intent(in) :: NK real, intent(in) :: G Return Value integer Contents None","tags":"","loc":"proc/ia.html","title":"IA – Flex_extract: Calculation of etadot"},{"text":"subroutine STATIS(NI, NJ, NK, PHI, RMS, MW, SIG) calculate mean, rms, stdev Arguments Type Intent Optional Attributes Name integer :: NI integer :: NJ integer :: NK real :: PHI (NI,NJ,NK) real :: RMS real :: MW real :: SIG Called by proc~~statis~~CalledByGraph proc~statis STATIS program~calc_etadot calc_etadot program~calc_etadot->proc~statis Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/statis.html","title":"STATIS – Flex_extract: Calculation of etadot"},{"text":"subroutine POSNAM(KULNAM, CDNAML) position in namelist file. Arguments Type Intent Optional Attributes Name integer, intent(in) :: KULNAM character(len=*), intent(in) :: CDNAML Called by proc~~posnam~~CalledByGraph proc~posnam POSNAM program~calc_etadot calc_etadot program~calc_etadot->proc~posnam Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/posnam.html","title":"POSNAM – Flex_extract: Calculation of etadot"},{"text":"public subroutine READLATLON(filename, feld, maxl, maxb, mlevel, mpar) Uses GRIB_API proc~~readlatlon~~UsesGraph proc~readlatlon READLATLON GRIB_API GRIB_API proc~readlatlon->GRIB_API Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Read a field from GRIB file on lat-lon grid write( , ) 'readlatlon: ',i-1,' records read' Arguments Type Intent Optional Attributes Name character(len=*) :: filename real, dimension(maxl,maxb,mlevel) :: feld integer :: maxl integer :: maxb integer :: mlevel integer :: mpar (:) Calls proc~~readlatlon~~CallsGraph proc~readlatlon READLATLON grib_count_in_file grib_count_in_file proc~readlatlon->grib_count_in_file grib_close_file grib_close_file proc~readlatlon->grib_close_file Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~readlatlon~~CalledByGraph proc~readlatlon READLATLON program~calc_etadot calc_etadot program~calc_etadot->proc~readlatlon Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/readlatlon.html","title":"READLATLON – Flex_extract: Calculation of etadot"},{"text":"public subroutine WRITELATLON(IUNIT, igrib, ogrib, FELD, MAXL, MAXB, MLEVEL, MLEVELIST, MSTRIDE, MPAR) Uses GRIB_API proc~~writelatlon~~UsesGraph proc~writelatlon WRITELATLON GRIB_API GRIB_API proc~writelatlon->GRIB_API Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. write a field on lat-lon grid to GRIB file Arguments Type Intent Optional Attributes Name integer :: IUNIT integer :: igrib integer :: ogrib real :: FELD (MAXL,MAXB,MLEVEL) integer :: MAXL integer :: MAXB integer :: MLEVEL character(len=*) :: MLEVELIST integer :: MSTRIDE integer :: MPAR (MSTRIDE) Calls proc~~writelatlon~~CallsGraph proc~writelatlon WRITELATLON grib_write grib_write proc~writelatlon->grib_write grib_set grib_set proc~writelatlon->grib_set Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/writelatlon.html","title":"WRITELATLON – Flex_extract: Calculation of etadot"},{"text":"public subroutine READSPECTRAL(filename, CXMN, mnauf, mlevel, maxlev, mpar, A, B) Uses GRIB_API proc~~readspectral~~UsesGraph proc~readspectral READSPECTRAL GRIB_API GRIB_API proc~readspectral->GRIB_API Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. read a GRIB file in spherical harmonics write( , ) 'readspectral: ',i-1,' records read' Arguments Type Intent Optional Attributes Name character(len=*) :: filename real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) integer :: mnauf integer :: mlevel integer :: maxlev integer :: mpar (:) real :: A (MAXLEV+1) real :: B (MAXLEV+1) Calls proc~~readspectral~~CallsGraph proc~readspectral READSPECTRAL grib_count_in_file grib_count_in_file proc~readspectral->grib_count_in_file grib_close_file grib_close_file proc~readspectral->grib_close_file Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~readspectral~~CalledByGraph proc~readspectral READSPECTRAL program~calc_etadot calc_etadot program~calc_etadot->proc~readspectral Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/readspectral.html","title":"READSPECTRAL – Flex_extract: Calculation of etadot"},{"text":"public subroutine GRPH213(CXMN, FELD, WSAVE, IFAX, Z, W, MLAT, MNAUF, MAXL, MAXB, MLEVEL) WRONG>>> DIE ROUTINE F]HRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF KUGELKOORDINATEN DURCH Arguments Type Intent Optional Attributes Name real :: CXMN real :: FELD (MAXL,MLEVEL) real :: WSAVE integer :: IFAX (10,MAXB) real :: Z (MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) real :: W (MAXB) integer :: MLAT (MAXB) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL Calls proc~~grph213~~CallsGraph proc~grph213 GRPH213 ind ind proc~grph213->ind proc~grphsub GRPHSUB proc~grph213->proc~grphsub Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~grph213~~CalledByGraph proc~grph213 GRPH213 program~calc_etadot calc_etadot program~calc_etadot->proc~grph213 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/grph213.html","title":"GRPH213 – Flex_extract: Calculation of etadot"},{"text":"public subroutine GRPHSUB(L, IND, CXMN, FELD, WSAVE, IFAX, Z, W, MLAT, MNAUF, MAXL, MAXB, MLEVEL) DIE ROUTINE F]HRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF KUGELKOORDINATEN DURCH Arguments Type Intent Optional Attributes Name integer :: L integer :: IND (MAXB) real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MLEVEL) real :: WSAVE (8*MAXB+15,MAXB/2) integer :: IFAX (10,MAXB) real :: Z (MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) real :: W (MAXB) integer :: MLAT (MAXB) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL Called by proc~~grphsub~~CalledByGraph proc~grphsub GRPHSUB proc~grph213 GRPH213 proc~grph213->proc~grphsub program~calc_etadot calc_etadot program~calc_etadot->proc~grph213 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/grphsub.html","title":"GRPHSUB – Flex_extract: Calculation of etadot"},{"text":"public subroutine LGTR213(CXMN, CXM, Z, W, MLAT, MNAUF, MAXB) DIESE ROUTINE BERECHNET DIE KFFKs CXMN Arguments Type Intent Optional Attributes Name real :: CXMN real :: CXM real(kind=8) :: Z (MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) real(kind=8) :: W (MAXB) integer :: MLAT (MAXB) integer :: MNAUF integer :: MAXB Contents None","tags":"","loc":"proc/lgtr213.html","title":"LGTR213 – Flex_extract: Calculation of etadot"},{"text":"public subroutine RFOUFTR(CXM, TRIGS, IFAX, MNAUF, MAXL, ISIGN) Arguments Type Intent Optional Attributes Name real :: CXM real :: TRIGS integer :: IFAX (10) integer :: MNAUF integer :: MAXL integer :: ISIGN Calls proc~~rfouftr~~CallsGraph proc~rfouftr RFOUFTR wsave wsave proc~rfouftr->wsave fft99 fft99 proc~rfouftr->fft99 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/rfouftr.html","title":"RFOUFTR – Flex_extract: Calculation of etadot"},{"text":"public subroutine PHGR213(CXMN, FELD, WSAVE, IFAX, Z, MLAT, MNAUF, MAXL, MAXB, MLEVEL) DIE ROUTINE F]HRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF DAS REDUZIERTE GAUSS'SCHE GITTER DURCH Arguments Type Intent Optional Attributes Name real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MLEVEL) real :: WSAVE (8*MAXB+15,MAXB/2) integer :: IFAX (10,MAXB) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2) integer :: MLAT (MAXB/2) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL Calls proc~~phgr213~~CallsGraph proc~phgr213 PHGR213 proc~phsym PHSYM proc~phgr213->proc~phsym Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~phgr213~~CalledByGraph proc~phgr213 PHGR213 program~calc_etadot calc_etadot program~calc_etadot->proc~phgr213 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/phgr213.html","title":"PHGR213 – Flex_extract: Calculation of etadot"},{"text":"public subroutine PHSYM(K, IND, CXMN, FELD, Z, WSAVE, IFAX, MLAT, MNAUF, MAXL, MAXB, MLEVEL) Arguments Type Intent Optional Attributes Name integer :: K integer :: IND (MAXB) real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MLEVEL) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2) real :: WSAVE (8*MAXB+15,MAXB/2) integer :: IFAX (10,MAXB) integer :: MLAT (MAXB/2) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL Called by proc~~phsym~~CalledByGraph proc~phsym PHSYM proc~phgr213 PHGR213 proc~phgr213->proc~phsym program~calc_etadot calc_etadot program~calc_etadot->proc~phgr213 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/phsym.html","title":"PHSYM – Flex_extract: Calculation of etadot"},{"text":"public subroutine PHGCUT(CXMN, FELD, WSAVE, IFAX, Z, MNAUF, MMAX, MAUF, MANF, MAXL, MAXB, MLEVEL) DIE ROUTINE FUEHRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF KUGELKOORDINATEN DURCH. Es kann ein Teilausschnitt\n Der Erde angegeben werden. Diese Routine ist langsamer als phgrph WRITE(*,*) 'Symmetrisch: ',SYM Arguments Type Intent Optional Attributes Name real :: CXMN real :: FELD (MAXL,MAXB,MLEVEL) real :: WSAVE integer :: IFAX (10) real :: Z (0:((MMAX+3)*(MMAX+4))/2,MAXB) integer :: MNAUF integer :: MMAX integer :: MAUF integer :: MANF integer :: MAXL integer :: MAXB integer :: MLEVEL Calls proc~~phgcut~~CallsGraph proc~phgcut PHGCUT proc~phsymcut PHSYMCUT proc~phgcut->proc~phsymcut proc~phgpns PHGPNS proc~phgcut->proc~phgpns proc~rfourtr RFOURTR proc~phsymcut->proc~rfourtr proc~phgpns->proc~rfourtr fft99 fft99 proc~rfourtr->fft99 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~phgcut~~CalledByGraph proc~phgcut PHGCUT program~calc_etadot calc_etadot program~calc_etadot->proc~phgcut Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/phgcut.html","title":"PHGCUT – Flex_extract: Calculation of etadot"},{"text":"public subroutine PHSYMCUT(J, CXMN, FELD, Z, WSAVE, IFAX, MAUF, MNAUF, MAXL, MAXB, MLEVEL, MANF) Arguments Type Intent Optional Attributes Name integer :: J real :: CXMN real :: FELD (MAXL,MAXB,MLEVEL) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB) real :: WSAVE integer :: IFAX (10) integer :: MAUF integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL integer :: MANF Calls proc~~phsymcut~~CallsGraph proc~phsymcut PHSYMCUT proc~rfourtr RFOURTR proc~phsymcut->proc~rfourtr fft99 fft99 proc~rfourtr->fft99 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~phsymcut~~CalledByGraph proc~phsymcut PHSYMCUT proc~phgcut PHGCUT proc~phgcut->proc~phsymcut program~calc_etadot calc_etadot program~calc_etadot->proc~phgcut Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/phsymcut.html","title":"PHSYMCUT – Flex_extract: Calculation of etadot"},{"text":"public subroutine PHGPNS(CXMN, FELD, Z, WSAVE, IFAX, J, MNAUF, MAUF, MANF, MAXL, MAXB, MLEVEL) Arguments Type Intent Optional Attributes Name real, intent(in) :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MAXB,MLEVEL) real, intent(in) :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB) real, intent(in) :: WSAVE (4*MAUF+15) integer :: IFAX (10) integer, intent(in) :: J integer, intent(in) :: MNAUF integer, intent(in) :: MAUF integer, intent(in) :: MANF integer, intent(in) :: MAXL integer, intent(in) :: MAXB integer, intent(in) :: MLEVEL Calls proc~~phgpns~~CallsGraph proc~phgpns PHGPNS proc~rfourtr RFOURTR proc~phgpns->proc~rfourtr fft99 fft99 proc~rfourtr->fft99 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~phgpns~~CalledByGraph proc~phgpns PHGPNS proc~phgcut PHGCUT proc~phgcut->proc~phgpns program~calc_etadot calc_etadot program~calc_etadot->proc~phgcut Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/phgpns.html","title":"PHGPNS – Flex_extract: Calculation of etadot"},{"text":"public subroutine LEGTR(CXMN, CXM, Z, MNAUF, MAUF) DIESE ROUTINE BERECHNET DIE FOURIERKOEFFIZIENTEN CXM Arguments Type Intent Optional Attributes Name real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1) real :: CXM (0:MAXAUF-1) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2) integer :: MNAUF integer :: MAUF Contents None","tags":"","loc":"proc/legtr.html","title":"LEGTR – Flex_extract: Calculation of etadot"},{"text":"public subroutine RFOURTR(CXM, TRIGS, IFAX, MNAUF, MAXL, ISIGN) BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS Arguments Type Intent Optional Attributes Name real :: CXM real :: TRIGS (2*MAXL) integer :: IFAX (10) integer :: MNAUF integer :: MAXL integer :: ISIGN Calls proc~~rfourtr~~CallsGraph proc~rfourtr RFOURTR fft99 fft99 proc~rfourtr->fft99 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~rfourtr~~CalledByGraph proc~rfourtr RFOURTR proc~phsymcut PHSYMCUT proc~phsymcut->proc~rfourtr proc~phgpns PHGPNS proc~phgpns->proc~rfourtr proc~phgracut PHGRACUT proc~phgracut->proc~rfourtr proc~phgcut PHGCUT proc~phgcut->proc~phsymcut proc~phgcut->proc~phgpns program~calc_etadot calc_etadot program~calc_etadot->proc~phgcut Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/rfourtr.html","title":"RFOURTR – Flex_extract: Calculation of etadot"},{"text":"public subroutine GAULEG(X1, X2, X, W, N) BERECHNET DIE GAUSS+SCHEN BREITEN Arguments Type Intent Optional Attributes Name real :: X1 real :: X2 real :: X real :: W integer :: N Calls proc~~gauleg~~CallsGraph proc~gauleg GAULEG dcos dcos proc~gauleg->dcos Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~gauleg~~CalledByGraph proc~gauleg GAULEG program~calc_etadot calc_etadot program~calc_etadot->proc~gauleg Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/gauleg.html","title":"GAULEG – Flex_extract: Calculation of etadot"},{"text":"public subroutine PLGNFA(LL, X, Z) PLGNDN BERECHNET ALLE NORMIERTEN ASSOZIIERTEN\n LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X)\n UND SCHREIBT SIE IN DAS FELD Z Arguments Type Intent Optional Attributes Name integer :: LL real :: X real :: Z Contents None","tags":"","loc":"proc/plgnfa.html","title":"PLGNFA – Flex_extract: Calculation of etadot"},{"text":"public subroutine DPLGND(MNAUF, Z, DZ) DPLGND BERECHNET DIE ABLEITUNG DER NORMIERTEN ASSOZIIERTEN\n LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X)\n UND SCHREIBT SIE IN DAS FELD DZ Arguments Type Intent Optional Attributes Name integer :: MNAUF real :: Z real :: DZ Contents None","tags":"","loc":"proc/dplgnd.html","title":"DPLGND – Flex_extract: Calculation of etadot"},{"text":"public subroutine SPFILTER(FELDMN, MM, MMAX) Spectral Filter of Sardeshmukh and Hoskins (1984, MWR) Arguments Type Intent Optional Attributes Name real :: FELDMN (0:(MM+1)*(MM+2)-1) integer :: MM integer :: MMAX Calls proc~~spfilter~~CallsGraph proc~spfilter SPFILTER float float proc~spfilter->float alog alog proc~spfilter->alog Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/spfilter.html","title":"SPFILTER – Flex_extract: Calculation of etadot"},{"text":"public subroutine VDTOUV(XMN, XLAM, XPHI, GWSAVE, IFAX, P, MLAT, MNAUF, NI, NJ, NK) Uses PHTOGR proc~~vdtouv~~UsesGraph proc~vdtouv VDTOUV module~phtogr PHTOGR proc~vdtouv->module~phtogr Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Berechnung der scale winds aus Vorticity und Divergenz\n uebergibt man in XMN die Divergenz, so wird der divergente Anteil des\n Windes (XPHI=Ud,XPHI=Vd) zurueckgegeben, uebergibt man die Vorticity, so\n erhaelt man den rotationellen Wind (XLAM=Vrot,XPHI=-Urot).\n Summiert man beide, erhaelt man den gesamten Scale wind Arguments Type Intent Optional Attributes Name real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NK) real :: XPHI (NI,NK) real :: GWSAVE (8*NJ+15,NJ/2) integer :: IFAX (10,NJ) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) integer :: MLAT (NJ) integer :: MNAUF integer :: NI integer :: NJ integer :: NK Contents None","tags":"","loc":"proc/vdtouv.html","title":"VDTOUV – Flex_extract: Calculation of etadot"},{"text":"public subroutine VDUVSUB(J, XMN, XLAM, XPHI, GWSAVE, IFAX, P, GGIND, MLAT, MNAUF, NI, NJ, NK) Uses PHTOGR proc~~vduvsub~~UsesGraph proc~vduvsub VDUVSUB module~phtogr PHTOGR proc~vduvsub->module~phtogr Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Arguments Type Intent Optional Attributes Name integer :: J real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NK) real :: XPHI (NI,NK) real :: GWSAVE (8*NJ+15,NJ/2) integer :: IFAX (10,NJ) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) integer :: GGIND integer :: MLAT (NJ) integer :: MNAUF integer :: NI integer :: NJ integer :: NK Contents None","tags":"","loc":"proc/vduvsub.html","title":"VDUVSUB – Flex_extract: Calculation of etadot"},{"text":"public subroutine PHGRAD(XMN, XLAM, XPHI, GWSAVE, IFAX, P, H, MLAT, MNAUF, NI, NJ, NK) Uses PHTOGR proc~~phgrad~~UsesGraph proc~phgrad PHGRAD module~phtogr PHTOGR proc~phgrad->module~phtogr Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Berechnung des Gradienten eines Skalars aus dem Feld des\n Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der\n Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. Arguments Type Intent Optional Attributes Name real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NK) real :: XPHI (NI,NK) real :: GWSAVE (8*NJ+15,NJ/2) integer :: IFAX (10,NJ) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) real :: H (0:(MNAUF+2)*(MNAUF+3)/2) integer :: MLAT (NJ) integer :: MNAUF integer :: NI integer :: NJ integer :: NK Called by proc~~phgrad~~CalledByGraph proc~phgrad PHGRAD program~calc_etadot calc_etadot program~calc_etadot->proc~phgrad Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/phgrad.html","title":"PHGRAD – Flex_extract: Calculation of etadot"},{"text":"public subroutine PHGRACUT(XMN, XLAM, XPHI, GWSAVE, IFAX, P, H, MAUF, MNAUF, NI, NJ, MANF, NK) Uses PHTOGR proc~~phgracut~~UsesGraph proc~phgracut PHGRACUT module~phtogr PHTOGR proc~phgracut->module~phtogr Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Berechnung des Gradienten eines Skalars aus dem Feld des\n Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der\n Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. Arguments Type Intent Optional Attributes Name real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NJ,NK) real :: XPHI (NI,NJ,NK) real :: GWSAVE (4*MAUF+15) integer :: IFAX (10) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ) real :: H (0:(MNAUF+2)*(MNAUF+3)/2) integer :: MAUF integer :: MNAUF integer :: NI integer :: NJ integer :: MANF integer :: NK Calls proc~~phgracut~~CallsGraph proc~phgracut PHGRACUT proc~rfourtr RFOURTR proc~phgracut->proc~rfourtr fft99 fft99 proc~rfourtr->fft99 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/phgracut.html","title":"PHGRACUT – Flex_extract: Calculation of etadot"},{"text":"public subroutine CONTGL(PS, DPSDL, DPSDM, DIV, U, V, BREITE, ETA, MLAT, A, B, NI, NJ, NK) Berechnung der Divergenz aus dem Windfeld (U,V)\n im Phasenraum. Zurueckgegeben werden die Felder der\n Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. Arguments Type Intent Optional Attributes Name real :: PS (NI) real :: DPSDL (NI) real :: DPSDM (NI) real :: DIV (NI,NK) real :: U (NI,NK) real :: V (NI,NK) real :: BREITE (NJ) real :: ETA (NI,NK) integer :: MLAT (NJ) real :: A (NK+1) real :: B (NK+1) integer :: NI integer :: NJ integer :: NK Contents None","tags":"","loc":"proc/contgl.html","title":"CONTGL – Flex_extract: Calculation of etadot"},{"text":"public subroutine OMEGA(PS, DPSDL, DPSDM, DIV, U, V, BREITE, E, MLAT, A, B, NGI, NGJ, MKK) calculates $\\omega$ in the hybrid ($\\eta$-) coordinate system Arguments Type Intent Optional Attributes Name real :: PS (NGI) real :: DPSDL (NGI) real :: DPSDM (NGI) real :: DIV (NGI,MKK) real :: U (NGI,MKK) real :: V (NGI,MKK) real :: BREITE (NGJ) real :: E (NGI,MKK) integer :: MLAT (NGJ) real :: A (MKK+1) real :: B (MKK+1) integer :: NGI integer :: NGJ integer :: MKK Contents None","tags":"","loc":"proc/omega.html","title":"OMEGA – Flex_extract: Calculation of etadot"},{"text":"Used by module~~rwgrib2~~UsedByGraph module~rwgrib2 RWGRIB2 program~calc_etadot calc_etadot program~calc_etadot->module~rwgrib2 Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Contents Subroutines READLATLON WRITELATLON READSPECTRAL Subroutines public subroutine READLATLON (filename, feld, maxl, maxb, mlevel, mpar) Read a field from GRIB file on lat-lon grid Read more… Arguments Type Intent Optional Attributes Name character(len=*) :: filename real, dimension(maxl,maxb,mlevel) :: feld integer :: maxl integer :: maxb integer :: mlevel integer :: mpar (:) public subroutine WRITELATLON (IUNIT, igrib, ogrib, FELD, MAXL, MAXB, MLEVEL, MLEVELIST, MSTRIDE, MPAR) write a field on lat-lon grid to GRIB file Arguments Type Intent Optional Attributes Name integer :: IUNIT integer :: igrib integer :: ogrib real :: FELD (MAXL,MAXB,MLEVEL) integer :: MAXL integer :: MAXB integer :: MLEVEL character(len=*) :: MLEVELIST integer :: MSTRIDE integer :: MPAR (MSTRIDE) public subroutine READSPECTRAL (filename, CXMN, mnauf, mlevel, maxlev, mpar, A, B) read a GRIB file in spherical harmonics Read more… Arguments Type Intent Optional Attributes Name character(len=*) :: filename real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) integer :: mnauf integer :: mlevel integer :: maxlev integer :: mpar (:) real :: A (MAXLEV+1) real :: B (MAXLEV+1)","tags":"","loc":"module/rwgrib2.html","title":"RWGRIB2 – Flex_extract: Calculation of etadot"},{"text":"Uses PHTOGR module~~grtoph~~UsesGraph module~grtoph GRTOPH module~phtogr PHTOGR module~grtoph->module~phtogr Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Used by module~~grtoph~~UsedByGraph module~grtoph GRTOPH program~calc_etadot calc_etadot program~calc_etadot->module~grtoph Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Contents Subroutines GRPH213 GRPHSUB LGTR213 RFOUFTR Subroutines public subroutine GRPH213 (CXMN, FELD, WSAVE, IFAX, Z, W, MLAT, MNAUF, MAXL, MAXB, MLEVEL) WRONG>>> DIE ROUTINE F]HRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF KUGELKOORDINATEN DURCH Arguments Type Intent Optional Attributes Name real :: CXMN real :: FELD (MAXL,MLEVEL) real :: WSAVE integer :: IFAX (10,MAXB) real :: Z (MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) real :: W (MAXB) integer :: MLAT (MAXB) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL public subroutine GRPHSUB (L, IND, CXMN, FELD, WSAVE, IFAX, Z, W, MLAT, MNAUF, MAXL, MAXB, MLEVEL) DIE ROUTINE F]HRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF KUGELKOORDINATEN DURCH Arguments Type Intent Optional Attributes Name integer :: L integer :: IND (MAXB) real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MLEVEL) real :: WSAVE (8*MAXB+15,MAXB/2) integer :: IFAX (10,MAXB) real :: Z (MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) real :: W (MAXB) integer :: MLAT (MAXB) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL public subroutine LGTR213 (CXMN, CXM, Z, W, MLAT, MNAUF, MAXB) Read more… Arguments Type Intent Optional Attributes Name real :: CXMN real :: CXM real(kind=8) :: Z (MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) real(kind=8) :: W (MAXB) integer :: MLAT (MAXB) integer :: MNAUF integer :: MAXB public subroutine RFOUFTR (CXM, TRIGS, IFAX, MNAUF, MAXL, ISIGN) Arguments Type Intent Optional Attributes Name real :: CXM real :: TRIGS integer :: IFAX (10) integer :: MNAUF integer :: MAXL integer :: ISIGN","tags":"","loc":"module/grtoph.html","title":"GRTOPH – Flex_extract: Calculation of etadot"},{"text":"Used by module~~phtogr~~UsedByGraph module~phtogr PHTOGR proc~vduvsub VDUVSUB proc~vduvsub->module~phtogr program~calc_etadot calc_etadot program~calc_etadot->module~phtogr module~grtoph GRTOPH program~calc_etadot->module~grtoph proc~phgrad PHGRAD proc~phgrad->module~phtogr module~grtoph->module~phtogr proc~vdtouv VDTOUV proc~vdtouv->module~phtogr proc~phgracut PHGRACUT proc~phgracut->module~phtogr Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Contents Variables MAXAUF Subroutines PHGR213 PHSYM PHGCUT PHSYMCUT PHGPNS LEGTR RFOURTR GAULEG PLGNFA DPLGND SPFILTER Variables Type Visibility Attributes Name Initial integer, public, parameter :: MAXAUF = 36000 Subroutines public subroutine PHGR213 (CXMN, FELD, WSAVE, IFAX, Z, MLAT, MNAUF, MAXL, MAXB, MLEVEL) DIE ROUTINE F]HRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF DAS REDUZIERTE GAUSS'SCHE GITTER DURCH Arguments Type Intent Optional Attributes Name real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MLEVEL) real :: WSAVE (8*MAXB+15,MAXB/2) integer :: IFAX (10,MAXB) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2) integer :: MLAT (MAXB/2) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL public subroutine PHSYM (K, IND, CXMN, FELD, Z, WSAVE, IFAX, MLAT, MNAUF, MAXL, MAXB, MLEVEL) Arguments Type Intent Optional Attributes Name integer :: K integer :: IND (MAXB) real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MLEVEL) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2) real :: WSAVE (8*MAXB+15,MAXB/2) integer :: IFAX (10,MAXB) integer :: MLAT (MAXB/2) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL public subroutine PHGCUT (CXMN, FELD, WSAVE, IFAX, Z, MNAUF, MMAX, MAUF, MANF, MAXL, MAXB, MLEVEL) DIE ROUTINE FUEHRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF KUGELKOORDINATEN DURCH. Es kann ein Teilausschnitt\n Der Erde angegeben werden. Diese Routine ist langsamer als phgrph Read more… Arguments Type Intent Optional Attributes Name real :: CXMN real :: FELD (MAXL,MAXB,MLEVEL) real :: WSAVE integer :: IFAX (10) real :: Z (0:((MMAX+3)*(MMAX+4))/2,MAXB) integer :: MNAUF integer :: MMAX integer :: MAUF integer :: MANF integer :: MAXL integer :: MAXB integer :: MLEVEL public subroutine PHSYMCUT (J, CXMN, FELD, Z, WSAVE, IFAX, MAUF, MNAUF, MAXL, MAXB, MLEVEL, MANF) Arguments Type Intent Optional Attributes Name integer :: J real :: CXMN real :: FELD (MAXL,MAXB,MLEVEL) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB) real :: WSAVE integer :: IFAX (10) integer :: MAUF integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL integer :: MANF public subroutine PHGPNS (CXMN, FELD, Z, WSAVE, IFAX, J, MNAUF, MAUF, MANF, MAXL, MAXB, MLEVEL) Arguments Type Intent Optional Attributes Name real, intent(in) :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MAXB,MLEVEL) real, intent(in) :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB) real, intent(in) :: WSAVE (4*MAUF+15) integer :: IFAX (10) integer, intent(in) :: J integer, intent(in) :: MNAUF integer, intent(in) :: MAUF integer, intent(in) :: MANF integer, intent(in) :: MAXL integer, intent(in) :: MAXB integer, intent(in) :: MLEVEL public subroutine LEGTR (CXMN, CXM, Z, MNAUF, MAUF) DIESE ROUTINE BERECHNET DIE FOURIERKOEFFIZIENTEN CXM Arguments Type Intent Optional Attributes Name real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1) real :: CXM (0:MAXAUF-1) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2) integer :: MNAUF integer :: MAUF public subroutine RFOURTR (CXM, TRIGS, IFAX, MNAUF, MAXL, ISIGN) Read more… Arguments Type Intent Optional Attributes Name real :: CXM real :: TRIGS (2*MAXL) integer :: IFAX (10) integer :: MNAUF integer :: MAXL integer :: ISIGN public subroutine GAULEG (X1, X2, X, W, N) BERECHNET DIE GAUSS+SCHEN BREITEN Arguments Type Intent Optional Attributes Name real :: X1 real :: X2 real :: X real :: W integer :: N public subroutine PLGNFA (LL, X, Z) PLGNDN BERECHNET ALLE NORMIERTEN ASSOZIIERTEN\n LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X)\n UND SCHREIBT SIE IN DAS FELD Z Arguments Type Intent Optional Attributes Name integer :: LL real :: X real :: Z public subroutine DPLGND (MNAUF, Z, DZ) DPLGND BERECHNET DIE ABLEITUNG DER NORMIERTEN ASSOZIIERTEN\n LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X)\n UND SCHREIBT SIE IN DAS FELD DZ Arguments Type Intent Optional Attributes Name integer :: MNAUF real :: Z real :: DZ public subroutine SPFILTER (FELDMN, MM, MMAX) Spectral Filter of Sardeshmukh and Hoskins (1984, MWR) Arguments Type Intent Optional Attributes Name real :: FELDMN (0:(MM+1)*(MM+2)-1) integer :: MM integer :: MMAX","tags":"","loc":"module/phtogr.html","title":"PHTOGR – Flex_extract: Calculation of etadot"},{"text":"Implementation of the spectral transformation using reduced the Gaussian grid Used by module~~ftrafo~~UsedByGraph module~ftrafo FTRAFO program~calc_etadot calc_etadot program~calc_etadot->module~ftrafo Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Contents Subroutines VDTOUV VDUVSUB PHGRAD PHGRACUT CONTGL OMEGA Subroutines public subroutine VDTOUV (XMN, XLAM, XPHI, GWSAVE, IFAX, P, MLAT, MNAUF, NI, NJ, NK) Berechnung der scale winds aus Vorticity und Divergenz\n uebergibt man in XMN die Divergenz, so wird der divergente Anteil des\n Windes (XPHI=Ud,XPHI=Vd) zurueckgegeben, uebergibt man die Vorticity, so\n erhaelt man den rotationellen Wind (XLAM=Vrot,XPHI=-Urot).\n Summiert man beide, erhaelt man den gesamten Scale wind Arguments Type Intent Optional Attributes Name real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NK) real :: XPHI (NI,NK) real :: GWSAVE (8*NJ+15,NJ/2) integer :: IFAX (10,NJ) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) integer :: MLAT (NJ) integer :: MNAUF integer :: NI integer :: NJ integer :: NK public subroutine VDUVSUB (J, XMN, XLAM, XPHI, GWSAVE, IFAX, P, GGIND, MLAT, MNAUF, NI, NJ, NK) Arguments Type Intent Optional Attributes Name integer :: J real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NK) real :: XPHI (NI,NK) real :: GWSAVE (8*NJ+15,NJ/2) integer :: IFAX (10,NJ) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) integer :: GGIND integer :: MLAT (NJ) integer :: MNAUF integer :: NI integer :: NJ integer :: NK public subroutine PHGRAD (XMN, XLAM, XPHI, GWSAVE, IFAX, P, H, MLAT, MNAUF, NI, NJ, NK) Berechnung des Gradienten eines Skalars aus dem Feld des\n Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der\n Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. Arguments Type Intent Optional Attributes Name real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NK) real :: XPHI (NI,NK) real :: GWSAVE (8*NJ+15,NJ/2) integer :: IFAX (10,NJ) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) real :: H (0:(MNAUF+2)*(MNAUF+3)/2) integer :: MLAT (NJ) integer :: MNAUF integer :: NI integer :: NJ integer :: NK public subroutine PHGRACUT (XMN, XLAM, XPHI, GWSAVE, IFAX, P, H, MAUF, MNAUF, NI, NJ, MANF, NK) Berechnung des Gradienten eines Skalars aus dem Feld des\n Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der\n Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. Arguments Type Intent Optional Attributes Name real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NJ,NK) real :: XPHI (NI,NJ,NK) real :: GWSAVE (4*MAUF+15) integer :: IFAX (10) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ) real :: H (0:(MNAUF+2)*(MNAUF+3)/2) integer :: MAUF integer :: MNAUF integer :: NI integer :: NJ integer :: MANF integer :: NK public subroutine CONTGL (PS, DPSDL, DPSDM, DIV, U, V, BREITE, ETA, MLAT, A, B, NI, NJ, NK) Berechnung der Divergenz aus dem Windfeld (U,V)\n im Phasenraum. Zurueckgegeben werden die Felder der\n Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. Arguments Type Intent Optional Attributes Name real :: PS (NI) real :: DPSDL (NI) real :: DPSDM (NI) real :: DIV (NI,NK) real :: U (NI,NK) real :: V (NI,NK) real :: BREITE (NJ) real :: ETA (NI,NK) integer :: MLAT (NJ) real :: A (NK+1) real :: B (NK+1) integer :: NI integer :: NJ integer :: NK public subroutine OMEGA (PS, DPSDL, DPSDM, DIV, U, V, BREITE, E, MLAT, A, B, NGI, NGJ, MKK) calculates $\\omega$ in the hybrid ($\\eta$-) coordinate system Arguments Type Intent Optional Attributes Name real :: PS (NGI) real :: DPSDL (NGI) real :: DPSDM (NGI) real :: DIV (NGI,MKK) real :: U (NGI,MKK) real :: V (NGI,MKK) real :: BREITE (NGJ) real :: E (NGI,MKK) integer :: MLAT (NGJ) real :: A (MKK+1) real :: B (MKK+1) integer :: NGI integer :: NGJ integer :: MKK","tags":"","loc":"module/ftrafo.html","title":"FTRAFO – Flex_extract: Calculation of etadot"},{"text":"Uses PHTOGR GRTOPH FTRAFO RWGRIB2 GRIB_API program~~calc_etadot~~UsesGraph program~calc_etadot calc_etadot module~phtogr PHTOGR program~calc_etadot->module~phtogr module~rwgrib2 RWGRIB2 program~calc_etadot->module~rwgrib2 module~ftrafo FTRAFO program~calc_etadot->module~ftrafo module~grtoph GRTOPH program~calc_etadot->module~grtoph GRIB_API GRIB_API program~calc_etadot->GRIB_API module~grtoph->module~phtogr Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Prepare input data for FLEXPART, esp. vertical velocity as \n etadot or etadot * dp/deta author: L. Haimberger\n date: 03/2010\n version: V4.0 Program calc_etadot Prepares input data for POP model meteorological preprocessor Calculation of etapoint on a regular \\lambda-\\phi grid and writing U,V,ETAPOINT,T,PS,Q,SD,MSL,TCC,10U, 10V, 2T,2D,LSP,CP,SSHF,SSR, \n EWSS,NSSS to an output file (input and output in GRIB 1 or 2 format). etapoint is defined as the total time derivative of \n ECMWF vertical coordinate eta multiplied by the derivative\n of pressure with respect to eta: \\frac{\\mathrm{d}\\eta}{\\mathrm{d}t}\\frac{\\partial p}{\\partial \\eta} Version history and authors: 04/1994: Leopold Haimberger, Gerhard Wotawa 2003-05-11: Alexander Beck 12/2006: L. Haimberger V2.0,\n handle arbitrary regular grids and T799 resolution data 03/2010: L. Haimberger V4.0,\n handle GRIB edition 2 fields and T1279 resolution data 04-06/2019: Petra Seibert, \n beautify code and add FORD documentation # Input required: UNIT FILE PARAMETER(S) DATA REPRESENTATION\n\n 11 fort.11 T,U,V regular lambda phi grid\n 12 fort.12 D regular lambda phi grid \n 13 fort.13 LNSP spherical harmonics\n 14 fort.14 SD,MSL,TCC,10U, \n 10V,2T,2D regular lambda phi grid \n 16 fort.16 LSP,CP,SSHF, \n SSR,EWSS,NSSS regular lambda phi grid\n 17 fort.17 Q regular lambda phi grid Output produced: UNIT FILE PARAMETER(S) DATA REPRESENTATION\n\n15 fort.15 `U,V,ETA,T,PS, \n `Q,SD,MSL,TCC,` \n `10U,10V,2T,2D,` regular lambda phi grid \n `LSP,CP,SSHF,` \n `SSR,EWSS,NSSS` ALLOCATE VARIABLES Initialisieren Legendretransformation auf das LaT/LON Gitter Initialisation of fields for FFT and Legendre transformation\n to Gaussian grid and back to phase space\n read LNSP in SH\n read u,v in SH\n Transformieren des Windes auf das Gaussgitter read DIV in SH\n Transformieren der horizontalen Divergenz auf das Gaussgitter Berechnung des Gradienten des Logarithmus des Bodendrucks auf dem Gaussgitter Berechnung der Vertikalgeschwindigkeit auf dem Gaussgitter Berechnung von Omega auf dem Gaussgitter READING OF SURFACE PRESSURE READING OF U,V READING OF LNSP on grid READING OF DIVERGENCE Initialisieren Legendretransformation auf das LaT/LON Gitter\n Without Gaussian grid calculation Legendre Polynomials are calculated\n only for one latitude to save space CREATE FILE VERTICAL.EC NEEDED BY POP MODEL READING OF T READING OF SPECIFIC HUMIDITY WRITE MODEL LEVEL DATA TO fort.15 Calculation of etadot in CONTGL needed scaled winds (ucosphi,vcosphi)\n Now we are transforming back to the usual winds. Calls program~~calc_etadot~~CallsGraph program~calc_etadot calc_etadot proc~readspectral READSPECTRAL program~calc_etadot->proc~readspectral proc~phgcut PHGCUT program~calc_etadot->proc~phgcut proc~grph213 GRPH213 program~calc_etadot->proc~grph213 grib_close_file grib_close_file program~calc_etadot->grib_close_file proc~statis STATIS program~calc_etadot->proc~statis proc~phgr213 PHGR213 program~calc_etadot->proc~phgr213 proc~gauleg GAULEG program~calc_etadot->proc~gauleg grib_open_file grib_open_file program~calc_etadot->grib_open_file set99 set99 program~calc_etadot->set99 proc~posnam POSNAM program~calc_etadot->proc~posnam proc~readlatlon READLATLON program~calc_etadot->proc~readlatlon proc~phgrad PHGRAD program~calc_etadot->proc~phgrad proc~readspectral->grib_close_file grib_count_in_file grib_count_in_file proc~readspectral->grib_count_in_file proc~phsymcut PHSYMCUT proc~phgcut->proc~phsymcut proc~phgpns PHGPNS proc~phgcut->proc~phgpns proc~grphsub GRPHSUB proc~grph213->proc~grphsub ind ind proc~grph213->ind proc~phsym PHSYM proc~phgr213->proc~phsym dcos dcos proc~gauleg->dcos proc~readlatlon->grib_close_file proc~readlatlon->grib_count_in_file proc~rfourtr RFOURTR proc~phsymcut->proc~rfourtr proc~phgpns->proc~rfourtr fft99 fft99 proc~rfourtr->fft99 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents Variables LNPS Z T UV UV2 QA OM OMR DIV ETA ETAR DPSDL DPSDM PS DPSDT SURF FLUX OROLSM WSAVE H SINL COSL WSAVE2 BREITE GBREITE AK BK pv X1 X2 RMS MW SIG LAM CUA CVA P PP P2 XMN HILFUV LNPMN LNPMN2 LNPMN3 WEIGHT UGVG DG ETAG GWSAVE PSG HILF MLAT MPSURF MPFLUX MPORO MPAR GIFAX PI COSB DAK DBK P00 URLAR8 JMIN1 LLLAR8 MAXBMIN1 PIR8 DCOSB I J K L IERR M LTEST MK NGI NGJ MFLUX MSURF MORO LUNIT LUNIT2 MAXL MAXB MLEVEL LEVOUT LEVMIN LEVMAX MOMEGA MOMEGADIFF MGAUSS MSMOOTH MNAUF META METADIFF MDPDETA METAPAR RLO0 RLO1 RLA0 RLA1 MLEVELIST MAUF MANF IFAX IGRIB iret ogrib FILENAME Variables Type Attributes Name Initial real, ALLOCATABLE, DIMENSION (:,:) :: LNPS real, ALLOCATABLE, DIMENSION (:,:) :: Z real, ALLOCATABLE, DIMENSION (:,:,:) :: T real, ALLOCATABLE, DIMENSION (:,:,:) :: UV real, ALLOCATABLE, DIMENSION (:,:,:) :: UV2 real, ALLOCATABLE, DIMENSION (:,:,:) :: QA real, ALLOCATABLE, DIMENSION (:,:,:) :: OM real, ALLOCATABLE, DIMENSION (:,:,:) :: OMR real, ALLOCATABLE, DIMENSION (:,:,:) :: DIV real, ALLOCATABLE, DIMENSION (:,:,:) :: ETA real, ALLOCATABLE, DIMENSION (:,:,:) :: ETAR real, ALLOCATABLE, DIMENSION (:,:) :: DPSDL real, ALLOCATABLE, DIMENSION (:,:) :: DPSDM real, ALLOCATABLE, DIMENSION (:,:,:) :: PS real, ALLOCATABLE, DIMENSION (:,:,:) :: DPSDT real, ALLOCATABLE, DIMENSION (:,:,:) :: SURF real, ALLOCATABLE, DIMENSION (:,:,:) :: FLUX real, ALLOCATABLE, DIMENSION (:,:,:) :: OROLSM real, ALLOCATABLE, DIMENSION (:) :: WSAVE real, ALLOCATABLE, DIMENSION (:) :: H real, ALLOCATABLE, DIMENSION (:) :: SINL real, ALLOCATABLE, DIMENSION (:) :: COSL real, ALLOCATABLE, DIMENSION (:) :: WSAVE2 real, ALLOCATABLE, DIMENSION (:) :: BREITE real, ALLOCATABLE, DIMENSION (:) :: GBREITE real, ALLOCATABLE, DIMENSION (:) :: AK real, ALLOCATABLE, DIMENSION (:) :: BK real, ALLOCATABLE, DIMENSION (:) :: pv real :: X1 real :: X2 real :: RMS real :: MW real :: SIG real :: LAM real, ALLOCATABLE :: CUA (:,:,:) real, ALLOCATABLE :: CVA (:,:,:) real, ALLOCATABLE, DIMENSION (:,:) :: P real, ALLOCATABLE, DIMENSION (:,:) :: PP real, ALLOCATABLE, DIMENSION (:,:) :: P2 real, ALLOCATABLE, DIMENSION (:,:) :: XMN real, ALLOCATABLE, DIMENSION (:,:) :: HILFUV real, ALLOCATABLE, DIMENSION (:) :: LNPMN real, ALLOCATABLE, DIMENSION (:) :: LNPMN2 real, ALLOCATABLE, DIMENSION (:) :: LNPMN3 real, ALLOCATABLE, DIMENSION (:) :: WEIGHT real, ALLOCATABLE, DIMENSION (:,:) :: UGVG real, ALLOCATABLE, DIMENSION (:,:) :: DG real, ALLOCATABLE, DIMENSION (:,:) :: ETAG real, ALLOCATABLE, DIMENSION (:,:) :: GWSAVE real, ALLOCATABLE, DIMENSION (:) :: PSG real, ALLOCATABLE, DIMENSION (:) :: HILF integer, ALLOCATABLE, DIMENSION (:) :: MLAT integer, ALLOCATABLE, DIMENSION (:) :: MPSURF integer, ALLOCATABLE, DIMENSION (:) :: MPFLUX integer, ALLOCATABLE, DIMENSION (:) :: MPORO integer, ALLOCATABLE, DIMENSION (:) :: MPAR integer, ALLOCATABLE :: GIFAX (:,:) real :: PI real :: COSB real :: DAK real :: DBK real :: P00 real :: URLAR8 real :: JMIN1 real :: LLLAR8 real :: MAXBMIN1 real :: PIR8 real :: DCOSB integer :: I integer :: J integer :: K integer :: L integer :: IERR integer :: M integer :: LTEST integer :: MK integer :: NGI integer :: NGJ integer :: MFLUX integer :: MSURF integer :: MORO integer :: LUNIT integer :: LUNIT2 integer :: MAXL integer :: MAXB integer :: MLEVEL integer :: LEVOUT integer :: LEVMIN integer :: LEVMAX integer :: MOMEGA integer :: MOMEGADIFF integer :: MGAUSS integer :: MSMOOTH integer :: MNAUF integer :: META integer :: METADIFF integer :: MDPDETA integer :: METAPAR real :: RLO0 real :: RLO1 real :: RLA0 real :: RLA1 character(len=300) :: MLEVELIST integer :: MAUF integer :: MANF integer :: IFAX (10) integer :: IGRIB (1) integer :: iret integer :: ogrib character(len=80) :: FILENAME","tags":"","loc":"program/calc_etadot.html","title":"calc_etadot – Flex_extract: Calculation of etadot"}]} \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/tipuesearch_set.js b/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/tipuesearch_set.js new file mode 100644 index 0000000000000000000000000000000000000000..de17a4cd0a936c787a20cd781856e7788b11fc60 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/media/tipuesearch/tipuesearch_set.js @@ -0,0 +1,23 @@ + +/* +Tipue Search 4.0 +Copyright (c) 2014 Tipue +Tipue Search is released under the MIT License +http://www.tipue.com/search +*/ + + +var tipuesearch_stop_words = ["and", "be", "by", "do", "for", "he", "how", "if", "is", "it", "my", "not", "of", "or", "the", "to", "up", "what", "when", "use", "who", "she", "my", "his", "her"]; + +var tipuesearch_replace = {"words": [ + {"word": "tipua", "replace_with": "tipue"}, + {"word": "javscript", "replace_with": "javascript"} +]}; + +var tipuesearch_stem = {"words": [ + {"word": "e-mail", "stem": "email"}, + {"word": "javascript", "stem": "script"}, + {"word": "procedure", "stem": "subroutine"}, + {"word": "procedure", "stem": "function"} +]}; + diff --git a/Documentation/html/Documentation/Api/Fortran/module/ftrafo.html b/Documentation/html/Documentation/Api/Fortran/module/ftrafo.html new file mode 100644 index 0000000000000000000000000000000000000000..dd89411682c28b93b4ee5897b21d65e4e6cec290 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/module/ftrafo.html @@ -0,0 +1,1868 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>FTRAFO – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>FTRAFO + <small>Module</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title="37.5% of total for modules and submodules.">359 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/ftrafo.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/ftrafo.f90.html'>ftrafo.f90</a></li> + + + <li class="active">FTRAFO</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#subs-0">Subroutines</a></h3></div> + <div class="list-group"> + <div id="subs-0" class="panel-collapse collapse"> + + <a class="list-group-item" href="../module/ftrafo.html#proc-vdtouv">VDTOUV</a> + + <a class="list-group-item" href="../module/ftrafo.html#proc-vduvsub">VDUVSUB</a> + + <a class="list-group-item" href="../module/ftrafo.html#proc-phgrad">PHGRAD</a> + + <a class="list-group-item" href="../module/ftrafo.html#proc-phgracut">PHGRACUT</a> + + <a class="list-group-item" href="../module/ftrafo.html#proc-contgl">CONTGL</a> + + <a class="list-group-item" href="../module/ftrafo.html#proc-omega">OMEGA</a> + + </div> + </div> +</div> + + + + + + + + + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <p>Implementation of the spectral transformation using reduced the Gaussian grid</p> + <br> + + + + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Used by</h3> + </div> + <ul class="list-group"> + + + <li class="list-group-item"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: module~~ftrafo~~UsedByGraph Pages: 1 --> +<svg id="moduleftrafoUsedByGraph" width="166pt" height="32pt" + viewBox="0.00 0.00 166.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="module~~ftrafo~~UsedByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>module~~ftrafo~~UsedByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 162,-28 162,4 -4,4"/> +<!-- module~ftrafo --> +<g id="module~~ftrafo~~UsedByGraph_node1" class="node"><title>module~ftrafo</title> +<polygon fill="none" stroke="black" points="55,-24 0,-24 0,-0 55,-0 55,-24"/> +<text text-anchor="middle" x="27.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">FTRAFO</text> +</g> +<!-- program~calc_etadot --> +<g id="module~~ftrafo~~UsedByGraph_node2" class="node"><title>program~calc_etadot</title> +<g id="a_module~~ftrafo~~UsedByGraph_node2"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="158,-24 91,-24 91,-0 158,-0 158,-24"/> +<text text-anchor="middle" x="124.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->module~ftrafo --> +<g id="module~~ftrafo~~UsedByGraph_edge1" class="edge"><title>program~calc_etadot->module~ftrafo</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M90.8064,-12C82.6549,-12 73.8571,-12 65.5136,-12"/> +<polygon fill="#000000" stroke="#000000" points="65.271,-8.5001 55.271,-12 65.271,-15.5001 65.271,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="490pt" height="32pt" + viewBox="0.00 0.00 489.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 485.5,-28 485.5,4 -4,4"/> +<!-- Module --> +<g id="node1" class="node"><title>Module</title> +<polygon fill="#337ab7" stroke="#337ab7" points="54,-24 0,-24 0,-0 54,-0 54,-24"/> +<text text-anchor="middle" x="27" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Module</text> +</g> +<!-- Submodule --> +<g id="node2" class="node"><title>Submodule</title> +<polygon fill="#5bc0de" stroke="#5bc0de" points="139.5,-24 72.5,-24 72.5,-0 139.5,-0 139.5,-24"/> +<text text-anchor="middle" x="106" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Submodule</text> +</g> +<!-- Subroutine --> +<g id="node3" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="222,-24 158,-24 158,-0 222,-0 222,-24"/> +<text text-anchor="middle" x="190" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node4" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="294,-24 240,-24 240,-0 294,-0 294,-24"/> +<text text-anchor="middle" x="267" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="366,-24 312,-24 312,-0 366,-0 366,-24"/> +<text text-anchor="middle" x="339" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="481.5,-24 384.5,-24 384.5,-0 481.5,-0 481.5,-24"/> +<text text-anchor="middle" x="433" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a submodule to the (sub)module which it is + descended from. Dashed arrows point from a module or program unit to + modules which it uses. + </p> + </div></div></div></div> + </li> + + </ul> + </div> + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#subs-1">Subroutines</a></h3></div> + <div class="list-group"> + <div id="subs-1" class="panel-collapse collapse"> + + <a class="list-group-item" href="../module/ftrafo.html#proc-vdtouv">VDTOUV</a> + + <a class="list-group-item" href="../module/ftrafo.html#proc-vduvsub">VDUVSUB</a> + + <a class="list-group-item" href="../module/ftrafo.html#proc-phgrad">PHGRAD</a> + + <a class="list-group-item" href="../module/ftrafo.html#proc-phgracut">PHGRACUT</a> + + <a class="list-group-item" href="../module/ftrafo.html#proc-contgl">CONTGL</a> + + <a class="list-group-item" href="../module/ftrafo.html#proc-omega">OMEGA</a> + + </div> + </div> +</div> + + + + + + + + + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + <section> + <h2>Subroutines</h2> + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-vdtouv"></span><h3> +public subroutine <a href='../proc/vdtouv.html'>VDTOUV</a>(XMN, XLAM, XPHI, GWSAVE, IFAX, P, MLAT, MNAUF, NI, NJ, NK) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>Berechnung der scale winds aus Vorticity und Divergenz + uebergibt man in XMN die Divergenz, so wird der divergente Anteil des + Windes (XPHI=Ud,XPHI=Vd) zurueckgegeben, uebergibt man die Vorticity, so + erhaelt man den rotationellen Wind (XLAM=Vrot,XPHI=-Urot). + Summiert man beide, erhaelt man den gesamten Scale wind</p> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XLAM</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XPHI</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>GWSAVE</strong>(8*NJ+15,NJ/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10,NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>P</strong>(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NI</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NJ</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NK</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-vduvsub"></span><h3> +public subroutine <a href='../proc/vduvsub.html'>VDUVSUB</a>(J, XMN, XLAM, XPHI, GWSAVE, IFAX, P, GGIND, MLAT, MNAUF, NI, NJ, NK) + + + +</h3></div> + <div class="panel-body"> + + + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>J</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XLAM</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XPHI</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>GWSAVE</strong>(8*NJ+15,NJ/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10,NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>P</strong>(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>GGIND</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NI</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NJ</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NK</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-phgrad"></span><h3> +public subroutine <a href='../proc/phgrad.html'>PHGRAD</a>(XMN, XLAM, XPHI, GWSAVE, IFAX, P, H, MLAT, MNAUF, NI, NJ, NK) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>Berechnung des Gradienten eines Skalars aus dem Feld des + Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der + Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter.</p> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XLAM</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XPHI</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>GWSAVE</strong>(8*NJ+15,NJ/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10,NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>P</strong>(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>H</strong>(0:(MNAUF+2)*(MNAUF+3)/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NI</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NJ</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NK</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-phgracut"></span><h3> +public subroutine <a href='../proc/phgracut.html'>PHGRACUT</a>(XMN, XLAM, XPHI, GWSAVE, IFAX, P, H, MAUF, MNAUF, NI, NJ, MANF, NK) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>Berechnung des Gradienten eines Skalars aus dem Feld des + Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der + Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter.</p> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XLAM</strong>(NI,NJ,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XPHI</strong>(NI,NJ,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>GWSAVE</strong>(4*MAUF+15)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>P</strong>(0:(MNAUF+3)*(MNAUF+4)/2,NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>H</strong>(0:(MNAUF+2)*(MNAUF+3)/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NI</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NJ</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MANF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NK</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-contgl"></span><h3> +public subroutine <a href='../proc/contgl.html'>CONTGL</a>(PS, DPSDL, DPSDM, DIV, U, V, BREITE, ETA, MLAT, A, B, NI, NJ, NK) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>Berechnung der Divergenz aus dem Windfeld (U,V) + im Phasenraum. Zurueckgegeben werden die Felder der + Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter.</p> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>PS</strong>(NI)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>DPSDL</strong>(NI)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>DPSDM</strong>(NI)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>DIV</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>U</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>V</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>BREITE</strong>(NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>ETA</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>A</strong>(NK+1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>B</strong>(NK+1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NI</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NJ</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NK</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-omega"></span><h3> +public subroutine <a href='../proc/omega.html'>OMEGA</a>(PS, DPSDL, DPSDM, DIV, U, V, BREITE, E, MLAT, A, B, NGI, NGJ, MKK) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>calculates $\omega$ in the hybrid ($\eta$-) coordinate system</p> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>PS</strong>(NGI)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>DPSDL</strong>(NGI)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>DPSDM</strong>(NGI)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>DIV</strong>(NGI,MKK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>U</strong>(NGI,MKK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>V</strong>(NGI,MKK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>BREITE</strong>(NGJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>E</strong>(NGI,MKK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(NGJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>A</strong>(MKK+1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>B</strong>(MKK+1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NGI</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NGJ</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MKK</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + </section> + <br> + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/module/grtoph.html b/Documentation/html/Documentation/Api/Fortran/module/grtoph.html new file mode 100644 index 0000000000000000000000000000000000000000..422bed2c7abd63536dc81c01ff8a1adc99f92edb --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/module/grtoph.html @@ -0,0 +1,1271 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>GRTOPH – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>GRTOPH + <small>Module</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title="10.9% of total for modules and submodules.">104 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/grphreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/grphreal.f90.html'>grphreal.f90</a></li> + + + <li class="active">GRTOPH</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#subs-0">Subroutines</a></h3></div> + <div class="list-group"> + <div id="subs-0" class="panel-collapse collapse"> + + <a class="list-group-item" href="../module/grtoph.html#proc-grph213">GRPH213</a> + + <a class="list-group-item" href="../module/grtoph.html#proc-grphsub">GRPHSUB</a> + + <a class="list-group-item" href="../module/grtoph.html#proc-lgtr213">LGTR213</a> + + <a class="list-group-item" href="../module/grtoph.html#proc-rfouftr">RFOUFTR</a> + + </div> + </div> +</div> + + + + + + + + + + +</div> + + </div> + + <div class="col-md-9" id='text'> + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Uses</h3> + </div> + <ul class="list-group"> + + <li class="list-group-item"> + <ul class="list-inline"> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + </ul> + </li> + + + + <li class="list-group-item"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: module~~grtoph~~UsesGraph Pages: 1 --> +<svg id="modulegrtophUsesGraph" width="160pt" height="32pt" + viewBox="0.00 0.00 160.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="module~~grtoph~~UsesGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>module~~grtoph~~UsesGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 156,-28 156,4 -4,4"/> +<!-- module~grtoph --> +<g id="module~~grtoph~~UsesGraph_node1" class="node"><title>module~grtoph</title> +<polygon fill="none" stroke="black" points="152,-24 94,-24 94,-0 152,-0 152,-24"/> +<text text-anchor="middle" x="123" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">GRTOPH</text> +</g> +<!-- module~phtogr --> +<g id="module~~grtoph~~UsesGraph_node2" class="node"><title>module~phtogr</title> +<g id="a_module~~grtoph~~UsesGraph_node2"><a xlink:href=".././module/phtogr.html" xlink:title="PHTOGR"> +<polygon fill="#337ab7" stroke="#337ab7" points="58,-24 0,-24 0,-0 58,-0 58,-24"/> +<text text-anchor="middle" x="29" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHTOGR</text> +</a> +</g> +</g> +<!-- module~grtoph->module~phtogr --> +<g id="module~~grtoph~~UsesGraph_edge1" class="edge"><title>module~grtoph->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M93.8971,-12C85.8575,-12 76.9539,-12 68.4096,-12"/> +<polygon fill="#000000" stroke="#000000" points="68.2479,-8.5001 58.2479,-12 68.2478,-15.5001 68.2479,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="490pt" height="32pt" + viewBox="0.00 0.00 489.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 485.5,-28 485.5,4 -4,4"/> +<!-- Module --> +<g id="node1" class="node"><title>Module</title> +<polygon fill="#337ab7" stroke="#337ab7" points="54,-24 0,-24 0,-0 54,-0 54,-24"/> +<text text-anchor="middle" x="27" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Module</text> +</g> +<!-- Submodule --> +<g id="node2" class="node"><title>Submodule</title> +<polygon fill="#5bc0de" stroke="#5bc0de" points="139.5,-24 72.5,-24 72.5,-0 139.5,-0 139.5,-24"/> +<text text-anchor="middle" x="106" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Submodule</text> +</g> +<!-- Subroutine --> +<g id="node3" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="222,-24 158,-24 158,-0 222,-0 222,-24"/> +<text text-anchor="middle" x="190" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node4" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="294,-24 240,-24 240,-0 294,-0 294,-24"/> +<text text-anchor="middle" x="267" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="366,-24 312,-24 312,-0 366,-0 366,-24"/> +<text text-anchor="middle" x="339" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="481.5,-24 384.5,-24 384.5,-0 481.5,-0 481.5,-24"/> +<text text-anchor="middle" x="433" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a submodule to the (sub)module which it is + descended from. Dashed arrows point from a module or program unit to + modules which it uses. + </p> + </div></div></div></div> + </li> + + </ul> + </div> + + + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Used by</h3> + </div> + <ul class="list-group"> + + + <li class="list-group-item"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: module~~grtoph~~UsedByGraph Pages: 1 --> +<svg id="modulegrtophUsedByGraph" width="169pt" height="32pt" + viewBox="0.00 0.00 169.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="module~~grtoph~~UsedByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>module~~grtoph~~UsedByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 165,-28 165,4 -4,4"/> +<!-- module~grtoph --> +<g id="module~~grtoph~~UsedByGraph_node1" class="node"><title>module~grtoph</title> +<polygon fill="none" stroke="black" points="58,-24 0,-24 0,-0 58,-0 58,-24"/> +<text text-anchor="middle" x="29" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">GRTOPH</text> +</g> +<!-- program~calc_etadot --> +<g id="module~~grtoph~~UsedByGraph_node2" class="node"><title>program~calc_etadot</title> +<g id="a_module~~grtoph~~UsedByGraph_node2"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="161,-24 94,-24 94,-0 161,-0 161,-24"/> +<text text-anchor="middle" x="127.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->module~grtoph --> +<g id="module~~grtoph~~UsedByGraph_edge1" class="edge"><title>program~calc_etadot->module~grtoph</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M93.8295,-12C85.5884,-12 76.6681,-12 68.1825,-12"/> +<polygon fill="#000000" stroke="#000000" points="68.1226,-8.5001 58.1225,-12 68.1225,-15.5001 68.1226,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="490pt" height="32pt" + viewBox="0.00 0.00 489.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 485.5,-28 485.5,4 -4,4"/> +<!-- Module --> +<g id="node1" class="node"><title>Module</title> +<polygon fill="#337ab7" stroke="#337ab7" points="54,-24 0,-24 0,-0 54,-0 54,-24"/> +<text text-anchor="middle" x="27" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Module</text> +</g> +<!-- Submodule --> +<g id="node2" class="node"><title>Submodule</title> +<polygon fill="#5bc0de" stroke="#5bc0de" points="139.5,-24 72.5,-24 72.5,-0 139.5,-0 139.5,-24"/> +<text text-anchor="middle" x="106" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Submodule</text> +</g> +<!-- Subroutine --> +<g id="node3" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="222,-24 158,-24 158,-0 222,-0 222,-24"/> +<text text-anchor="middle" x="190" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node4" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="294,-24 240,-24 240,-0 294,-0 294,-24"/> +<text text-anchor="middle" x="267" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="366,-24 312,-24 312,-0 366,-0 366,-24"/> +<text text-anchor="middle" x="339" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="481.5,-24 384.5,-24 384.5,-0 481.5,-0 481.5,-24"/> +<text text-anchor="middle" x="433" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a submodule to the (sub)module which it is + descended from. Dashed arrows point from a module or program unit to + modules which it uses. + </p> + </div></div></div></div> + </li> + + </ul> + </div> + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#subs-1">Subroutines</a></h3></div> + <div class="list-group"> + <div id="subs-1" class="panel-collapse collapse"> + + <a class="list-group-item" href="../module/grtoph.html#proc-grph213">GRPH213</a> + + <a class="list-group-item" href="../module/grtoph.html#proc-grphsub">GRPHSUB</a> + + <a class="list-group-item" href="../module/grtoph.html#proc-lgtr213">LGTR213</a> + + <a class="list-group-item" href="../module/grtoph.html#proc-rfouftr">RFOUFTR</a> + + </div> + </div> +</div> + + + + + + + + + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + <section> + <h2>Subroutines</h2> + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-grph213"></span><h3> +public subroutine <a href='../proc/grph213.html'>GRPH213</a>(CXMN, FELD, WSAVE, IFAX, Z, W, MLAT, MNAUF, MAXL, MAXB, MLEVEL) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>WRONG>>> DIE ROUTINE F]HRT EINE TRANSFORMATION EINER + FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN + RAUM AUF KUGELKOORDINATEN DURCH</p> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>WSAVE</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10,MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>W</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-grphsub"></span><h3> +public subroutine <a href='../proc/grphsub.html'>GRPHSUB</a>(L, IND, CXMN, FELD, WSAVE, IFAX, Z, W, MLAT, MNAUF, MAXL, MAXB, MLEVEL) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>DIE ROUTINE F]HRT EINE TRANSFORMATION EINER + FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN + RAUM AUF KUGELKOORDINATEN DURCH</p> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>L</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IND</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>WSAVE</strong>(8*MAXB+15,MAXB/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10,MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>W</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-lgtr213"></span><h3> +public subroutine <a href='../proc/lgtr213.html'>LGTR213</a>(CXMN, CXM, Z, W, MLAT, MNAUF, MAXB) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<a href="../proc/lgtr213.html" class="pull-right"><emph>Read more…</emph></a> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXM</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real(kind=8)</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real(kind=8)</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>W</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-rfouftr"></span><h3> +public subroutine <a href='../proc/rfouftr.html'>RFOUFTR</a>(CXM, TRIGS, IFAX, MNAUF, MAXL, ISIGN) + + + +</h3></div> + <div class="panel-body"> + + + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXM</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>TRIGS</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>ISIGN</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + </section> + <br> + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/module/phtogr.html b/Documentation/html/Documentation/Api/Fortran/module/phtogr.html new file mode 100644 index 0000000000000000000000000000000000000000..4c9319307c781e70eecfb38b29a53e695b46793d --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/module/phtogr.html @@ -0,0 +1,2307 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>PHTOGR – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>PHTOGR + <small>Module</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title="34.8% of total for modules and submodules.">333 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/phgrreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/phgrreal.f90.html'>phgrreal.f90</a></li> + + + <li class="active">PHTOGR</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#vars-0">Variables</a></h3></div> + <div id="vars-0" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../module/phtogr.html#variable-maxauf">MAXAUF</a> + + </div> + </div> +</div> + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#subs-0">Subroutines</a></h3></div> + <div class="list-group"> + <div id="subs-0" class="panel-collapse collapse"> + + <a class="list-group-item" href="../module/phtogr.html#proc-phgr213">PHGR213</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-phsym">PHSYM</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-phgcut">PHGCUT</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-phsymcut">PHSYMCUT</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-phgpns">PHGPNS</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-legtr">LEGTR</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-rfourtr">RFOURTR</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-gauleg">GAULEG</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-plgnfa">PLGNFA</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-dplgnd">DPLGND</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-spfilter">SPFILTER</a> + + </div> + </div> +</div> + + + + + + + + + + +</div> + + </div> + + <div class="col-md-9" id='text'> + + <br> + + + + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Used by</h3> + </div> + <ul class="list-group"> + + + <li class="list-group-item"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: module~~phtogr~~UsedByGraph Pages: 1 --> +<svg id="modulephtogrUsedByGraph" width="276pt" height="238pt" + viewBox="0.00 0.00 276.00 238.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="module~~phtogr~~UsedByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 234)"> +<title>module~~phtogr~~UsedByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-234 272,-234 272,4 -4,4"/> +<!-- module~phtogr --> +<g id="module~~phtogr~~UsedByGraph_node1" class="node"><title>module~phtogr</title> +<polygon fill="none" stroke="black" points="58,-129 0,-129 0,-105 58,-105 58,-129"/> +<text text-anchor="middle" x="29" y="-114.6" font-family="Helvetica,sans-Serif" font-size="10.50">PHTOGR</text> +</g> +<!-- proc~vduvsub --> +<g id="module~~phtogr~~UsedByGraph_node2" class="node"><title>proc~vduvsub</title> +<g id="a_module~~phtogr~~UsedByGraph_node2"><a xlink:href=".././proc/vduvsub.html" xlink:title="VDUVSUB"> +<polygon fill="#d9534f" stroke="#d9534f" points="160.5,-230 98.5,-230 98.5,-206 160.5,-206 160.5,-230"/> +<text text-anchor="middle" x="129.5" y="-215.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">VDUVSUB</text> +</a> +</g> +</g> +<!-- proc~vduvsub->module~phtogr --> +<g id="module~~phtogr~~UsedByGraph_edge1" class="edge"><title>proc~vduvsub->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M110.706,-205.747C105.149,-201.621 99.1339,-196.832 94,-192 75.8052,-174.876 57.5519,-152.896 45.2222,-137.165"/> +<polygon fill="#000000" stroke="#000000" points="47.9041,-134.912 39.0199,-129.139 42.3653,-139.192 47.9041,-134.912"/> +</g> +<!-- program~calc_etadot --> +<g id="module~~phtogr~~UsedByGraph_node3" class="node"><title>program~calc_etadot</title> +<g id="a_module~~phtogr~~UsedByGraph_node3"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="268,-170 201,-170 201,-146 268,-146 268,-170"/> +<text text-anchor="middle" x="234.5" y="-155.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->module~phtogr --> +<g id="module~~phtogr~~UsedByGraph_edge2" class="edge"><title>program~calc_etadot->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M200.885,-163.544C172.118,-167.196 129.388,-169.575 94,-159 78.4251,-154.346 63.1234,-144.551 51.3891,-135.591"/> +<polygon fill="#000000" stroke="#000000" points="53.518,-132.812 43.5224,-129.299 49.1458,-138.279 53.518,-132.812"/> +</g> +<!-- module~grtoph --> +<g id="module~~phtogr~~UsedByGraph_node5" class="node"><title>module~grtoph</title> +<g id="a_module~~phtogr~~UsedByGraph_node5"><a xlink:href=".././module/grtoph.html" xlink:title="GRTOPH"> +<polygon fill="#337ab7" stroke="#337ab7" points="158.5,-150 100.5,-150 100.5,-126 158.5,-126 158.5,-150"/> +<text text-anchor="middle" x="129.5" y="-135.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GRTOPH</text> +</a> +</g> +</g> +<!-- program~calc_etadot->module~grtoph --> +<g id="module~~phtogr~~UsedByGraph_edge7" class="edge"><title>program~calc_etadot->module~grtoph</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M200.91,-151.672C190.638,-149.677 179.199,-147.456 168.58,-145.394"/> +<polygon fill="#000000" stroke="#000000" points="169.197,-141.949 158.713,-143.478 167.863,-148.82 169.197,-141.949"/> +</g> +<!-- proc~phgrad --> +<g id="module~~phtogr~~UsedByGraph_node4" class="node"><title>proc~phgrad</title> +<g id="a_module~~phtogr~~UsedByGraph_node4"><a xlink:href=".././proc/phgrad.html" xlink:title="PHGRAD"> +<polygon fill="#d9534f" stroke="#d9534f" points="158,-108 101,-108 101,-84 158,-84 158,-108"/> +<text text-anchor="middle" x="129.5" y="-93.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGRAD</text> +</a> +</g> +</g> +<!-- proc~phgrad->module~phtogr --> +<g id="module~~phtogr~~UsedByGraph_edge3" class="edge"><title>proc~phgrad->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M100.8,-101.906C90.7098,-104.057 79.1161,-106.529 68.2709,-108.841"/> +<polygon fill="#000000" stroke="#000000" points="67.226,-105.485 58.1757,-110.993 68.6857,-112.331 67.226,-105.485"/> +</g> +<!-- module~grtoph->module~phtogr --> +<g id="module~~phtogr~~UsedByGraph_edge5" class="edge"><title>module~grtoph->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M100.274,-131.982C90.2791,-129.851 78.8623,-127.417 68.1785,-125.14"/> +<polygon fill="#000000" stroke="#000000" points="68.7403,-121.681 58.2303,-123.019 67.2807,-128.527 68.7403,-121.681"/> +</g> +<!-- proc~vdtouv --> +<g id="module~~phtogr~~UsedByGraph_node6" class="node"><title>proc~vdtouv</title> +<g id="a_module~~phtogr~~UsedByGraph_node6"><a xlink:href=".././proc/vdtouv.html" xlink:title="VDTOUV"> +<polygon fill="#d9534f" stroke="#d9534f" points="157.5,-66 101.5,-66 101.5,-42 157.5,-42 157.5,-66"/> +<text text-anchor="middle" x="129.5" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">VDTOUV</text> +</a> +</g> +</g> +<!-- proc~vdtouv->module~phtogr --> +<g id="module~~phtogr~~UsedByGraph_edge4" class="edge"><title>proc~vdtouv->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M108.362,-66.1004C103.632,-68.9861 98.6229,-72.0773 94,-75 81.6793,-82.7894 68.1682,-91.6137 56.7482,-99.1563"/> +<polygon fill="#000000" stroke="#000000" points="54.5035,-96.445 48.1007,-104.886 58.37,-102.28 54.5035,-96.445"/> +</g> +<!-- proc~phgracut --> +<g id="module~~phtogr~~UsedByGraph_node7" class="node"><title>proc~phgracut</title> +<g id="a_module~~phtogr~~UsedByGraph_node7"><a xlink:href=".././proc/phgracut.html" xlink:title="PHGRACUT"> +<polygon fill="#d9534f" stroke="#d9534f" points="165,-24 94,-24 94,-0 165,-0 165,-24"/> +<text text-anchor="middle" x="129.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGRACUT</text> +</a> +</g> +</g> +<!-- proc~phgracut->module~phtogr --> +<g id="module~~phtogr~~UsedByGraph_edge6" class="edge"><title>proc~phgracut->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M105.741,-24.1789C101.638,-26.8312 97.5427,-29.8087 94,-33 73.2359,-51.7042 54.5087,-77.9153 42.7542,-96.0624"/> +<polygon fill="#000000" stroke="#000000" points="39.6566,-94.4123 37.2692,-104.735 45.5726,-98.1541 39.6566,-94.4123"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="490pt" height="32pt" + viewBox="0.00 0.00 489.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 485.5,-28 485.5,4 -4,4"/> +<!-- Module --> +<g id="node1" class="node"><title>Module</title> +<polygon fill="#337ab7" stroke="#337ab7" points="54,-24 0,-24 0,-0 54,-0 54,-24"/> +<text text-anchor="middle" x="27" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Module</text> +</g> +<!-- Submodule --> +<g id="node2" class="node"><title>Submodule</title> +<polygon fill="#5bc0de" stroke="#5bc0de" points="139.5,-24 72.5,-24 72.5,-0 139.5,-0 139.5,-24"/> +<text text-anchor="middle" x="106" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Submodule</text> +</g> +<!-- Subroutine --> +<g id="node3" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="222,-24 158,-24 158,-0 222,-0 222,-24"/> +<text text-anchor="middle" x="190" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node4" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="294,-24 240,-24 240,-0 294,-0 294,-24"/> +<text text-anchor="middle" x="267" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="366,-24 312,-24 312,-0 366,-0 366,-24"/> +<text text-anchor="middle" x="339" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="481.5,-24 384.5,-24 384.5,-0 481.5,-0 481.5,-24"/> +<text text-anchor="middle" x="433" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a submodule to the (sub)module which it is + descended from. Dashed arrows point from a module or program unit to + modules which it uses. + </p> + </div></div></div></div> + </li> + + </ul> + </div> + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#vars-1">Variables</a></h3></div> + <div id="vars-1" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../module/phtogr.html#variable-maxauf">MAXAUF</a> + + </div> + </div> +</div> + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#subs-1">Subroutines</a></h3></div> + <div class="list-group"> + <div id="subs-1" class="panel-collapse collapse"> + + <a class="list-group-item" href="../module/phtogr.html#proc-phgr213">PHGR213</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-phsym">PHSYM</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-phgcut">PHGCUT</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-phsymcut">PHSYMCUT</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-phgpns">PHGPNS</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-legtr">LEGTR</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-rfourtr">RFOURTR</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-gauleg">GAULEG</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-plgnfa">PLGNFA</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-dplgnd">DPLGND</a> + + <a class="list-group-item" href="../module/phtogr.html#proc-spfilter">SPFILTER</a> + + </div> + </div> +</div> + + + + + + + + + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + <section> + <h2>Variables</h2> + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th><th>Visibility</th> + +<th>Attributes</th><th></th><th>Name</th><th></th><th>Initial</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxauf"></span>integer,</td> + + <td>public,</td> + <td>parameter</td><td>::</td> + <td><strong>MAXAUF</strong></td><td> =</td><td>36000</td><td></td> + +</tr> + +</tbody> +</table> + + </section> + <br> + + + + + + + + + + + + + + <section> + <h2>Subroutines</h2> + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-phgr213"></span><h3> +public subroutine <a href='../proc/phgr213.html'>PHGR213</a>(CXMN, FELD, WSAVE, IFAX, Z, MLAT, MNAUF, MAXL, MAXB, MLEVEL) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>DIE ROUTINE F]HRT EINE TRANSFORMATION EINER + FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN + RAUM AUF DAS REDUZIERTE GAUSS'SCHE GITTER DURCH</p> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>WSAVE</strong>(8*MAXB+15,MAXB/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10,MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(MAXB/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-phsym"></span><h3> +public subroutine <a href='../proc/phsym.html'>PHSYM</a>(K, IND, CXMN, FELD, Z, WSAVE, IFAX, MLAT, MNAUF, MAXL, MAXB, MLEVEL) + + + +</h3></div> + <div class="panel-body"> + + + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>K</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IND</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>WSAVE</strong>(8*MAXB+15,MAXB/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10,MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(MAXB/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-phgcut"></span><h3> +public subroutine <a href='../proc/phgcut.html'>PHGCUT</a>(CXMN, FELD, WSAVE, IFAX, Z, MNAUF, MMAX, MAUF, MANF, MAXL, MAXB, MLEVEL) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>DIE ROUTINE FUEHRT EINE TRANSFORMATION EINER + FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN + RAUM AUF KUGELKOORDINATEN DURCH. Es kann ein Teilausschnitt + Der Erde angegeben werden. Diese Routine ist langsamer als phgrph</p><a href="../proc/phgcut.html" class="pull-right"><emph>Read more…</emph></a> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MAXB,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>WSAVE</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(0:((MMAX+3)*(MMAX+4))/2,MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MMAX</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MANF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-phsymcut"></span><h3> +public subroutine <a href='../proc/phsymcut.html'>PHSYMCUT</a>(J, CXMN, FELD, Z, WSAVE, IFAX, MAUF, MNAUF, MAXL, MAXB, MLEVEL, MANF) + + + +</h3></div> + <div class="panel-body"> + + + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>J</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MAXB,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(0:((MNAUF+3)*(MNAUF+4))/2,MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>WSAVE</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MANF</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-phgpns"></span><h3> +public subroutine <a href='../proc/phgpns.html'>PHGPNS</a>(CXMN, FELD, Z, WSAVE, IFAX, J, MNAUF, MAUF, MANF, MAXL, MAXB, MLEVEL) + + + +</h3></div> + <div class="panel-body"> + + + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>real,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MAXB,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(0:((MNAUF+3)*(MNAUF+4))/2,MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>WSAVE</strong>(4*MAUF+15)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>J</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>MANF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-legtr"></span><h3> +public subroutine <a href='../proc/legtr.html'>LEGTR</a>(CXMN, CXM, Z, MNAUF, MAUF) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>DIESE ROUTINE BERECHNET DIE FOURIERKOEFFIZIENTEN CXM</p> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXM</strong>(0:MAXAUF-1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(0:((MNAUF+3)*(MNAUF+4))/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAUF</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-rfourtr"></span><h3> +public subroutine <a href='../proc/rfourtr.html'>RFOURTR</a>(CXM, TRIGS, IFAX, MNAUF, MAXL, ISIGN) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<a href="../proc/rfourtr.html" class="pull-right"><emph>Read more…</emph></a> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXM</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>TRIGS</strong>(2*MAXL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>ISIGN</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-gauleg"></span><h3> +public subroutine <a href='../proc/gauleg.html'>GAULEG</a>(X1, X2, X, W, N) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>BERECHNET DIE GAUSS+SCHEN BREITEN</p> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>X1</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>X2</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>X</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>W</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>N</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-plgnfa"></span><h3> +public subroutine <a href='../proc/plgnfa.html'>PLGNFA</a>(LL, X, Z) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>PLGNDN BERECHNET ALLE NORMIERTEN ASSOZIIERTEN + LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) + UND SCHREIBT SIE IN DAS FELD Z</p> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>LL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>X</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-dplgnd"></span><h3> +public subroutine <a href='../proc/dplgnd.html'>DPLGND</a>(MNAUF, Z, DZ) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>DPLGND BERECHNET DIE ABLEITUNG DER NORMIERTEN ASSOZIIERTEN + LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) + UND SCHREIBT SIE IN DAS FELD DZ</p> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>DZ</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-spfilter"></span><h3> +public subroutine <a href='../proc/spfilter.html'>SPFILTER</a>(FELDMN, MM, MMAX) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>Spectral Filter of Sardeshmukh and Hoskins (1984, MWR)</p> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELDMN</strong>(0:(MM+1)*(MM+2)-1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MM</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MMAX</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + </section> + <br> + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/module/rwgrib2.html b/Documentation/html/Documentation/Api/Fortran/module/rwgrib2.html new file mode 100644 index 0000000000000000000000000000000000000000..05f1b73712d50bc97d50ad29fd9b1722c11d2958 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/module/rwgrib2.html @@ -0,0 +1,927 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>RWGRIB2 – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>RWGRIB2 + <small>Module</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title="16.9% of total for modules and submodules.">162 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/rwgrib2.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/rwgrib2.f90.html'>rwgrib2.f90</a></li> + + + <li class="active">RWGRIB2</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#subs-0">Subroutines</a></h3></div> + <div class="list-group"> + <div id="subs-0" class="panel-collapse collapse"> + + <a class="list-group-item" href="../module/rwgrib2.html#proc-readlatlon">READLATLON</a> + + <a class="list-group-item" href="../module/rwgrib2.html#proc-writelatlon">WRITELATLON</a> + + <a class="list-group-item" href="../module/rwgrib2.html#proc-readspectral">READSPECTRAL</a> + + </div> + </div> +</div> + + + + + + + + + + +</div> + + </div> + + <div class="col-md-9" id='text'> + + <br> + + + + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Used by</h3> + </div> + <ul class="list-group"> + + + <li class="list-group-item"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: module~~rwgrib2~~UsedByGraph Pages: 1 --> +<svg id="modulerwgrib2UsedByGraph" width="172pt" height="32pt" + viewBox="0.00 0.00 172.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="module~~rwgrib2~~UsedByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>module~~rwgrib2~~UsedByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 168,-28 168,4 -4,4"/> +<!-- module~rwgrib2 --> +<g id="module~~rwgrib2~~UsedByGraph_node1" class="node"><title>module~rwgrib2</title> +<polygon fill="none" stroke="black" points="61,-24 -3.55271e-15,-24 -3.55271e-15,-0 61,-0 61,-24"/> +<text text-anchor="middle" x="30.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">RWGRIB2</text> +</g> +<!-- program~calc_etadot --> +<g id="module~~rwgrib2~~UsedByGraph_node2" class="node"><title>program~calc_etadot</title> +<g id="a_module~~rwgrib2~~UsedByGraph_node2"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="164,-24 97,-24 97,-0 164,-0 164,-24"/> +<text text-anchor="middle" x="130.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->module~rwgrib2 --> +<g id="module~~rwgrib2~~UsedByGraph_edge1" class="edge"><title>program~calc_etadot->module~rwgrib2</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M96.8674,-12C88.6337,-12 79.7034,-12 71.1657,-12"/> +<polygon fill="#000000" stroke="#000000" points="71.0195,-8.5001 61.0195,-12 71.0195,-15.5001 71.0195,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="490pt" height="32pt" + viewBox="0.00 0.00 489.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 485.5,-28 485.5,4 -4,4"/> +<!-- Module --> +<g id="node1" class="node"><title>Module</title> +<polygon fill="#337ab7" stroke="#337ab7" points="54,-24 0,-24 0,-0 54,-0 54,-24"/> +<text text-anchor="middle" x="27" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Module</text> +</g> +<!-- Submodule --> +<g id="node2" class="node"><title>Submodule</title> +<polygon fill="#5bc0de" stroke="#5bc0de" points="139.5,-24 72.5,-24 72.5,-0 139.5,-0 139.5,-24"/> +<text text-anchor="middle" x="106" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Submodule</text> +</g> +<!-- Subroutine --> +<g id="node3" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="222,-24 158,-24 158,-0 222,-0 222,-24"/> +<text text-anchor="middle" x="190" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node4" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="294,-24 240,-24 240,-0 294,-0 294,-24"/> +<text text-anchor="middle" x="267" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="366,-24 312,-24 312,-0 366,-0 366,-24"/> +<text text-anchor="middle" x="339" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="481.5,-24 384.5,-24 384.5,-0 481.5,-0 481.5,-24"/> +<text text-anchor="middle" x="433" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a submodule to the (sub)module which it is + descended from. Dashed arrows point from a module or program unit to + modules which it uses. + </p> + </div></div></div></div> + </li> + + </ul> + </div> + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#subs-1">Subroutines</a></h3></div> + <div class="list-group"> + <div id="subs-1" class="panel-collapse collapse"> + + <a class="list-group-item" href="../module/rwgrib2.html#proc-readlatlon">READLATLON</a> + + <a class="list-group-item" href="../module/rwgrib2.html#proc-writelatlon">WRITELATLON</a> + + <a class="list-group-item" href="../module/rwgrib2.html#proc-readspectral">READSPECTRAL</a> + + </div> + </div> +</div> + + + + + + + + + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + <section> + <h2>Subroutines</h2> + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-readlatlon"></span><h3> +public subroutine <a href='../proc/readlatlon.html'>READLATLON</a>(filename, feld, maxl, maxb, mlevel, mpar) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>Read a field from GRIB file on lat-lon grid</p><a href="../proc/readlatlon.html" class="pull-right"><emph>Read more…</emph></a> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>character(len=*)</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>filename</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real,</td> + <td></td> + <td></td> + + <td>dimension(maxl,maxb,mlevel)</td><td>::</td> + <td><strong>feld</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>maxl</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>maxb</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>mlevel</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>mpar</strong>(:)</td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-writelatlon"></span><h3> +public subroutine <a href='../proc/writelatlon.html'>WRITELATLON</a>(IUNIT, igrib, ogrib, FELD, MAXL, MAXB, MLEVEL, MLEVELIST, MSTRIDE, MPAR) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>write a field on lat-lon grid to GRIB file</p> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IUNIT</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>igrib</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>ogrib</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MAXB,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>character(len=*)</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVELIST</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MSTRIDE</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MPAR</strong>(MSTRIDE)</td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + + <div class="panel panel-default"> + <div class="panel-heading codesum"><span class="anchor" id="proc-readspectral"></span><h3> +public subroutine <a href='../proc/readspectral.html'>READSPECTRAL</a>(filename, CXMN, mnauf, mlevel, maxlev, mpar, A, B) + + + +</h3></div> + <div class="panel-body"> + + + + + + + + + +<p>read a GRIB file in spherical harmonics</p><a href="../proc/readspectral.html" class="pull-right"><emph>Read more…</emph></a> + + <h4>Arguments</h4> + + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" ></span>character(len=*)</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>filename</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>mnauf</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>mlevel</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>maxlev</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>mpar</strong>(:)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>A</strong>(MAXLEV+1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" ></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>B</strong>(MAXLEV+1)</td><td></td> + +</tr> + +</tbody> +</table> + + + + + + </div> + </div> + + + </section> + <br> + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/contgl.html b/Documentation/html/Documentation/Api/Fortran/proc/contgl.html new file mode 100644 index 0000000000000000000000000000000000000000..dfa27ee929863117bb90f71845be3d31d0931d5f --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/contgl.html @@ -0,0 +1,547 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>CONTGL – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>CONTGL + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 3.2% of total for procedures.">33 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/ftrafo.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/ftrafo.f90.html'>ftrafo.f90</a></li> + + <li><a href='../module/ftrafo.html'>FTRAFO</a></li> + + + <li class="active">CONTGL</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine CONTGL(PS, DPSDL, DPSDM, DIV, U, V, BREITE, ETA, MLAT, A, B, NI, NJ, NK) + + + +</h2> + + + + + + <p>Berechnung der Divergenz aus dem Windfeld (U,V) + im Phasenraum. Zurueckgegeben werden die Felder der + Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter.</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-ps"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>PS</strong>(NI)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-dpsdl"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>DPSDL</strong>(NI)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-dpsdm"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>DPSDM</strong>(NI)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-div"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>DIV</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-u"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>U</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-v"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>V</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-breite"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>BREITE</strong>(NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-eta"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>ETA</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlat%7E9"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-a%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>A</strong>(NK+1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-b%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>B</strong>(NK+1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ni%7E7"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NI</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-nj%7E7"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NJ</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-nk%7E7"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NK</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/dplgnd.html b/Documentation/html/Documentation/Api/Fortran/proc/dplgnd.html new file mode 100644 index 0000000000000000000000000000000000000000..180c6c6445c36c5eb935cd6bccf325308a292113 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/dplgnd.html @@ -0,0 +1,382 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>DPLGND – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>DPLGND + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 2.7% of total for procedures.">27 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/phgrreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/phgrreal.f90.html'>phgrreal.f90</a></li> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + + <li class="active">DPLGND</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine DPLGND(MNAUF, Z, DZ) + + + +</h2> + + + + + + <p>DPLGND BERECHNET DIE ABLEITUNG DER NORMIERTEN ASSOZIIERTEN + LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) + UND SCHREIBT SIE IN DAS FELD DZ</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E12"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-z%7E11"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-dz"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>DZ</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/gauleg.html b/Documentation/html/Documentation/Api/Fortran/proc/gauleg.html new file mode 100644 index 0000000000000000000000000000000000000000..583c077466fa3c3f9ed0550b2b1414a751304140 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/gauleg.html @@ -0,0 +1,593 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>GAULEG – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>GAULEG + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 2.8% of total for procedures.">28 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/phgrreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/phgrreal.f90.html'>phgrreal.f90</a></li> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + + <li class="active">GAULEG</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine GAULEG(X1, X2, X, W, N) + + + +</h2> + + + + + + <p>BERECHNET DIE GAUSS+SCHEN BREITEN</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-x1"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>X1</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-x2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>X2</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-x"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>X</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-w%7E4"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>W</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-n"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>N</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Calls</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~gauleg~~CallsGraph Pages: 1 --> +<svg id="procgaulegCallsGraph" width="154pt" height="32pt" + viewBox="0.00 0.00 154.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~gauleg~~CallsGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~gauleg~~CallsGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 150,-28 150,4 -4,4"/> +<!-- proc~gauleg --> +<g id="proc~~gauleg~~CallsGraph_node1" class="node"><title>proc~gauleg</title> +<polygon fill="none" stroke="black" points="56,-24 0,-24 0,-0 56,-0 56,-24"/> +<text text-anchor="middle" x="28" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">GAULEG</text> +</g> +<!-- dcos --> +<g id="proc~~gauleg~~CallsGraph_node2" class="node"><title>dcos</title> +<polygon fill="#777777" stroke="#777777" points="146,-24 92,-24 92,-0 146,-0 146,-24"/> +<text text-anchor="middle" x="119" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">dcos</text> +</g> +<!-- proc~gauleg->dcos --> +<g id="proc~~gauleg~~CallsGraph_edge1" class="edge"><title>proc~gauleg->dcos</title> +<path fill="none" stroke="#000000" d="M56.1865,-12C64.2547,-12 73.2224,-12 81.7684,-12"/> +<polygon fill="#000000" stroke="#000000" points="81.8947,-15.5001 91.8947,-12 81.8946,-8.5001 81.8947,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Called by</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~gauleg~~CalledByGraph Pages: 1 --> +<svg id="procgaulegCalledByGraph" width="167pt" height="32pt" + viewBox="0.00 0.00 167.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~gauleg~~CalledByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~gauleg~~CalledByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 163,-28 163,4 -4,4"/> +<!-- proc~gauleg --> +<g id="proc~~gauleg~~CalledByGraph_node1" class="node"><title>proc~gauleg</title> +<polygon fill="none" stroke="black" points="159,-24 103,-24 103,-0 159,-0 159,-24"/> +<text text-anchor="middle" x="131" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">GAULEG</text> +</g> +<!-- program~calc_etadot --> +<g id="proc~~gauleg~~CalledByGraph_node2" class="node"><title>program~calc_etadot</title> +<g id="a_proc~~gauleg~~CalledByGraph_node2"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~gauleg --> +<g id="proc~~gauleg~~CalledByGraph_edge1" class="edge"><title>program~calc_etadot->proc~gauleg</title> +<path fill="none" stroke="#000000" d="M67.0986,-12C75.3962,-12 84.3749,-12 92.8796,-12"/> +<polygon fill="#000000" stroke="#000000" points="92.9408,-15.5001 102.941,-12 92.9408,-8.5001 92.9408,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/grph213.html b/Documentation/html/Documentation/Api/Fortran/proc/grph213.html new file mode 100644 index 0000000000000000000000000000000000000000..4bb032528eb18e7ef9b167dad782cf368b6496b8 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/grph213.html @@ -0,0 +1,698 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>GRPH213 – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>GRPH213 + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 1.8% of total for procedures.">18 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/grphreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/grphreal.f90.html'>grphreal.f90</a></li> + + <li><a href='../module/grtoph.html'>GRTOPH</a></li> + + + <li class="active">GRPH213</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine GRPH213(CXMN, FELD, WSAVE, IFAX, Z, W, MLAT, MNAUF, MAXL, MAXB, MLEVEL) + + + +</h2> + + + + + + <p>WRONG>>> DIE ROUTINE F]HRT EINE TRANSFORMATION EINER + FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN + RAUM AUF KUGELKOORDINATEN DURCH</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-cxmn%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-feld%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-wsave"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>WSAVE</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ifax"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10,MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-z"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-w"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>W</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlat"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxl%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxb%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlevel%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Calls</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~grph213~~CallsGraph Pages: 1 --> +<svg id="procgrph213CallsGraph" width="169pt" height="74pt" + viewBox="0.00 0.00 169.00 74.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~grph213~~CallsGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 70)"> +<title>proc~~grph213~~CallsGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-70 165,-70 165,4 -4,4"/> +<!-- proc~grph213 --> +<g id="proc~~grph213~~CallsGraph_node1" class="node"><title>proc~grph213</title> +<polygon fill="none" stroke="black" points="61,-45 -3.55271e-15,-45 -3.55271e-15,-21 61,-21 61,-45"/> +<text text-anchor="middle" x="30.5" y="-30.6" font-family="Helvetica,sans-Serif" font-size="10.50">GRPH213</text> +</g> +<!-- ind --> +<g id="proc~~grph213~~CallsGraph_node2" class="node"><title>ind</title> +<polygon fill="#777777" stroke="#777777" points="156,-66 102,-66 102,-42 156,-42 156,-66"/> +<text text-anchor="middle" x="129" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">ind</text> +</g> +<!-- proc~grph213->ind --> +<g id="proc~~grph213~~CallsGraph_edge1" class="edge"><title>proc~grph213->ind</title> +<path fill="none" stroke="#000000" d="M61.2406,-39.472C70.9596,-41.5871 81.8596,-43.9591 91.989,-46.1634"/> +<polygon fill="#000000" stroke="#000000" points="91.2737,-49.5896 101.789,-48.2961 92.7622,-42.7497 91.2737,-49.5896"/> +</g> +<!-- proc~grphsub --> +<g id="proc~~grph213~~CallsGraph_node3" class="node"><title>proc~grphsub</title> +<g id="a_proc~~grph213~~CallsGraph_node3"><a xlink:href=".././proc/grphsub.html" xlink:title="GRPHSUB"> +<polygon fill="#d9534f" stroke="#d9534f" points="161,-24 97,-24 97,-0 161,-0 161,-24"/> +<text text-anchor="middle" x="129" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GRPHSUB</text> +</a> +</g> +</g> +<!-- proc~grph213->proc~grphsub --> +<g id="proc~~grph213~~CallsGraph_edge2" class="edge"><title>proc~grph213->proc~grphsub</title> +<path fill="none" stroke="#000000" d="M61.2406,-26.528C69.3605,-24.7609 78.3048,-22.8145 86.9353,-20.9364"/> +<polygon fill="#000000" stroke="#000000" points="87.8275,-24.3242 96.8545,-18.7778 86.3389,-17.4843 87.8275,-24.3242"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Called by</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~grph213~~CalledByGraph Pages: 1 --> +<svg id="procgrph213CalledByGraph" width="172pt" height="32pt" + viewBox="0.00 0.00 172.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~grph213~~CalledByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~grph213~~CalledByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 168,-28 168,4 -4,4"/> +<!-- proc~grph213 --> +<g id="proc~~grph213~~CalledByGraph_node1" class="node"><title>proc~grph213</title> +<polygon fill="none" stroke="black" points="164,-24 103,-24 103,-0 164,-0 164,-24"/> +<text text-anchor="middle" x="133.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">GRPH213</text> +</g> +<!-- program~calc_etadot --> +<g id="proc~~grph213~~CalledByGraph_node2" class="node"><title>program~calc_etadot</title> +<g id="a_proc~~grph213~~CalledByGraph_node2"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~grph213 --> +<g id="proc~~grph213~~CalledByGraph_edge1" class="edge"><title>program~calc_etadot->proc~grph213</title> +<path fill="none" stroke="#000000" d="M67.1326,-12C75.3663,-12 84.2966,-12 92.8343,-12"/> +<polygon fill="#000000" stroke="#000000" points="92.9805,-15.5001 102.98,-12 92.9805,-8.5001 92.9805,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/grphsub.html b/Documentation/html/Documentation/Api/Fortran/proc/grphsub.html new file mode 100644 index 0000000000000000000000000000000000000000..213ab93b5c26b095d67489afd24a6c9ea1d9546b --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/grphsub.html @@ -0,0 +1,639 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>GRPHSUB – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>GRPHSUB + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 2.8% of total for procedures.">28 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/grphreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/grphreal.f90.html'>grphreal.f90</a></li> + + <li><a href='../module/grtoph.html'>GRTOPH</a></li> + + + <li class="active">GRPHSUB</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine GRPHSUB(L, IND, CXMN, FELD, WSAVE, IFAX, Z, W, MLAT, MNAUF, MAXL, MAXB, MLEVEL) + + + +</h2> + + + + + + <p>DIE ROUTINE F]HRT EINE TRANSFORMATION EINER + FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN + RAUM AUF KUGELKOORDINATEN DURCH</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-l"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>L</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ind"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IND</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-cxmn%7E3"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-feld%7E3"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-wsave%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>WSAVE</strong>(8*MAXB+15,MAXB/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ifax%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10,MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-z%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-w%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>W</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlat%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxl%7E3"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxb%7E3"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlevel%7E3"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Called by</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~grphsub~~CalledByGraph Pages: 1 --> +<svg id="procgrphsubCalledByGraph" width="272pt" height="32pt" + viewBox="0.00 0.00 272.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~grphsub~~CalledByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~grphsub~~CalledByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 268,-28 268,4 -4,4"/> +<!-- proc~grphsub --> +<g id="proc~~grphsub~~CalledByGraph_node1" class="node"><title>proc~grphsub</title> +<polygon fill="none" stroke="black" points="264,-24 200,-24 200,-0 264,-0 264,-24"/> +<text text-anchor="middle" x="232" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">GRPHSUB</text> +</g> +<!-- proc~grph213 --> +<g id="proc~~grphsub~~CalledByGraph_node2" class="node"><title>proc~grph213</title> +<g id="a_proc~~grphsub~~CalledByGraph_node2"><a xlink:href=".././proc/grph213.html" xlink:title="GRPH213"> +<polygon fill="#d9534f" stroke="#d9534f" points="164,-24 103,-24 103,-0 164,-0 164,-24"/> +<text text-anchor="middle" x="133.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GRPH213</text> +</a> +</g> +</g> +<!-- proc~grph213->proc~grphsub --> +<g id="proc~~grphsub~~CalledByGraph_edge1" class="edge"><title>proc~grph213->proc~grphsub</title> +<path fill="none" stroke="#000000" d="M164.241,-12C172.272,-12 181.11,-12 189.654,-12"/> +<polygon fill="#000000" stroke="#000000" points="189.855,-15.5001 199.855,-12 189.854,-8.5001 189.855,-15.5001"/> +</g> +<!-- program~calc_etadot --> +<g id="proc~~grphsub~~CalledByGraph_node3" class="node"><title>program~calc_etadot</title> +<g id="a_proc~~grphsub~~CalledByGraph_node3"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~grph213 --> +<g id="proc~~grphsub~~CalledByGraph_edge2" class="edge"><title>program~calc_etadot->proc~grph213</title> +<path fill="none" stroke="#000000" d="M67.1326,-12C75.3663,-12 84.2966,-12 92.8343,-12"/> +<polygon fill="#000000" stroke="#000000" points="92.9805,-15.5001 102.98,-12 92.9805,-8.5001 92.9805,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/ia.html b/Documentation/html/Documentation/Api/Fortran/proc/ia.html new file mode 100644 index 0000000000000000000000000000000000000000..8f821e52f8e25319a680d4c907a2ab764db292be --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/ia.html @@ -0,0 +1,417 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>IA – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>IA + <small>Function</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 3.4% of total for procedures.">35 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/calc_etadot.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/calc_etadot.f90.html'>calc_etadot.f90</a></li> + + + <li class="active">IA</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +function IA(FIELD1, NI, NJ, NK, G) + + + +</h2> + + + + + + <p>Calculate something that is roughly log10( maxval(field1)/g ) [PS] </p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-field1"></span>real,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>FIELD1</strong>(NI,NJ,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ni"></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>NI</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-nj"></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>NJ</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-nk"></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>NK</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-g"></span>real,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>G</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + + + + <h3>Return Value <small><span class="anchor" id="variable-ia"></span>integer + </small></h3> + + + + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/legtr.html b/Documentation/html/Documentation/Api/Fortran/proc/legtr.html new file mode 100644 index 0000000000000000000000000000000000000000..a7d1189f5325c4275e897c433545893cdd4037c4 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/legtr.html @@ -0,0 +1,410 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>LEGTR – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>LEGTR + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 2.4% of total for procedures.">24 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/phgrreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/phgrreal.f90.html'>phgrreal.f90</a></li> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + + <li class="active">LEGTR</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine LEGTR(CXMN, CXM, Z, MNAUF, MAUF) + + + +</h2> + + + + + + <p>DIESE ROUTINE BERECHNET DIE FOURIERKOEFFIZIENTEN CXM</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-cxmn%7E10"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-cxm%7E3"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXM</strong>(0:MAXAUF-1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-z%7E9"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(0:((MNAUF+3)*(MNAUF+4))/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E10"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mauf%7E4"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAUF</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/lgtr213.html b/Documentation/html/Documentation/Api/Fortran/proc/lgtr213.html new file mode 100644 index 0000000000000000000000000000000000000000..94042aacb907beae07063939bee8f878a440b4d3 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/lgtr213.html @@ -0,0 +1,441 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>LGTR213 – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>LGTR213 + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 4.1% of total for procedures.">42 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/grphreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/grphreal.f90.html'>grphreal.f90</a></li> + + <li><a href='../module/grtoph.html'>GRTOPH</a></li> + + + <li class="active">LGTR213</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine LGTR213(CXMN, CXM, Z, W, MLAT, MNAUF, MAXB) + + + +</h2> + + + + + + <div class="codehilite"><pre><span></span> DIESE ROUTINE BERECHNET DIE KFFKs CXMN +</pre></div> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-cxmn%7E4"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-cxm"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXM</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-z%7E3"></span>real(kind=8)</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-w%7E3"></span>real(kind=8)</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>W</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlat%7E3"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E3"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxb%7E4"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/omega.html b/Documentation/html/Documentation/Api/Fortran/proc/omega.html new file mode 100644 index 0000000000000000000000000000000000000000..ac71f85f0a88850818723bf80809d21816a51e2b --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/omega.html @@ -0,0 +1,545 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>OMEGA – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>OMEGA + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 3.9% of total for procedures.">40 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/ftrafo.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/ftrafo.f90.html'>ftrafo.f90</a></li> + + <li><a href='../module/ftrafo.html'>FTRAFO</a></li> + + + <li class="active">OMEGA</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine OMEGA(PS, DPSDL, DPSDM, DIV, U, V, BREITE, E, MLAT, A, B, NGI, NGJ, MKK) + + + +</h2> + + + + + + <p>calculates $\omega$ in the hybrid ($\eta$-) coordinate system</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-ps%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>PS</strong>(NGI)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-dpsdl%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>DPSDL</strong>(NGI)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-dpsdm%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>DPSDM</strong>(NGI)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-div%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>DIV</strong>(NGI,MKK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-u%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>U</strong>(NGI,MKK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-v%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>V</strong>(NGI,MKK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-breite%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>BREITE</strong>(NGJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-e"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>E</strong>(NGI,MKK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlat%7E10"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(NGJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-a%7E3"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>A</strong>(MKK+1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-b%7E3"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>B</strong>(MKK+1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ngi"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NGI</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ngj"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NGJ</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mkk"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MKK</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/phgcut.html b/Documentation/html/Documentation/Api/Fortran/proc/phgcut.html new file mode 100644 index 0000000000000000000000000000000000000000..8d8510ef87f3b3889bdabe56319f5262e4b99c0e --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/phgcut.html @@ -0,0 +1,747 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>PHGCUT – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>PHGCUT + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 3.1% of total for procedures.">32 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/phgrreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/phgrreal.f90.html'>phgrreal.f90</a></li> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + + <li class="active">PHGCUT</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine PHGCUT(CXMN, FELD, WSAVE, IFAX, Z, MNAUF, MMAX, MAUF, MANF, MAXL, MAXB, MLEVEL) + + + +</h2> + + + + + + <p>DIE ROUTINE FUEHRT EINE TRANSFORMATION EINER + FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN + RAUM AUF KUGELKOORDINATEN DURCH. Es kann ein Teilausschnitt + Der Erde angegeben werden. Diese Routine ist langsamer als phgrph</p> +<div class="codehilite"><pre><span></span> WRITE(*,*) 'Symmetrisch: ',SYM +</pre></div> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-cxmn%7E7"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-feld%7E6"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MAXB,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-wsave%7E5"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>WSAVE</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ifax%7E6"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-z%7E6"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(0:((MMAX+3)*(MMAX+4))/2,MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E7"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mmax"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MMAX</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mauf"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-manf"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MANF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxl%7E7"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxb%7E7"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlevel%7E6"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Calls</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~phgcut~~CallsGraph Pages: 1 --> +<svg id="procphgcutCallsGraph" width="362pt" height="74pt" + viewBox="0.00 0.00 362.00 74.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~phgcut~~CallsGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 70)"> +<title>proc~~phgcut~~CallsGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-70 358,-70 358,4 -4,4"/> +<!-- proc~phgcut --> +<g id="proc~~phgcut~~CallsGraph_node1" class="node"><title>proc~phgcut</title> +<polygon fill="none" stroke="black" points="57,-45 0,-45 0,-21 57,-21 57,-45"/> +<text text-anchor="middle" x="28.5" y="-30.6" font-family="Helvetica,sans-Serif" font-size="10.50">PHGCUT</text> +</g> +<!-- proc~phsymcut --> +<g id="proc~~phgcut~~CallsGraph_node2" class="node"><title>proc~phsymcut</title> +<g id="a_proc~~phgcut~~CallsGraph_node2"><a xlink:href=".././proc/phsymcut.html" xlink:title="PHSYMCUT"> +<polygon fill="#d9534f" stroke="#d9534f" points="164,-66 93,-66 93,-42 164,-42 164,-66"/> +<text text-anchor="middle" x="128.5" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHSYMCUT</text> +</a> +</g> +</g> +<!-- proc~phgcut->proc~phsymcut --> +<g id="proc~~phgcut~~CallsGraph_edge1" class="edge"><title>proc~phgcut->proc~phsymcut</title> +<path fill="none" stroke="#000000" d="M57.0593,-38.9056C65.1213,-40.6331 74.148,-42.5674 82.979,-44.4598"/> +<polygon fill="#000000" stroke="#000000" points="82.2931,-47.8922 92.8045,-46.5652 83.7598,-41.0476 82.2931,-47.8922"/> +</g> +<!-- proc~phgpns --> +<g id="proc~~phgcut~~CallsGraph_node3" class="node"><title>proc~phgpns</title> +<g id="a_proc~~phgcut~~CallsGraph_node3"><a xlink:href=".././proc/phgpns.html" xlink:title="PHGPNS"> +<polygon fill="#d9534f" stroke="#d9534f" points="156.5,-24 100.5,-24 100.5,-0 156.5,-0 156.5,-24"/> +<text text-anchor="middle" x="128.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGPNS</text> +</a> +</g> +</g> +<!-- proc~phgcut->proc~phgpns --> +<g id="proc~~phgcut~~CallsGraph_edge2" class="edge"><title>proc~phgcut->proc~phgpns</title> +<path fill="none" stroke="#000000" d="M57.0593,-27.0944C67.4619,-24.8653 79.4706,-22.292 90.5926,-19.9087"/> +<polygon fill="#000000" stroke="#000000" points="91.4414,-23.3064 100.486,-17.7887 89.9746,-16.4618 91.4414,-23.3064"/> +</g> +<!-- proc~rfourtr --> +<g id="proc~~phgcut~~CallsGraph_node4" class="node"><title>proc~rfourtr</title> +<g id="a_proc~~phgcut~~CallsGraph_node4"><a xlink:href=".././proc/rfourtr.html" xlink:title="RFOURTR"> +<polygon fill="#d9534f" stroke="#d9534f" points="264,-45 200,-45 200,-21 264,-21 264,-45"/> +<text text-anchor="middle" x="232" y="-30.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">RFOURTR</text> +</a> +</g> +</g> +<!-- proc~phsymcut->proc~rfourtr --> +<g id="proc~~phgcut~~CallsGraph_edge3" class="edge"><title>proc~phsymcut->proc~rfourtr</title> +<path fill="none" stroke="#000000" d="M164.147,-46.8317C172.485,-45.1066 181.47,-43.2477 190.064,-41.4695"/> +<polygon fill="#000000" stroke="#000000" points="190.829,-44.8856 199.912,-39.432 189.41,-38.0307 190.829,-44.8856"/> +</g> +<!-- proc~phgpns->proc~rfourtr --> +<g id="proc~~phgcut~~CallsGraph_edge4" class="edge"><title>proc~phgpns->proc~rfourtr</title> +<path fill="none" stroke="#000000" d="M156.7,-17.6276C166.861,-19.7298 178.64,-22.1668 189.783,-24.4723"/> +<polygon fill="#000000" stroke="#000000" points="189.271,-27.9404 199.773,-26.5391 190.689,-21.0856 189.271,-27.9404"/> +</g> +<!-- fft99 --> +<g id="proc~~phgcut~~CallsGraph_node5" class="node"><title>fft99</title> +<polygon fill="#777777" stroke="#777777" points="354,-45 300,-45 300,-21 354,-21 354,-45"/> +<text text-anchor="middle" x="327" y="-30.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">fft99</text> +</g> +<!-- proc~rfourtr->fft99 --> +<g id="proc~~phgcut~~CallsGraph_edge5" class="edge"><title>proc~rfourtr->fft99</title> +<path fill="none" stroke="#000000" d="M264.226,-33C272.48,-33 281.455,-33 289.941,-33"/> +<polygon fill="#000000" stroke="#000000" points="289.969,-36.5001 299.969,-33 289.969,-29.5001 289.969,-36.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Called by</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~phgcut~~CalledByGraph Pages: 1 --> +<svg id="procphgcutCalledByGraph" width="168pt" height="32pt" + viewBox="0.00 0.00 168.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~phgcut~~CalledByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~phgcut~~CalledByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 164,-28 164,4 -4,4"/> +<!-- proc~phgcut --> +<g id="proc~~phgcut~~CalledByGraph_node1" class="node"><title>proc~phgcut</title> +<polygon fill="none" stroke="black" points="160,-24 103,-24 103,-0 160,-0 160,-24"/> +<text text-anchor="middle" x="131.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">PHGCUT</text> +</g> +<!-- program~calc_etadot --> +<g id="proc~~phgcut~~CalledByGraph_node2" class="node"><title>program~calc_etadot</title> +<g id="a_proc~~phgcut~~CalledByGraph_node2"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~phgcut --> +<g id="proc~~phgcut~~CalledByGraph_edge1" class="edge"><title>program~calc_etadot->proc~phgcut</title> +<path fill="none" stroke="#000000" d="M67.0012,-12C75.2769,-12 84.2412,-12 92.7541,-12"/> +<polygon fill="#000000" stroke="#000000" points="92.8375,-15.5001 102.837,-12 92.8374,-8.5001 92.8375,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/phgpns.html b/Documentation/html/Documentation/Api/Fortran/proc/phgpns.html new file mode 100644 index 0000000000000000000000000000000000000000..dca19e90f2196944231f70887e441e349fc70df3 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/phgpns.html @@ -0,0 +1,722 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>PHGPNS – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>PHGPNS + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 2.2% of total for procedures.">22 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/phgrreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/phgrreal.f90.html'>phgrreal.f90</a></li> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + + <li class="active">PHGPNS</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine PHGPNS(CXMN, FELD, Z, WSAVE, IFAX, J, MNAUF, MAUF, MANF, MAXL, MAXB, MLEVEL) + + + +</h2> + + + + + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-cxmn%7E9"></span>real,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-feld%7E8"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MAXB,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-z%7E8"></span>real,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(0:((MNAUF+3)*(MNAUF+4))/2,MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-wsave%7E7"></span>real,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>WSAVE</strong>(4*MAUF+15)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ifax%7E8"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-j%7E2"></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>J</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E9"></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mauf%7E3"></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-manf%7E3"></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>MANF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxl%7E9"></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxb%7E9"></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlevel%7E8"></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Calls</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~phgpns~~CallsGraph Pages: 1 --> +<svg id="procphgpnsCallsGraph" width="254pt" height="32pt" + viewBox="0.00 0.00 254.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~phgpns~~CallsGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~phgpns~~CallsGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 250,-28 250,4 -4,4"/> +<!-- proc~phgpns --> +<g id="proc~~phgpns~~CallsGraph_node1" class="node"><title>proc~phgpns</title> +<polygon fill="none" stroke="black" points="56,-24 0,-24 0,-0 56,-0 56,-24"/> +<text text-anchor="middle" x="28" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">PHGPNS</text> +</g> +<!-- proc~rfourtr --> +<g id="proc~~phgpns~~CallsGraph_node2" class="node"><title>proc~rfourtr</title> +<g id="a_proc~~phgpns~~CallsGraph_node2"><a xlink:href=".././proc/rfourtr.html" xlink:title="RFOURTR"> +<polygon fill="#d9534f" stroke="#d9534f" points="156,-24 92,-24 92,-0 156,-0 156,-24"/> +<text text-anchor="middle" x="124" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">RFOURTR</text> +</a> +</g> +</g> +<!-- proc~phgpns->proc~rfourtr --> +<g id="proc~~phgpns~~CallsGraph_edge1" class="edge"><title>proc~phgpns->proc~rfourtr</title> +<path fill="none" stroke="#000000" d="M56.1887,-12C64.217,-12 73.1892,-12 81.8881,-12"/> +<polygon fill="#000000" stroke="#000000" points="81.9013,-15.5001 91.9013,-12 81.9012,-8.5001 81.9013,-15.5001"/> +</g> +<!-- fft99 --> +<g id="proc~~phgpns~~CallsGraph_node3" class="node"><title>fft99</title> +<polygon fill="#777777" stroke="#777777" points="246,-24 192,-24 192,-0 246,-0 246,-24"/> +<text text-anchor="middle" x="219" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">fft99</text> +</g> +<!-- proc~rfourtr->fft99 --> +<g id="proc~~phgpns~~CallsGraph_edge2" class="edge"><title>proc~rfourtr->fft99</title> +<path fill="none" stroke="#000000" d="M156.226,-12C164.48,-12 173.455,-12 181.941,-12"/> +<polygon fill="#000000" stroke="#000000" points="181.969,-15.5001 191.969,-12 181.969,-8.5001 181.969,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Called by</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~phgpns~~CalledByGraph Pages: 1 --> +<svg id="procphgpnsCalledByGraph" width="260pt" height="32pt" + viewBox="0.00 0.00 260.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~phgpns~~CalledByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~phgpns~~CalledByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 256,-28 256,4 -4,4"/> +<!-- proc~phgpns --> +<g id="proc~~phgpns~~CalledByGraph_node1" class="node"><title>proc~phgpns</title> +<polygon fill="none" stroke="black" points="252,-24 196,-24 196,-0 252,-0 252,-24"/> +<text text-anchor="middle" x="224" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">PHGPNS</text> +</g> +<!-- proc~phgcut --> +<g id="proc~~phgpns~~CalledByGraph_node2" class="node"><title>proc~phgcut</title> +<g id="a_proc~~phgpns~~CalledByGraph_node2"><a xlink:href=".././proc/phgcut.html" xlink:title="PHGCUT"> +<polygon fill="#d9534f" stroke="#d9534f" points="160,-24 103,-24 103,-0 160,-0 160,-24"/> +<text text-anchor="middle" x="131.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGCUT</text> +</a> +</g> +</g> +<!-- proc~phgcut->proc~phgpns --> +<g id="proc~~phgpns~~CalledByGraph_edge1" class="edge"><title>proc~phgcut->proc~phgpns</title> +<path fill="none" stroke="#000000" d="M160.145,-12C168.201,-12 177.139,-12 185.688,-12"/> +<polygon fill="#000000" stroke="#000000" points="185.836,-15.5001 195.836,-12 185.835,-8.5001 185.836,-15.5001"/> +</g> +<!-- program~calc_etadot --> +<g id="proc~~phgpns~~CalledByGraph_node3" class="node"><title>program~calc_etadot</title> +<g id="a_proc~~phgpns~~CalledByGraph_node3"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~phgcut --> +<g id="proc~~phgpns~~CalledByGraph_edge2" class="edge"><title>program~calc_etadot->proc~phgcut</title> +<path fill="none" stroke="#000000" d="M67.0012,-12C75.2769,-12 84.2412,-12 92.7541,-12"/> +<polygon fill="#000000" stroke="#000000" points="92.8375,-15.5001 102.837,-12 92.8374,-8.5001 92.8375,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/phgr213.html b/Documentation/html/Documentation/Api/Fortran/proc/phgr213.html new file mode 100644 index 0000000000000000000000000000000000000000..8215ec84788b62bdc4c195b60b26853ec1627fbc --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/phgr213.html @@ -0,0 +1,673 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>PHGR213 – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>PHGR213 + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 1.9% of total for procedures.">19 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/phgrreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/phgrreal.f90.html'>phgrreal.f90</a></li> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + + <li class="active">PHGR213</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine PHGR213(CXMN, FELD, WSAVE, IFAX, Z, MLAT, MNAUF, MAXL, MAXB, MLEVEL) + + + +</h2> + + + + + + <p>DIE ROUTINE F]HRT EINE TRANSFORMATION EINER + FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN + RAUM AUF DAS REDUZIERTE GAUSS'SCHE GITTER DURCH</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-cxmn%7E5"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-feld%7E4"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-wsave%7E3"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>WSAVE</strong>(8*MAXB+15,MAXB/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ifax%7E4"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10,MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-z%7E4"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlat%7E4"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(MAXB/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E5"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxl%7E5"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxb%7E5"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlevel%7E4"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Calls</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~phgr213~~CallsGraph Pages: 1 --> +<svg id="procphgr213CallsGraph" width="159pt" height="32pt" + viewBox="0.00 0.00 159.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~phgr213~~CallsGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~phgr213~~CallsGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 155,-28 155,4 -4,4"/> +<!-- proc~phgr213 --> +<g id="proc~~phgr213~~CallsGraph_node1" class="node"><title>proc~phgr213</title> +<polygon fill="none" stroke="black" points="61,-24 -3.55271e-15,-24 -3.55271e-15,-0 61,-0 61,-24"/> +<text text-anchor="middle" x="30.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">PHGR213</text> +</g> +<!-- proc~phsym --> +<g id="proc~~phgr213~~CallsGraph_node2" class="node"><title>proc~phsym</title> +<g id="a_proc~~phgr213~~CallsGraph_node2"><a xlink:href=".././proc/phsym.html" xlink:title="PHSYM"> +<polygon fill="#d9534f" stroke="#d9534f" points="151,-24 97,-24 97,-0 151,-0 151,-24"/> +<text text-anchor="middle" x="124" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHSYM</text> +</a> +</g> +</g> +<!-- proc~phgr213->proc~phsym --> +<g id="proc~~phgr213~~CallsGraph_edge1" class="edge"><title>proc~phgr213->proc~phsym</title> +<path fill="none" stroke="#000000" d="M61.2074,-12C69.3691,-12 78.3107,-12 86.7941,-12"/> +<polygon fill="#000000" stroke="#000000" points="86.8315,-15.5001 96.8315,-12 86.8314,-8.5001 86.8315,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Called by</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~phgr213~~CalledByGraph Pages: 1 --> +<svg id="procphgr213CalledByGraph" width="172pt" height="32pt" + viewBox="0.00 0.00 172.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~phgr213~~CalledByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~phgr213~~CalledByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 168,-28 168,4 -4,4"/> +<!-- proc~phgr213 --> +<g id="proc~~phgr213~~CalledByGraph_node1" class="node"><title>proc~phgr213</title> +<polygon fill="none" stroke="black" points="164,-24 103,-24 103,-0 164,-0 164,-24"/> +<text text-anchor="middle" x="133.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">PHGR213</text> +</g> +<!-- program~calc_etadot --> +<g id="proc~~phgr213~~CalledByGraph_node2" class="node"><title>program~calc_etadot</title> +<g id="a_proc~~phgr213~~CalledByGraph_node2"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~phgr213 --> +<g id="proc~~phgr213~~CalledByGraph_edge1" class="edge"><title>program~calc_etadot->proc~phgr213</title> +<path fill="none" stroke="#000000" d="M67.1326,-12C75.3663,-12 84.2966,-12 92.8343,-12"/> +<polygon fill="#000000" stroke="#000000" points="92.9805,-15.5001 102.98,-12 92.9805,-8.5001 92.9805,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/phgracut.html b/Documentation/html/Documentation/Api/Fortran/proc/phgracut.html new file mode 100644 index 0000000000000000000000000000000000000000..ea82cbb2b8307532b0b7dc060301e9b1adbd78b7 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/phgracut.html @@ -0,0 +1,741 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>PHGRACUT – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>PHGRACUT + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 8.8% of total for procedures.">90 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/ftrafo.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/ftrafo.f90.html'>ftrafo.f90</a></li> + + <li><a href='../module/ftrafo.html'>FTRAFO</a></li> + + + <li class="active">PHGRACUT</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine PHGRACUT(XMN, XLAM, XPHI, GWSAVE, IFAX, P, H, MAUF, MNAUF, NI, NJ, MANF, NK) + + + +</h2> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Uses</h3> + </div> + <ul class="list-group"> + + <li class="list-group-item"> + <ul class="list-inline"> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + </ul> + </li> + + + + <li class="list-group-item"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~phgracut~~UsesGraph Pages: 1 --> +<svg id="procphgracutUsesGraph" width="173pt" height="32pt" + viewBox="0.00 0.00 173.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~phgracut~~UsesGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~phgracut~~UsesGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 169,-28 169,4 -4,4"/> +<!-- proc~phgracut --> +<g id="proc~~phgracut~~UsesGraph_node1" class="node"><title>proc~phgracut</title> +<polygon fill="none" stroke="black" points="165,-24 94,-24 94,-0 165,-0 165,-24"/> +<text text-anchor="middle" x="129.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">PHGRACUT</text> +</g> +<!-- module~phtogr --> +<g id="proc~~phgracut~~UsesGraph_node2" class="node"><title>module~phtogr</title> +<g id="a_proc~~phgracut~~UsesGraph_node2"><a xlink:href=".././module/phtogr.html" xlink:title="PHTOGR"> +<polygon fill="#337ab7" stroke="#337ab7" points="58,-24 0,-24 0,-0 58,-0 58,-24"/> +<text text-anchor="middle" x="29" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHTOGR</text> +</a> +</g> +</g> +<!-- proc~phgracut->module~phtogr --> +<g id="proc~~phgracut~~UsesGraph_edge1" class="edge"><title>proc~phgracut->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M93.7726,-12C85.5942,-12 76.829,-12 68.4957,-12"/> +<polygon fill="#000000" stroke="#000000" points="68.2478,-8.5001 58.2478,-12 68.2478,-15.5001 68.2478,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="490pt" height="32pt" + viewBox="0.00 0.00 489.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 485.5,-28 485.5,4 -4,4"/> +<!-- Module --> +<g id="node1" class="node"><title>Module</title> +<polygon fill="#337ab7" stroke="#337ab7" points="54,-24 0,-24 0,-0 54,-0 54,-24"/> +<text text-anchor="middle" x="27" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Module</text> +</g> +<!-- Submodule --> +<g id="node2" class="node"><title>Submodule</title> +<polygon fill="#5bc0de" stroke="#5bc0de" points="139.5,-24 72.5,-24 72.5,-0 139.5,-0 139.5,-24"/> +<text text-anchor="middle" x="106" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Submodule</text> +</g> +<!-- Subroutine --> +<g id="node3" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="222,-24 158,-24 158,-0 222,-0 222,-24"/> +<text text-anchor="middle" x="190" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node4" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="294,-24 240,-24 240,-0 294,-0 294,-24"/> +<text text-anchor="middle" x="267" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="366,-24 312,-24 312,-0 366,-0 366,-24"/> +<text text-anchor="middle" x="339" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="481.5,-24 384.5,-24 384.5,-0 481.5,-0 481.5,-24"/> +<text text-anchor="middle" x="433" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a submodule to the (sub)module which it is + descended from. Dashed arrows point from a module or program unit to + modules which it uses. + </p> + </div></div></div></div> + </li> + + </ul> + </div> + + + + + <p>Berechnung des Gradienten eines Skalars aus dem Feld des + Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der + Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter.</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-xmn%7E4"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-xlam%7E4"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XLAM</strong>(NI,NJ,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-xphi%7E4"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XPHI</strong>(NI,NJ,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-gwsave%7E4"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>GWSAVE</strong>(4*MAUF+15)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ifax%7E13"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-p%7E4"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>P</strong>(0:(MNAUF+3)*(MNAUF+4)/2,NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-h%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>H</strong>(0:(MNAUF+2)*(MNAUF+3)/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mauf%7E5"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E16"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ni%7E6"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NI</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-nj%7E6"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NJ</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-manf%7E4"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MANF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-nk%7E6"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NK</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Calls</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~phgracut~~CallsGraph Pages: 1 --> +<svg id="procphgracutCallsGraph" width="269pt" height="32pt" + viewBox="0.00 0.00 269.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~phgracut~~CallsGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~phgracut~~CallsGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 265,-28 265,4 -4,4"/> +<!-- proc~phgracut --> +<g id="proc~~phgracut~~CallsGraph_node1" class="node"><title>proc~phgracut</title> +<polygon fill="none" stroke="black" points="71,-24 0,-24 0,-0 71,-0 71,-24"/> +<text text-anchor="middle" x="35.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">PHGRACUT</text> +</g> +<!-- proc~rfourtr --> +<g id="proc~~phgracut~~CallsGraph_node2" class="node"><title>proc~rfourtr</title> +<g id="a_proc~~phgracut~~CallsGraph_node2"><a xlink:href=".././proc/rfourtr.html" xlink:title="RFOURTR"> +<polygon fill="#d9534f" stroke="#d9534f" points="171,-24 107,-24 107,-0 171,-0 171,-24"/> +<text text-anchor="middle" x="139" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">RFOURTR</text> +</a> +</g> +</g> +<!-- proc~phgracut->proc~rfourtr --> +<g id="proc~~phgracut~~CallsGraph_edge1" class="edge"><title>proc~phgracut->proc~rfourtr</title> +<path fill="none" stroke="#000000" d="M71.1467,-12C79.394,-12 88.2744,-12 96.7838,-12"/> +<polygon fill="#000000" stroke="#000000" points="96.912,-15.5001 106.912,-12 96.9119,-8.5001 96.912,-15.5001"/> +</g> +<!-- fft99 --> +<g id="proc~~phgracut~~CallsGraph_node3" class="node"><title>fft99</title> +<polygon fill="#777777" stroke="#777777" points="261,-24 207,-24 207,-0 261,-0 261,-24"/> +<text text-anchor="middle" x="234" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">fft99</text> +</g> +<!-- proc~rfourtr->fft99 --> +<g id="proc~~phgracut~~CallsGraph_edge2" class="edge"><title>proc~rfourtr->fft99</title> +<path fill="none" stroke="#000000" d="M171.226,-12C179.48,-12 188.455,-12 196.941,-12"/> +<polygon fill="#000000" stroke="#000000" points="196.969,-15.5001 206.969,-12 196.969,-8.5001 196.969,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/phgrad.html b/Documentation/html/Documentation/Api/Fortran/proc/phgrad.html new file mode 100644 index 0000000000000000000000000000000000000000..1be8b0fccc170c45c97eff6d0dde20fc7eab598a --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/phgrad.html @@ -0,0 +1,716 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>PHGRAD – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>PHGRAD + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 8.4% of total for procedures.">86 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/ftrafo.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/ftrafo.f90.html'>ftrafo.f90</a></li> + + <li><a href='../module/ftrafo.html'>FTRAFO</a></li> + + + <li class="active">PHGRAD</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine PHGRAD(XMN, XLAM, XPHI, GWSAVE, IFAX, P, H, MLAT, MNAUF, NI, NJ, NK) + + + +</h2> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Uses</h3> + </div> + <ul class="list-group"> + + <li class="list-group-item"> + <ul class="list-inline"> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + </ul> + </li> + + + + <li class="list-group-item"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~phgrad~~UsesGraph Pages: 1 --> +<svg id="procphgradUsesGraph" width="159pt" height="32pt" + viewBox="0.00 0.00 159.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~phgrad~~UsesGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~phgrad~~UsesGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 155,-28 155,4 -4,4"/> +<!-- proc~phgrad --> +<g id="proc~~phgrad~~UsesGraph_node1" class="node"><title>proc~phgrad</title> +<polygon fill="none" stroke="black" points="151,-24 94,-24 94,-0 151,-0 151,-24"/> +<text text-anchor="middle" x="122.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">PHGRAD</text> +</g> +<!-- module~phtogr --> +<g id="proc~~phgrad~~UsesGraph_node2" class="node"><title>module~phtogr</title> +<g id="a_proc~~phgrad~~UsesGraph_node2"><a xlink:href=".././module/phtogr.html" xlink:title="PHTOGR"> +<polygon fill="#337ab7" stroke="#337ab7" points="58,-24 0,-24 0,-0 58,-0 58,-24"/> +<text text-anchor="middle" x="29" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHTOGR</text> +</a> +</g> +</g> +<!-- proc~phgrad->module~phtogr --> +<g id="proc~~phgrad~~UsesGraph_edge1" class="edge"><title>proc~phgrad->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M93.5498,-12C85.554,-12 76.6987,-12 68.2008,-12"/> +<polygon fill="#000000" stroke="#000000" points="68.0944,-8.5001 58.0943,-12 68.0943,-15.5001 68.0944,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="490pt" height="32pt" + viewBox="0.00 0.00 489.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 485.5,-28 485.5,4 -4,4"/> +<!-- Module --> +<g id="node1" class="node"><title>Module</title> +<polygon fill="#337ab7" stroke="#337ab7" points="54,-24 0,-24 0,-0 54,-0 54,-24"/> +<text text-anchor="middle" x="27" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Module</text> +</g> +<!-- Submodule --> +<g id="node2" class="node"><title>Submodule</title> +<polygon fill="#5bc0de" stroke="#5bc0de" points="139.5,-24 72.5,-24 72.5,-0 139.5,-0 139.5,-24"/> +<text text-anchor="middle" x="106" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Submodule</text> +</g> +<!-- Subroutine --> +<g id="node3" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="222,-24 158,-24 158,-0 222,-0 222,-24"/> +<text text-anchor="middle" x="190" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node4" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="294,-24 240,-24 240,-0 294,-0 294,-24"/> +<text text-anchor="middle" x="267" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="366,-24 312,-24 312,-0 366,-0 366,-24"/> +<text text-anchor="middle" x="339" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="481.5,-24 384.5,-24 384.5,-0 481.5,-0 481.5,-24"/> +<text text-anchor="middle" x="433" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a submodule to the (sub)module which it is + descended from. Dashed arrows point from a module or program unit to + modules which it uses. + </p> + </div></div></div></div> + </li> + + </ul> + </div> + + + + + <p>Berechnung des Gradienten eines Skalars aus dem Feld des + Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der + Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter.</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-xmn%7E3"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-xlam%7E3"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XLAM</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-xphi%7E3"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XPHI</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-gwsave%7E3"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>GWSAVE</strong>(8*NJ+15,NJ/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ifax%7E12"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10,NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-p%7E3"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>P</strong>(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-h"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>H</strong>(0:(MNAUF+2)*(MNAUF+3)/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlat%7E8"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E15"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ni%7E5"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NI</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-nj%7E5"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NJ</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-nk%7E5"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NK</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Called by</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~phgrad~~CalledByGraph Pages: 1 --> +<svg id="procphgradCalledByGraph" width="168pt" height="32pt" + viewBox="0.00 0.00 168.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~phgrad~~CalledByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~phgrad~~CalledByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 164,-28 164,4 -4,4"/> +<!-- proc~phgrad --> +<g id="proc~~phgrad~~CalledByGraph_node1" class="node"><title>proc~phgrad</title> +<polygon fill="none" stroke="black" points="160,-24 103,-24 103,-0 160,-0 160,-24"/> +<text text-anchor="middle" x="131.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">PHGRAD</text> +</g> +<!-- program~calc_etadot --> +<g id="proc~~phgrad~~CalledByGraph_node2" class="node"><title>program~calc_etadot</title> +<g id="a_proc~~phgrad~~CalledByGraph_node2"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~phgrad --> +<g id="proc~~phgrad~~CalledByGraph_edge1" class="edge"><title>program~calc_etadot->proc~phgrad</title> +<path fill="none" stroke="#000000" d="M67.0012,-12C75.2769,-12 84.2412,-12 92.7541,-12"/> +<polygon fill="#000000" stroke="#000000" points="92.8375,-15.5001 102.837,-12 92.8374,-8.5001 92.8375,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/phsym.html b/Documentation/html/Documentation/Api/Fortran/proc/phsym.html new file mode 100644 index 0000000000000000000000000000000000000000..29bc9a6adfc1aff08c3f5e5fbffedb8f18faf680 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/phsym.html @@ -0,0 +1,620 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>PHSYM – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>PHSYM + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 5.0% of total for procedures.">51 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/phgrreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/phgrreal.f90.html'>phgrreal.f90</a></li> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + + <li class="active">PHSYM</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine PHSYM(K, IND, CXMN, FELD, Z, WSAVE, IFAX, MLAT, MNAUF, MAXL, MAXB, MLEVEL) + + + +</h2> + + + + + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-k"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>K</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ind%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IND</strong>(MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-cxmn%7E6"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-feld%7E5"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-z%7E5"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-wsave%7E4"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>WSAVE</strong>(8*MAXB+15,MAXB/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ifax%7E5"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10,MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlat%7E5"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(MAXB/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E6"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxl%7E6"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxb%7E6"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlevel%7E5"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Called by</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~phsym~~CalledByGraph Pages: 1 --> +<svg id="procphsymCalledByGraph" width="262pt" height="32pt" + viewBox="0.00 0.00 262.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~phsym~~CalledByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~phsym~~CalledByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 258,-28 258,4 -4,4"/> +<!-- proc~phsym --> +<g id="proc~~phsym~~CalledByGraph_node1" class="node"><title>proc~phsym</title> +<polygon fill="none" stroke="black" points="254,-24 200,-24 200,-0 254,-0 254,-24"/> +<text text-anchor="middle" x="227" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">PHSYM</text> +</g> +<!-- proc~phgr213 --> +<g id="proc~~phsym~~CalledByGraph_node2" class="node"><title>proc~phgr213</title> +<g id="a_proc~~phsym~~CalledByGraph_node2"><a xlink:href=".././proc/phgr213.html" xlink:title="PHGR213"> +<polygon fill="#d9534f" stroke="#d9534f" points="164,-24 103,-24 103,-0 164,-0 164,-24"/> +<text text-anchor="middle" x="133.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGR213</text> +</a> +</g> +</g> +<!-- proc~phgr213->proc~phsym --> +<g id="proc~~phsym~~CalledByGraph_edge1" class="edge"><title>proc~phgr213->proc~phsym</title> +<path fill="none" stroke="#000000" d="M164.207,-12C172.369,-12 181.311,-12 189.794,-12"/> +<polygon fill="#000000" stroke="#000000" points="189.831,-15.5001 199.831,-12 189.831,-8.5001 189.831,-15.5001"/> +</g> +<!-- program~calc_etadot --> +<g id="proc~~phsym~~CalledByGraph_node3" class="node"><title>program~calc_etadot</title> +<g id="a_proc~~phsym~~CalledByGraph_node3"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~phgr213 --> +<g id="proc~~phsym~~CalledByGraph_edge2" class="edge"><title>program~calc_etadot->proc~phgr213</title> +<path fill="none" stroke="#000000" d="M67.1326,-12C75.3663,-12 84.2966,-12 92.8343,-12"/> +<polygon fill="#000000" stroke="#000000" points="92.9805,-15.5001 102.98,-12 92.9805,-8.5001 92.9805,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/phsymcut.html b/Documentation/html/Documentation/Api/Fortran/proc/phsymcut.html new file mode 100644 index 0000000000000000000000000000000000000000..15bfc071559c30bebcdd27c78e8cb1b35f3f78ba --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/phsymcut.html @@ -0,0 +1,722 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>PHSYMCUT – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>PHSYMCUT + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 5.7% of total for procedures.">58 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/phgrreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/phgrreal.f90.html'>phgrreal.f90</a></li> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + + <li class="active">PHSYMCUT</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine PHSYMCUT(J, CXMN, FELD, Z, WSAVE, IFAX, MAUF, MNAUF, MAXL, MAXB, MLEVEL, MANF) + + + +</h2> + + + + + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-j"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>J</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-cxmn%7E8"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-feld%7E7"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MAXB,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-z%7E7"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong>(0:((MNAUF+3)*(MNAUF+4))/2,MAXB)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-wsave%7E6"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>WSAVE</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ifax%7E7"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mauf%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E8"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxl%7E8"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxb%7E8"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlevel%7E7"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-manf%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MANF</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Calls</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~phsymcut~~CallsGraph Pages: 1 --> +<svg id="procphsymcutCallsGraph" width="269pt" height="32pt" + viewBox="0.00 0.00 269.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~phsymcut~~CallsGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~phsymcut~~CallsGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 265,-28 265,4 -4,4"/> +<!-- proc~phsymcut --> +<g id="proc~~phsymcut~~CallsGraph_node1" class="node"><title>proc~phsymcut</title> +<polygon fill="none" stroke="black" points="71,-24 0,-24 0,-0 71,-0 71,-24"/> +<text text-anchor="middle" x="35.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">PHSYMCUT</text> +</g> +<!-- proc~rfourtr --> +<g id="proc~~phsymcut~~CallsGraph_node2" class="node"><title>proc~rfourtr</title> +<g id="a_proc~~phsymcut~~CallsGraph_node2"><a xlink:href=".././proc/rfourtr.html" xlink:title="RFOURTR"> +<polygon fill="#d9534f" stroke="#d9534f" points="171,-24 107,-24 107,-0 171,-0 171,-24"/> +<text text-anchor="middle" x="139" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">RFOURTR</text> +</a> +</g> +</g> +<!-- proc~phsymcut->proc~rfourtr --> +<g id="proc~~phsymcut~~CallsGraph_edge1" class="edge"><title>proc~phsymcut->proc~rfourtr</title> +<path fill="none" stroke="#000000" d="M71.1467,-12C79.394,-12 88.2744,-12 96.7838,-12"/> +<polygon fill="#000000" stroke="#000000" points="96.912,-15.5001 106.912,-12 96.9119,-8.5001 96.912,-15.5001"/> +</g> +<!-- fft99 --> +<g id="proc~~phsymcut~~CallsGraph_node3" class="node"><title>fft99</title> +<polygon fill="#777777" stroke="#777777" points="261,-24 207,-24 207,-0 261,-0 261,-24"/> +<text text-anchor="middle" x="234" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">fft99</text> +</g> +<!-- proc~rfourtr->fft99 --> +<g id="proc~~phsymcut~~CallsGraph_edge2" class="edge"><title>proc~rfourtr->fft99</title> +<path fill="none" stroke="#000000" d="M171.226,-12C179.48,-12 188.455,-12 196.941,-12"/> +<polygon fill="#000000" stroke="#000000" points="196.969,-15.5001 206.969,-12 196.969,-8.5001 196.969,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Called by</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~phsymcut~~CalledByGraph Pages: 1 --> +<svg id="procphsymcutCalledByGraph" width="275pt" height="32pt" + viewBox="0.00 0.00 275.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~phsymcut~~CalledByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~phsymcut~~CalledByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 271,-28 271,4 -4,4"/> +<!-- proc~phsymcut --> +<g id="proc~~phsymcut~~CalledByGraph_node1" class="node"><title>proc~phsymcut</title> +<polygon fill="none" stroke="black" points="267,-24 196,-24 196,-0 267,-0 267,-24"/> +<text text-anchor="middle" x="231.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">PHSYMCUT</text> +</g> +<!-- proc~phgcut --> +<g id="proc~~phsymcut~~CalledByGraph_node2" class="node"><title>proc~phgcut</title> +<g id="a_proc~~phsymcut~~CalledByGraph_node2"><a xlink:href=".././proc/phgcut.html" xlink:title="PHGCUT"> +<polygon fill="#d9534f" stroke="#d9534f" points="160,-24 103,-24 103,-0 160,-0 160,-24"/> +<text text-anchor="middle" x="131.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGCUT</text> +</a> +</g> +</g> +<!-- proc~phgcut->proc~phsymcut --> +<g id="proc~~phsymcut~~CalledByGraph_edge1" class="edge"><title>proc~phgcut->proc~phsymcut</title> +<path fill="none" stroke="#000000" d="M160.059,-12C168.035,-12 176.954,-12 185.694,-12"/> +<polygon fill="#000000" stroke="#000000" points="185.805,-15.5001 195.804,-12 185.804,-8.5001 185.805,-15.5001"/> +</g> +<!-- program~calc_etadot --> +<g id="proc~~phsymcut~~CalledByGraph_node3" class="node"><title>program~calc_etadot</title> +<g id="a_proc~~phsymcut~~CalledByGraph_node3"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~phgcut --> +<g id="proc~~phsymcut~~CalledByGraph_edge2" class="edge"><title>program~calc_etadot->proc~phgcut</title> +<path fill="none" stroke="#000000" d="M67.0012,-12C75.2769,-12 84.2412,-12 92.7541,-12"/> +<polygon fill="#000000" stroke="#000000" points="92.8375,-15.5001 102.837,-12 92.8374,-8.5001 92.8375,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/plgnfa.html b/Documentation/html/Documentation/Api/Fortran/proc/plgnfa.html new file mode 100644 index 0000000000000000000000000000000000000000..d6b0aca8846b89463ceee45501ec49e147705254 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/plgnfa.html @@ -0,0 +1,382 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>PLGNFA – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>PLGNFA + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 2.9% of total for procedures.">30 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/phgrreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/phgrreal.f90.html'>phgrreal.f90</a></li> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + + <li class="active">PLGNFA</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine PLGNFA(LL, X, Z) + + + +</h2> + + + + + + <p>PLGNDN BERECHNET ALLE NORMIERTEN ASSOZIIERTEN + LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) + UND SCHREIBT SIE IN DAS FELD Z</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-ll"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>LL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-x%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>X</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-z%7E10"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>Z</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/posnam.html b/Documentation/html/Documentation/Api/Fortran/proc/posnam.html new file mode 100644 index 0000000000000000000000000000000000000000..e0ba9be1a93159d3eab93d9fef6b05dee2861cfc --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/posnam.html @@ -0,0 +1,457 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>POSNAM – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>POSNAM + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 1.7% of total for procedures.">17 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/posnam.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/posnam.f90.html'>posnam.f90</a></li> + + + <li class="active">POSNAM</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +subroutine POSNAM(KULNAM, CDNAML) + + + +</h2> + + + + + + <p>position in namelist file.</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-kulnam"></span>integer,</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>KULNAM</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-cdnaml"></span>character(len=*),</td> + <td>intent(in)</td> + <td></td> + + <td></td><td>::</td> + <td><strong>CDNAML</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Called by</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~posnam~~CalledByGraph Pages: 1 --> +<svg id="procposnamCalledByGraph" width="169pt" height="32pt" + viewBox="0.00 0.00 169.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~posnam~~CalledByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~posnam~~CalledByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 165,-28 165,4 -4,4"/> +<!-- proc~posnam --> +<g id="proc~~posnam~~CalledByGraph_node1" class="node"><title>proc~posnam</title> +<polygon fill="none" stroke="black" points="161,-24 103,-24 103,-0 161,-0 161,-24"/> +<text text-anchor="middle" x="132" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">POSNAM</text> +</g> +<!-- program~calc_etadot --> +<g id="proc~~posnam~~CalledByGraph_node2" class="node"><title>program~calc_etadot</title> +<g id="a_proc~~posnam~~CalledByGraph_node2"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~posnam --> +<g id="proc~~posnam~~CalledByGraph_edge1" class="edge"><title>program~calc_etadot->proc~posnam</title> +<path fill="none" stroke="#000000" d="M67.1705,-12C75.4116,-12 84.3319,-12 92.8175,-12"/> +<polygon fill="#000000" stroke="#000000" points="92.8775,-15.5001 102.877,-12 92.8774,-8.5001 92.8775,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/readlatlon.html b/Documentation/html/Documentation/Api/Fortran/proc/readlatlon.html new file mode 100644 index 0000000000000000000000000000000000000000..6f9c7e1b19afb917c56cdc639b74375e0ad6a475 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/readlatlon.html @@ -0,0 +1,721 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>READLATLON – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>READLATLON + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 5.4% of total for procedures.">55 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/rwgrib2.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/rwgrib2.f90.html'>rwgrib2.f90</a></li> + + <li><a href='../module/rwgrib2.html'>RWGRIB2</a></li> + + + <li class="active">READLATLON</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine READLATLON(filename, feld, maxl, maxb, mlevel, mpar) + + + +</h2> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Uses</h3> + </div> + <ul class="list-group"> + + <li class="list-group-item"> + <ul class="list-inline"> + + <li>GRIB_API</li> + + </ul> + </li> + + + + <li class="list-group-item"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~readlatlon~~UsesGraph Pages: 1 --> +<svg id="procreadlatlonUsesGraph" width="187pt" height="32pt" + viewBox="0.00 0.00 187.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~readlatlon~~UsesGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~readlatlon~~UsesGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 183,-28 183,4 -4,4"/> +<!-- proc~readlatlon --> +<g id="proc~~readlatlon~~UsesGraph_node1" class="node"><title>proc~readlatlon</title> +<polygon fill="none" stroke="black" points="179,-24 97,-24 97,-0 179,-0 179,-24"/> +<text text-anchor="middle" x="138" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">READLATLON</text> +</g> +<!-- GRIB_API --> +<g id="proc~~readlatlon~~UsesGraph_node2" class="node"><title>GRIB_API</title> +<polygon fill="#337ab7" stroke="#337ab7" points="61,-24 -3.55271e-15,-24 -3.55271e-15,-0 61,-0 61,-24"/> +<text text-anchor="middle" x="30.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GRIB_API</text> +</g> +<!-- proc~readlatlon->GRIB_API --> +<g id="proc~~readlatlon~~UsesGraph_edge1" class="edge"><title>proc~readlatlon->GRIB_API</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M96.814,-12C88.4615,-12 79.6628,-12 71.3234,-12"/> +<polygon fill="#000000" stroke="#000000" points="71.074,-8.5001 61.074,-12 71.074,-15.5001 71.074,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="490pt" height="32pt" + viewBox="0.00 0.00 489.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 485.5,-28 485.5,4 -4,4"/> +<!-- Module --> +<g id="node1" class="node"><title>Module</title> +<polygon fill="#337ab7" stroke="#337ab7" points="54,-24 0,-24 0,-0 54,-0 54,-24"/> +<text text-anchor="middle" x="27" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Module</text> +</g> +<!-- Submodule --> +<g id="node2" class="node"><title>Submodule</title> +<polygon fill="#5bc0de" stroke="#5bc0de" points="139.5,-24 72.5,-24 72.5,-0 139.5,-0 139.5,-24"/> +<text text-anchor="middle" x="106" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Submodule</text> +</g> +<!-- Subroutine --> +<g id="node3" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="222,-24 158,-24 158,-0 222,-0 222,-24"/> +<text text-anchor="middle" x="190" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node4" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="294,-24 240,-24 240,-0 294,-0 294,-24"/> +<text text-anchor="middle" x="267" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="366,-24 312,-24 312,-0 366,-0 366,-24"/> +<text text-anchor="middle" x="339" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="481.5,-24 384.5,-24 384.5,-0 481.5,-0 481.5,-24"/> +<text text-anchor="middle" x="433" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a submodule to the (sub)module which it is + descended from. Dashed arrows point from a module or program unit to + modules which it uses. + </p> + </div></div></div></div> + </li> + + </ul> + </div> + + + + + <p>Read a field from GRIB file on lat-lon grid</p> +<p>write(<em>,</em>) 'readlatlon: ',i-1,' records read'</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-filename"></span>character(len=*)</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>filename</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-feld"></span>real,</td> + <td></td> + <td></td> + + <td>dimension(maxl,maxb,mlevel)</td><td>::</td> + <td><strong>feld</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxl"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>maxl</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxb"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>maxb</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlevel"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>mlevel</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mpar"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>mpar</strong>(:)</td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Calls</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~readlatlon~~CallsGraph Pages: 1 --> +<svg id="procreadlatlonCallsGraph" width="223pt" height="74pt" + viewBox="0.00 0.00 223.00 74.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~readlatlon~~CallsGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 70)"> +<title>proc~~readlatlon~~CallsGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-70 219,-70 219,4 -4,4"/> +<!-- proc~readlatlon --> +<g id="proc~~readlatlon~~CallsGraph_node1" class="node"><title>proc~readlatlon</title> +<polygon fill="none" stroke="black" points="82,-45 0,-45 0,-21 82,-21 82,-45"/> +<text text-anchor="middle" x="41" y="-30.6" font-family="Helvetica,sans-Serif" font-size="10.50">READLATLON</text> +</g> +<!-- grib_count_in_file --> +<g id="proc~~readlatlon~~CallsGraph_node2" class="node"><title>grib_count_in_file</title> +<polygon fill="#777777" stroke="#777777" points="215,-66 118,-66 118,-42 215,-42 215,-66"/> +<text text-anchor="middle" x="166.5" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grib_count_in_file</text> +</g> +<!-- proc~readlatlon->grib_count_in_file --> +<g id="proc~~readlatlon~~CallsGraph_edge1" class="edge"><title>proc~readlatlon->grib_count_in_file</title> +<path fill="none" stroke="#000000" d="M82.0969,-39.8181C90.2978,-41.2126 99.0822,-42.7063 107.76,-44.1819"/> +<polygon fill="#000000" stroke="#000000" points="107.413,-47.673 117.858,-45.8989 108.586,-40.772 107.413,-47.673"/> +</g> +<!-- grib_close_file --> +<g id="proc~~readlatlon~~CallsGraph_node3" class="node"><title>grib_close_file</title> +<polygon fill="#777777" stroke="#777777" points="207,-24 126,-24 126,-0 207,-0 207,-24"/> +<text text-anchor="middle" x="166.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grib_close_file</text> +</g> +<!-- proc~readlatlon->grib_close_file --> +<g id="proc~~readlatlon~~CallsGraph_edge2" class="edge"><title>proc~readlatlon->grib_close_file</title> +<path fill="none" stroke="#000000" d="M82.0969,-26.1819C92.774,-24.3664 104.44,-22.3827 115.573,-20.4896"/> +<polygon fill="#000000" stroke="#000000" points="116.333,-23.9108 125.604,-18.7839 115.159,-17.0098 116.333,-23.9108"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Called by</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~readlatlon~~CalledByGraph Pages: 1 --> +<svg id="procreadlatlonCalledByGraph" width="193pt" height="32pt" + viewBox="0.00 0.00 193.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~readlatlon~~CalledByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~readlatlon~~CalledByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 189,-28 189,4 -4,4"/> +<!-- proc~readlatlon --> +<g id="proc~~readlatlon~~CalledByGraph_node1" class="node"><title>proc~readlatlon</title> +<polygon fill="none" stroke="black" points="185,-24 103,-24 103,-0 185,-0 185,-24"/> +<text text-anchor="middle" x="144" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">READLATLON</text> +</g> +<!-- program~calc_etadot --> +<g id="proc~~readlatlon~~CalledByGraph_node2" class="node"><title>program~calc_etadot</title> +<g id="a_proc~~readlatlon~~CalledByGraph_node2"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~readlatlon --> +<g id="proc~~readlatlon~~CalledByGraph_edge1" class="edge"><title>program~calc_etadot->proc~readlatlon</title> +<path fill="none" stroke="#000000" d="M67.0536,-12C75.1292,-12 83.9729,-12 92.6807,-12"/> +<polygon fill="#000000" stroke="#000000" points="92.7865,-15.5001 102.787,-12 92.7865,-8.5001 92.7865,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/readspectral.html b/Documentation/html/Documentation/Api/Fortran/proc/readspectral.html new file mode 100644 index 0000000000000000000000000000000000000000..df974107b5d705a68b8fa4f088ab3abbd4653fbb --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/readspectral.html @@ -0,0 +1,751 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>READSPECTRAL – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>READSPECTRAL + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 5.4% of total for procedures.">55 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/rwgrib2.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/rwgrib2.f90.html'>rwgrib2.f90</a></li> + + <li><a href='../module/rwgrib2.html'>RWGRIB2</a></li> + + + <li class="active">READSPECTRAL</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine READSPECTRAL(filename, CXMN, mnauf, mlevel, maxlev, mpar, A, B) + + + +</h2> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Uses</h3> + </div> + <ul class="list-group"> + + <li class="list-group-item"> + <ul class="list-inline"> + + <li>GRIB_API</li> + + </ul> + </li> + + + + <li class="list-group-item"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~readspectral~~UsesGraph Pages: 1 --> +<svg id="procreadspectralUsesGraph" width="201pt" height="32pt" + viewBox="0.00 0.00 201.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~readspectral~~UsesGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~readspectral~~UsesGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 197,-28 197,4 -4,4"/> +<!-- proc~readspectral --> +<g id="proc~~readspectral~~UsesGraph_node1" class="node"><title>proc~readspectral</title> +<polygon fill="none" stroke="black" points="193,-24 97,-24 97,-0 193,-0 193,-24"/> +<text text-anchor="middle" x="145" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">READSPECTRAL</text> +</g> +<!-- GRIB_API --> +<g id="proc~~readspectral~~UsesGraph_node2" class="node"><title>GRIB_API</title> +<polygon fill="#337ab7" stroke="#337ab7" points="61,-24 -3.55271e-15,-24 -3.55271e-15,-0 61,-0 61,-24"/> +<text text-anchor="middle" x="30.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GRIB_API</text> +</g> +<!-- proc~readspectral->GRIB_API --> +<g id="proc~~readspectral~~UsesGraph_edge1" class="edge"><title>proc~readspectral->GRIB_API</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M96.9417,-12C88.3899,-12 79.5468,-12 71.232,-12"/> +<polygon fill="#000000" stroke="#000000" points="71.0443,-8.5001 61.0443,-12 71.0442,-15.5001 71.0443,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="490pt" height="32pt" + viewBox="0.00 0.00 489.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 485.5,-28 485.5,4 -4,4"/> +<!-- Module --> +<g id="node1" class="node"><title>Module</title> +<polygon fill="#337ab7" stroke="#337ab7" points="54,-24 0,-24 0,-0 54,-0 54,-24"/> +<text text-anchor="middle" x="27" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Module</text> +</g> +<!-- Submodule --> +<g id="node2" class="node"><title>Submodule</title> +<polygon fill="#5bc0de" stroke="#5bc0de" points="139.5,-24 72.5,-24 72.5,-0 139.5,-0 139.5,-24"/> +<text text-anchor="middle" x="106" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Submodule</text> +</g> +<!-- Subroutine --> +<g id="node3" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="222,-24 158,-24 158,-0 222,-0 222,-24"/> +<text text-anchor="middle" x="190" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node4" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="294,-24 240,-24 240,-0 294,-0 294,-24"/> +<text text-anchor="middle" x="267" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="366,-24 312,-24 312,-0 366,-0 366,-24"/> +<text text-anchor="middle" x="339" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="481.5,-24 384.5,-24 384.5,-0 481.5,-0 481.5,-24"/> +<text text-anchor="middle" x="433" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a submodule to the (sub)module which it is + descended from. Dashed arrows point from a module or program unit to + modules which it uses. + </p> + </div></div></div></div> + </li> + + </ul> + </div> + + + + + <p>read a GRIB file in spherical harmonics</p> +<p>write(<em>,</em>) 'readspectral: ',i-1,' records read'</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-filename%7E2"></span>character(len=*)</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>filename</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-cxmn"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>mnauf</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlevel%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>mlevel</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxlev"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>maxlev</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mpar%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>mpar</strong>(:)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-a"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>A</strong>(MAXLEV+1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-b"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>B</strong>(MAXLEV+1)</td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Calls</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~readspectral~~CallsGraph Pages: 1 --> +<svg id="procreadspectralCallsGraph" width="237pt" height="74pt" + viewBox="0.00 0.00 237.00 74.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~readspectral~~CallsGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 70)"> +<title>proc~~readspectral~~CallsGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-70 233,-70 233,4 -4,4"/> +<!-- proc~readspectral --> +<g id="proc~~readspectral~~CallsGraph_node1" class="node"><title>proc~readspectral</title> +<polygon fill="none" stroke="black" points="96,-45 0,-45 0,-21 96,-21 96,-45"/> +<text text-anchor="middle" x="48" y="-30.6" font-family="Helvetica,sans-Serif" font-size="10.50">READSPECTRAL</text> +</g> +<!-- grib_count_in_file --> +<g id="proc~~readspectral~~CallsGraph_node2" class="node"><title>grib_count_in_file</title> +<polygon fill="#777777" stroke="#777777" points="229,-66 132,-66 132,-42 229,-42 229,-66"/> +<text text-anchor="middle" x="180.5" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grib_count_in_file</text> +</g> +<!-- proc~readspectral->grib_count_in_file --> +<g id="proc~~readspectral~~CallsGraph_edge1" class="edge"><title>proc~readspectral->grib_count_in_file</title> +<path fill="none" stroke="#000000" d="M96.1135,-40.5815C104.404,-41.9157 113.12,-43.3181 121.663,-44.693"/> +<polygon fill="#000000" stroke="#000000" points="121.149,-48.1552 131.578,-46.2885 122.261,-41.2441 121.149,-48.1552"/> +</g> +<!-- grib_close_file --> +<g id="proc~~readspectral~~CallsGraph_node3" class="node"><title>grib_close_file</title> +<polygon fill="#777777" stroke="#777777" points="221,-24 140,-24 140,-0 221,-0 221,-24"/> +<text text-anchor="middle" x="180.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grib_close_file</text> +</g> +<!-- proc~readspectral->grib_close_file --> +<g id="proc~~readspectral~~CallsGraph_edge2" class="edge"><title>proc~readspectral->grib_close_file</title> +<path fill="none" stroke="#000000" d="M96.1135,-25.4185C107.069,-23.6555 118.766,-21.7733 129.828,-19.9931"/> +<polygon fill="#000000" stroke="#000000" points="130.453,-23.4378 139.77,-18.3934 129.341,-16.5267 130.453,-23.4378"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Called by</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~readspectral~~CalledByGraph Pages: 1 --> +<svg id="procreadspectralCalledByGraph" width="207pt" height="32pt" + viewBox="0.00 0.00 207.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~readspectral~~CalledByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~readspectral~~CalledByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 203,-28 203,4 -4,4"/> +<!-- proc~readspectral --> +<g id="proc~~readspectral~~CalledByGraph_node1" class="node"><title>proc~readspectral</title> +<polygon fill="none" stroke="black" points="199,-24 103,-24 103,-0 199,-0 199,-24"/> +<text text-anchor="middle" x="151" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">READSPECTRAL</text> +</g> +<!-- program~calc_etadot --> +<g id="proc~~readspectral~~CalledByGraph_node2" class="node"><title>program~calc_etadot</title> +<g id="a_proc~~readspectral~~CalledByGraph_node2"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~readspectral --> +<g id="proc~~readspectral~~CalledByGraph_edge1" class="edge"><title>program~calc_etadot->proc~readspectral</title> +<path fill="none" stroke="#000000" d="M67.2887,-12C75.246,-12 83.9863,-12 92.7125,-12"/> +<polygon fill="#000000" stroke="#000000" points="92.902,-15.5001 102.902,-12 92.902,-8.5001 92.902,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/rfouftr.html b/Documentation/html/Documentation/Api/Fortran/proc/rfouftr.html new file mode 100644 index 0000000000000000000000000000000000000000..93382c7b11ed5c0ecb59bb0cf19eb7cce6304b5a --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/rfouftr.html @@ -0,0 +1,524 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>RFOUFTR – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>RFOUFTR + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 1.2% of total for procedures.">12 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/grphreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/grphreal.f90.html'>grphreal.f90</a></li> + + <li><a href='../module/grtoph.html'>GRTOPH</a></li> + + + <li class="active">RFOUFTR</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine RFOUFTR(CXM, TRIGS, IFAX, MNAUF, MAXL, ISIGN) + + + +</h2> + + + + + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-cxm%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXM</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-trigs"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>TRIGS</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ifax%7E3"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E4"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxl%7E4"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-isign"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>ISIGN</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Calls</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~rfouftr~~CallsGraph Pages: 1 --> +<svg id="procrfouftrCallsGraph" width="162pt" height="74pt" + viewBox="0.00 0.00 162.00 74.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~rfouftr~~CallsGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 70)"> +<title>proc~~rfouftr~~CallsGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-70 158,-70 158,4 -4,4"/> +<!-- proc~rfouftr --> +<g id="proc~~rfouftr~~CallsGraph_node1" class="node"><title>proc~rfouftr</title> +<polygon fill="none" stroke="black" points="64,-45 0,-45 0,-21 64,-21 64,-45"/> +<text text-anchor="middle" x="32" y="-30.6" font-family="Helvetica,sans-Serif" font-size="10.50">RFOUFTR</text> +</g> +<!-- wsave --> +<g id="proc~~rfouftr~~CallsGraph_node2" class="node"><title>wsave</title> +<polygon fill="#777777" stroke="#777777" points="154,-66 100,-66 100,-42 154,-42 154,-66"/> +<text text-anchor="middle" x="127" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">wsave</text> +</g> +<!-- proc~rfouftr->wsave --> +<g id="proc~~rfouftr~~CallsGraph_edge1" class="edge"><title>proc~rfouftr->wsave</title> +<path fill="none" stroke="#000000" d="M64.2264,-40.0511C72.4797,-41.9148 81.4552,-43.9415 89.9414,-45.8577"/> +<polygon fill="#000000" stroke="#000000" points="89.4434,-49.3333 99.9687,-48.122 90.9852,-42.5052 89.4434,-49.3333"/> +</g> +<!-- fft99 --> +<g id="proc~~rfouftr~~CallsGraph_node3" class="node"><title>fft99</title> +<polygon fill="#777777" stroke="#777777" points="154,-24 100,-24 100,-0 154,-0 154,-24"/> +<text text-anchor="middle" x="127" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">fft99</text> +</g> +<!-- proc~rfouftr->fft99 --> +<g id="proc~~rfouftr~~CallsGraph_edge2" class="edge"><title>proc~rfouftr->fft99</title> +<path fill="none" stroke="#000000" d="M64.2264,-25.9489C72.4797,-24.0852 81.4552,-22.0585 89.9414,-20.1423"/> +<polygon fill="#000000" stroke="#000000" points="90.9852,-23.4948 99.9687,-17.878 89.4434,-16.6667 90.9852,-23.4948"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/rfourtr.html b/Documentation/html/Documentation/Api/Fortran/proc/rfourtr.html new file mode 100644 index 0000000000000000000000000000000000000000..c2fccc9bac05c8207c7f62a5819a30a393460bf4 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/rfourtr.html @@ -0,0 +1,666 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>RFOURTR – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>RFOURTR + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 1.5% of total for procedures.">15 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/phgrreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/phgrreal.f90.html'>phgrreal.f90</a></li> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + + <li class="active">RFOURTR</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine RFOURTR(CXM, TRIGS, IFAX, MNAUF, MAXL, ISIGN) + + + +</h2> + + + + + + <div class="codehilite"><pre><span></span> BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS +</pre></div> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-cxm%7E4"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>CXM</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-trigs%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>TRIGS</strong>(2*MAXL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ifax%7E9"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E11"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxl%7E10"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-isign%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>ISIGN</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Calls</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~rfourtr~~CallsGraph Pages: 1 --> +<svg id="procrfourtrCallsGraph" width="162pt" height="32pt" + viewBox="0.00 0.00 162.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~rfourtr~~CallsGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~rfourtr~~CallsGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 158,-28 158,4 -4,4"/> +<!-- proc~rfourtr --> +<g id="proc~~rfourtr~~CallsGraph_node1" class="node"><title>proc~rfourtr</title> +<polygon fill="none" stroke="black" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">RFOURTR</text> +</g> +<!-- fft99 --> +<g id="proc~~rfourtr~~CallsGraph_node2" class="node"><title>fft99</title> +<polygon fill="#777777" stroke="#777777" points="154,-24 100,-24 100,-0 154,-0 154,-24"/> +<text text-anchor="middle" x="127" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">fft99</text> +</g> +<!-- proc~rfourtr->fft99 --> +<g id="proc~~rfourtr~~CallsGraph_edge1" class="edge"><title>proc~rfourtr->fft99</title> +<path fill="none" stroke="#000000" d="M64.2264,-12C72.4797,-12 81.4552,-12 89.9414,-12"/> +<polygon fill="#000000" stroke="#000000" points="89.9688,-15.5001 99.9687,-12 89.9687,-8.5001 89.9688,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Called by</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~rfourtr~~CalledByGraph Pages: 1 --> +<svg id="procrfourtrCalledByGraph" width="375pt" height="116pt" + viewBox="0.00 0.00 375.00 116.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~rfourtr~~CalledByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 112)"> +<title>proc~~rfourtr~~CalledByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-112 371,-112 371,4 -4,4"/> +<!-- proc~rfourtr --> +<g id="proc~~rfourtr~~CalledByGraph_node1" class="node"><title>proc~rfourtr</title> +<polygon fill="none" stroke="black" points="367,-66 303,-66 303,-42 367,-42 367,-66"/> +<text text-anchor="middle" x="335" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50">RFOURTR</text> +</g> +<!-- proc~phsymcut --> +<g id="proc~~rfourtr~~CalledByGraph_node2" class="node"><title>proc~phsymcut</title> +<g id="a_proc~~rfourtr~~CalledByGraph_node2"><a xlink:href=".././proc/phsymcut.html" xlink:title="PHSYMCUT"> +<polygon fill="#d9534f" stroke="#d9534f" points="267,-108 196,-108 196,-84 267,-84 267,-108"/> +<text text-anchor="middle" x="231.5" y="-93.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHSYMCUT</text> +</a> +</g> +</g> +<!-- proc~phsymcut->proc~rfourtr --> +<g id="proc~~rfourtr~~CalledByGraph_edge1" class="edge"><title>proc~phsymcut->proc~rfourtr</title> +<path fill="none" stroke="#000000" d="M261.586,-83.9645C272.097,-79.6149 284.135,-74.6337 295.339,-69.9978"/> +<polygon fill="#000000" stroke="#000000" points="297.008,-73.0949 304.91,-66.0373 294.331,-66.6268 297.008,-73.0949"/> +</g> +<!-- proc~phgpns --> +<g id="proc~~rfourtr~~CalledByGraph_node3" class="node"><title>proc~phgpns</title> +<g id="a_proc~~rfourtr~~CalledByGraph_node3"><a xlink:href=".././proc/phgpns.html" xlink:title="PHGPNS"> +<polygon fill="#d9534f" stroke="#d9534f" points="259.5,-66 203.5,-66 203.5,-42 259.5,-42 259.5,-66"/> +<text text-anchor="middle" x="231.5" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGPNS</text> +</a> +</g> +</g> +<!-- proc~phgpns->proc~rfourtr --> +<g id="proc~~rfourtr~~CalledByGraph_edge2" class="edge"><title>proc~phgpns->proc~rfourtr</title> +<path fill="none" stroke="#000000" d="M259.7,-54C269.757,-54 281.4,-54 292.441,-54"/> +<polygon fill="#000000" stroke="#000000" points="292.773,-57.5001 302.773,-54 292.773,-50.5001 292.773,-57.5001"/> +</g> +<!-- proc~phgracut --> +<g id="proc~~rfourtr~~CalledByGraph_node4" class="node"><title>proc~phgracut</title> +<g id="a_proc~~rfourtr~~CalledByGraph_node4"><a xlink:href=".././proc/phgracut.html" xlink:title="PHGRACUT"> +<polygon fill="#d9534f" stroke="#d9534f" points="267,-24 196,-24 196,-0 267,-0 267,-24"/> +<text text-anchor="middle" x="231.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGRACUT</text> +</a> +</g> +</g> +<!-- proc~phgracut->proc~rfourtr --> +<g id="proc~~rfourtr~~CalledByGraph_edge3" class="edge"><title>proc~phgracut->proc~rfourtr</title> +<path fill="none" stroke="#000000" d="M261.586,-24.0355C272.097,-28.3851 284.135,-33.3663 295.339,-38.0022"/> +<polygon fill="#000000" stroke="#000000" points="294.331,-41.3732 304.91,-41.9627 297.008,-34.9051 294.331,-41.3732"/> +</g> +<!-- proc~phgcut --> +<g id="proc~~rfourtr~~CalledByGraph_node5" class="node"><title>proc~phgcut</title> +<g id="a_proc~~rfourtr~~CalledByGraph_node5"><a xlink:href=".././proc/phgcut.html" xlink:title="PHGCUT"> +<polygon fill="#d9534f" stroke="#d9534f" points="160,-87 103,-87 103,-63 160,-63 160,-87"/> +<text text-anchor="middle" x="131.5" y="-72.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGCUT</text> +</a> +</g> +</g> +<!-- proc~phgcut->proc~phsymcut --> +<g id="proc~~rfourtr~~CalledByGraph_edge4" class="edge"><title>proc~phgcut->proc~phsymcut</title> +<path fill="none" stroke="#000000" d="M160.059,-80.9056C168.121,-82.6331 177.148,-84.5674 185.979,-86.4598"/> +<polygon fill="#000000" stroke="#000000" points="185.293,-89.8922 195.804,-88.5652 186.76,-83.0476 185.293,-89.8922"/> +</g> +<!-- proc~phgcut->proc~phgpns --> +<g id="proc~~rfourtr~~CalledByGraph_edge5" class="edge"><title>proc~phgcut->proc~phgpns</title> +<path fill="none" stroke="#000000" d="M160.059,-69.0944C170.462,-66.8653 182.471,-64.292 193.593,-61.9087"/> +<polygon fill="#000000" stroke="#000000" points="194.441,-65.3064 203.486,-59.7887 192.975,-58.4618 194.441,-65.3064"/> +</g> +<!-- program~calc_etadot --> +<g id="proc~~rfourtr~~CalledByGraph_node6" class="node"><title>program~calc_etadot</title> +<g id="a_proc~~rfourtr~~CalledByGraph_node6"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-87 0,-87 0,-63 67,-63 67,-87"/> +<text text-anchor="middle" x="33.5" y="-72.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~phgcut --> +<g id="proc~~rfourtr~~CalledByGraph_edge6" class="edge"><title>program~calc_etadot->proc~phgcut</title> +<path fill="none" stroke="#000000" d="M67.0012,-75C75.2769,-75 84.2412,-75 92.7541,-75"/> +<polygon fill="#000000" stroke="#000000" points="92.8375,-78.5001 102.837,-75 92.8374,-71.5001 92.8375,-78.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/spfilter.html b/Documentation/html/Documentation/Api/Fortran/proc/spfilter.html new file mode 100644 index 0000000000000000000000000000000000000000..6b5268fe531537490f956313c8c08ff0238a657d --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/spfilter.html @@ -0,0 +1,481 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>SPFILTER – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>SPFILTER + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 2.3% of total for procedures.">23 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/phgrreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/phgrreal.f90.html'>phgrreal.f90</a></li> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + + <li class="active">SPFILTER</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine SPFILTER(FELDMN, MM, MMAX) + + + +</h2> + + + + + + <p>Spectral Filter of Sardeshmukh and Hoskins (1984, MWR)</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-feldmn"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELDMN</strong>(0:(MM+1)*(MM+2)-1)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mm"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MM</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mmax%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MMAX</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Calls</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~spfilter~~CallsGraph Pages: 1 --> +<svg id="procspfilterCallsGraph" width="161pt" height="74pt" + viewBox="0.00 0.00 161.00 74.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~spfilter~~CallsGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 70)"> +<title>proc~~spfilter~~CallsGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-70 157,-70 157,4 -4,4"/> +<!-- proc~spfilter --> +<g id="proc~~spfilter~~CallsGraph_node1" class="node"><title>proc~spfilter</title> +<polygon fill="none" stroke="black" points="63,-45 0,-45 0,-21 63,-21 63,-45"/> +<text text-anchor="middle" x="31.5" y="-30.6" font-family="Helvetica,sans-Serif" font-size="10.50">SPFILTER</text> +</g> +<!-- float --> +<g id="proc~~spfilter~~CallsGraph_node2" class="node"><title>float</title> +<polygon fill="#777777" stroke="#777777" points="153,-66 99,-66 99,-42 153,-42 153,-66"/> +<text text-anchor="middle" x="126" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">float</text> +</g> +<!-- proc~spfilter->float --> +<g id="proc~~spfilter~~CallsGraph_edge1" class="edge"><title>proc~spfilter->float</title> +<path fill="none" stroke="#000000" d="M63.0443,-39.9344C71.3654,-41.8235 80.4561,-43.8873 89.0475,-45.8378"/> +<polygon fill="#000000" stroke="#000000" points="88.3007,-49.2573 98.8275,-48.0581 89.8505,-42.431 88.3007,-49.2573"/> +</g> +<!-- alog --> +<g id="proc~~spfilter~~CallsGraph_node3" class="node"><title>alog</title> +<polygon fill="#777777" stroke="#777777" points="153,-24 99,-24 99,-0 153,-0 153,-24"/> +<text text-anchor="middle" x="126" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">alog</text> +</g> +<!-- proc~spfilter->alog --> +<g id="proc~~spfilter~~CallsGraph_edge2" class="edge"><title>proc~spfilter->alog</title> +<path fill="none" stroke="#000000" d="M63.0443,-26.0656C71.3654,-24.1765 80.4561,-22.1127 89.0475,-20.1622"/> +<polygon fill="#000000" stroke="#000000" points="89.8505,-23.569 98.8275,-17.9419 88.3007,-16.7427 89.8505,-23.569"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/statis.html b/Documentation/html/Documentation/Api/Fortran/proc/statis.html new file mode 100644 index 0000000000000000000000000000000000000000..de3c73795e6346a989d39e3c2b597d2467f2bc5d --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/statis.html @@ -0,0 +1,532 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>STATIS – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>STATIS + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 2.2% of total for procedures.">22 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/calc_etadot.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/calc_etadot.f90.html'>calc_etadot.f90</a></li> + + + <li class="active">STATIS</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +subroutine STATIS(NI, NJ, NK, PHI, RMS, MW, SIG) + + + +</h2> + + + + + + <p>calculate mean, rms, stdev</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-ni%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NI</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-nj%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NJ</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-nk%7E2"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NK</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-phi"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>PHI</strong>(NI,NJ,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-rms"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>RMS</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mw"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MW</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-sig"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>SIG</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Called by</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~statis~~CalledByGraph Pages: 1 --> +<svg id="procstatisCalledByGraph" width="165pt" height="32pt" + viewBox="0.00 0.00 165.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~statis~~CalledByGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~statis~~CalledByGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 161,-28 161,4 -4,4"/> +<!-- proc~statis --> +<g id="proc~~statis~~CalledByGraph_node1" class="node"><title>proc~statis</title> +<polygon fill="none" stroke="black" points="157,-24 103,-24 103,-0 157,-0 157,-24"/> +<text text-anchor="middle" x="130" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">STATIS</text> +</g> +<!-- program~calc_etadot --> +<g id="proc~~statis~~CalledByGraph_node2" class="node"><title>program~calc_etadot</title> +<g id="a_proc~~statis~~CalledByGraph_node2"><a xlink:href=".././program/calc_etadot.html" xlink:title="calc_etadot"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~statis --> +<g id="proc~~statis~~CalledByGraph_edge1" class="edge"><title>program~calc_etadot->proc~statis</title> +<path fill="none" stroke="#000000" d="M67.0215,-12C75.372,-12 84.4044,-12 92.9228,-12"/> +<polygon fill="#000000" stroke="#000000" points="92.9782,-15.5001 102.978,-12 92.9781,-8.5001 92.9782,-15.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/vdtouv.html b/Documentation/html/Documentation/Api/Fortran/proc/vdtouv.html new file mode 100644 index 0000000000000000000000000000000000000000..b559705d702f00c256e1524d658ab863ce5a4c62 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/vdtouv.html @@ -0,0 +1,609 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>VDTOUV – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>VDTOUV + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 2.1% of total for procedures.">21 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/ftrafo.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/ftrafo.f90.html'>ftrafo.f90</a></li> + + <li><a href='../module/ftrafo.html'>FTRAFO</a></li> + + + <li class="active">VDTOUV</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine VDTOUV(XMN, XLAM, XPHI, GWSAVE, IFAX, P, MLAT, MNAUF, NI, NJ, NK) + + + +</h2> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Uses</h3> + </div> + <ul class="list-group"> + + <li class="list-group-item"> + <ul class="list-inline"> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + </ul> + </li> + + + + <li class="list-group-item"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~vdtouv~~UsesGraph Pages: 1 --> +<svg id="procvdtouvUsesGraph" width="158pt" height="32pt" + viewBox="0.00 0.00 158.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~vdtouv~~UsesGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~vdtouv~~UsesGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 154,-28 154,4 -4,4"/> +<!-- proc~vdtouv --> +<g id="proc~~vdtouv~~UsesGraph_node1" class="node"><title>proc~vdtouv</title> +<polygon fill="none" stroke="black" points="150,-24 94,-24 94,-0 150,-0 150,-24"/> +<text text-anchor="middle" x="122" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">VDTOUV</text> +</g> +<!-- module~phtogr --> +<g id="proc~~vdtouv~~UsesGraph_node2" class="node"><title>module~phtogr</title> +<g id="a_proc~~vdtouv~~UsesGraph_node2"><a xlink:href=".././module/phtogr.html" xlink:title="PHTOGR"> +<polygon fill="#337ab7" stroke="#337ab7" points="58,-24 0,-24 0,-0 58,-0 58,-24"/> +<text text-anchor="middle" x="29" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHTOGR</text> +</a> +</g> +</g> +<!-- proc~vdtouv->module~phtogr --> +<g id="proc~~vdtouv~~UsesGraph_edge1" class="edge"><title>proc~vdtouv->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M93.697,-12C85.732,-12 76.8763,-12 68.3625,-12"/> +<polygon fill="#000000" stroke="#000000" points="68.23,-8.5001 58.23,-12 68.23,-15.5001 68.23,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="490pt" height="32pt" + viewBox="0.00 0.00 489.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 485.5,-28 485.5,4 -4,4"/> +<!-- Module --> +<g id="node1" class="node"><title>Module</title> +<polygon fill="#337ab7" stroke="#337ab7" points="54,-24 0,-24 0,-0 54,-0 54,-24"/> +<text text-anchor="middle" x="27" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Module</text> +</g> +<!-- Submodule --> +<g id="node2" class="node"><title>Submodule</title> +<polygon fill="#5bc0de" stroke="#5bc0de" points="139.5,-24 72.5,-24 72.5,-0 139.5,-0 139.5,-24"/> +<text text-anchor="middle" x="106" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Submodule</text> +</g> +<!-- Subroutine --> +<g id="node3" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="222,-24 158,-24 158,-0 222,-0 222,-24"/> +<text text-anchor="middle" x="190" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node4" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="294,-24 240,-24 240,-0 294,-0 294,-24"/> +<text text-anchor="middle" x="267" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="366,-24 312,-24 312,-0 366,-0 366,-24"/> +<text text-anchor="middle" x="339" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="481.5,-24 384.5,-24 384.5,-0 481.5,-0 481.5,-24"/> +<text text-anchor="middle" x="433" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a submodule to the (sub)module which it is + descended from. Dashed arrows point from a module or program unit to + modules which it uses. + </p> + </div></div></div></div> + </li> + + </ul> + </div> + + + + + <p>Berechnung der scale winds aus Vorticity und Divergenz + uebergibt man in XMN die Divergenz, so wird der divergente Anteil des + Windes (XPHI=Ud,XPHI=Vd) zurueckgegeben, uebergibt man die Vorticity, so + erhaelt man den rotationellen Wind (XLAM=Vrot,XPHI=-Urot). + Summiert man beide, erhaelt man den gesamten Scale wind</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-xmn"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-xlam"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XLAM</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-xphi"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XPHI</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-gwsave"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>GWSAVE</strong>(8*NJ+15,NJ/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ifax%7E10"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10,NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-p"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>P</strong>(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlat%7E6"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E13"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ni%7E3"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NI</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-nj%7E3"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NJ</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-nk%7E3"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NK</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/vduvsub.html b/Documentation/html/Documentation/Api/Fortran/proc/vduvsub.html new file mode 100644 index 0000000000000000000000000000000000000000..fb079b6afb641e6a5b293ef9293fc1842f28cb96 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/vduvsub.html @@ -0,0 +1,633 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>VDUVSUB – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>VDUVSUB + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 8.4% of total for procedures.">86 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/ftrafo.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/ftrafo.f90.html'>ftrafo.f90</a></li> + + <li><a href='../module/ftrafo.html'>FTRAFO</a></li> + + + <li class="active">VDUVSUB</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine VDUVSUB(J, XMN, XLAM, XPHI, GWSAVE, IFAX, P, GGIND, MLAT, MNAUF, NI, NJ, NK) + + + +</h2> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Uses</h3> + </div> + <ul class="list-group"> + + <li class="list-group-item"> + <ul class="list-inline"> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + </ul> + </li> + + + + <li class="list-group-item"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~vduvsub~~UsesGraph Pages: 1 --> +<svg id="procvduvsubUsesGraph" width="164pt" height="32pt" + viewBox="0.00 0.00 164.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~vduvsub~~UsesGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~vduvsub~~UsesGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 160,-28 160,4 -4,4"/> +<!-- proc~vduvsub --> +<g id="proc~~vduvsub~~UsesGraph_node1" class="node"><title>proc~vduvsub</title> +<polygon fill="none" stroke="black" points="156,-24 94,-24 94,-0 156,-0 156,-24"/> +<text text-anchor="middle" x="125" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">VDUVSUB</text> +</g> +<!-- module~phtogr --> +<g id="proc~~vduvsub~~UsesGraph_node2" class="node"><title>module~phtogr</title> +<g id="a_proc~~vduvsub~~UsesGraph_node2"><a xlink:href=".././module/phtogr.html" xlink:title="PHTOGR"> +<polygon fill="#337ab7" stroke="#337ab7" points="58,-24 0,-24 0,-0 58,-0 58,-24"/> +<text text-anchor="middle" x="29" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHTOGR</text> +</a> +</g> +</g> +<!-- proc~vduvsub->module~phtogr --> +<g id="proc~~vduvsub~~UsesGraph_edge1" class="edge"><title>proc~vduvsub->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M93.9994,-12C85.8249,-12 76.8574,-12 68.2901,-12"/> +<polygon fill="#000000" stroke="#000000" points="68.1186,-8.5001 58.1185,-12 68.1185,-15.5001 68.1186,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="490pt" height="32pt" + viewBox="0.00 0.00 489.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 485.5,-28 485.5,4 -4,4"/> +<!-- Module --> +<g id="node1" class="node"><title>Module</title> +<polygon fill="#337ab7" stroke="#337ab7" points="54,-24 0,-24 0,-0 54,-0 54,-24"/> +<text text-anchor="middle" x="27" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Module</text> +</g> +<!-- Submodule --> +<g id="node2" class="node"><title>Submodule</title> +<polygon fill="#5bc0de" stroke="#5bc0de" points="139.5,-24 72.5,-24 72.5,-0 139.5,-0 139.5,-24"/> +<text text-anchor="middle" x="106" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Submodule</text> +</g> +<!-- Subroutine --> +<g id="node3" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="222,-24 158,-24 158,-0 222,-0 222,-24"/> +<text text-anchor="middle" x="190" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node4" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="294,-24 240,-24 240,-0 294,-0 294,-24"/> +<text text-anchor="middle" x="267" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="366,-24 312,-24 312,-0 366,-0 366,-24"/> +<text text-anchor="middle" x="339" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="481.5,-24 384.5,-24 384.5,-0 481.5,-0 481.5,-24"/> +<text text-anchor="middle" x="433" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a submodule to the (sub)module which it is + descended from. Dashed arrows point from a module or program unit to + modules which it uses. + </p> + </div></div></div></div> + </li> + + </ul> + </div> + + + + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-j%7E3"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>J</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-xmn%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XMN</strong>(0:(MNAUF+1)*(MNAUF+2)-1,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-xlam%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XLAM</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-xphi%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>XPHI</strong>(NI,NK)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-gwsave%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>GWSAVE</strong>(8*NJ+15,NJ/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ifax%7E11"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10,NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-p%7E2"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>P</strong>(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ggind"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>GGIND</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlat%7E7"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLAT</strong>(NJ)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E14"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ni%7E4"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NI</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-nj%7E4"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NJ</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-nk%7E4"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>NK</strong></td><td></td> + +</tr> + +</tbody> +</table> + + + + + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/proc/writelatlon.html b/Documentation/html/Documentation/Api/Fortran/proc/writelatlon.html new file mode 100644 index 0000000000000000000000000000000000000000..eef3192e6d102618352cf4e0039db2ee309a3c1d --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/proc/writelatlon.html @@ -0,0 +1,688 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>WRITELATLON – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>WRITELATLON + <small>Subroutine</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 4.8% of total for procedures.">49 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/rwgrib2.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/rwgrib2.f90.html'>rwgrib2.f90</a></li> + + <li><a href='../module/rwgrib2.html'>RWGRIB2</a></li> + + + <li class="active">WRITELATLON</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + +</div> + + </div> + + <div class="col-md-9" id='text'> + <h2> +public subroutine WRITELATLON(IUNIT, igrib, ogrib, FELD, MAXL, MAXB, MLEVEL, MLEVELIST, MSTRIDE, MPAR) + + + +</h2> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Uses</h3> + </div> + <ul class="list-group"> + + <li class="list-group-item"> + <ul class="list-inline"> + + <li>GRIB_API</li> + + </ul> + </li> + + + + <li class="list-group-item"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~writelatlon~~UsesGraph Pages: 1 --> +<svg id="procwritelatlonUsesGraph" width="193pt" height="32pt" + viewBox="0.00 0.00 193.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~writelatlon~~UsesGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>proc~~writelatlon~~UsesGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 189,-28 189,4 -4,4"/> +<!-- proc~writelatlon --> +<g id="proc~~writelatlon~~UsesGraph_node1" class="node"><title>proc~writelatlon</title> +<polygon fill="none" stroke="black" points="185,-24 97,-24 97,-0 185,-0 185,-24"/> +<text text-anchor="middle" x="141" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">WRITELATLON</text> +</g> +<!-- GRIB_API --> +<g id="proc~~writelatlon~~UsesGraph_node2" class="node"><title>GRIB_API</title> +<polygon fill="#337ab7" stroke="#337ab7" points="61,-24 -3.55271e-15,-24 -3.55271e-15,-0 61,-0 61,-24"/> +<text text-anchor="middle" x="30.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GRIB_API</text> +</g> +<!-- proc~writelatlon->GRIB_API --> +<g id="proc~~writelatlon~~UsesGraph_edge1" class="edge"><title>proc~writelatlon->GRIB_API</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M96.8062,-12C88.4127,-12 79.6505,-12 71.37,-12"/> +<polygon fill="#000000" stroke="#000000" points="71.2031,-8.5001 61.203,-12 71.203,-15.5001 71.2031,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="490pt" height="32pt" + viewBox="0.00 0.00 489.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 485.5,-28 485.5,4 -4,4"/> +<!-- Module --> +<g id="node1" class="node"><title>Module</title> +<polygon fill="#337ab7" stroke="#337ab7" points="54,-24 0,-24 0,-0 54,-0 54,-24"/> +<text text-anchor="middle" x="27" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Module</text> +</g> +<!-- Submodule --> +<g id="node2" class="node"><title>Submodule</title> +<polygon fill="#5bc0de" stroke="#5bc0de" points="139.5,-24 72.5,-24 72.5,-0 139.5,-0 139.5,-24"/> +<text text-anchor="middle" x="106" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Submodule</text> +</g> +<!-- Subroutine --> +<g id="node3" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="222,-24 158,-24 158,-0 222,-0 222,-24"/> +<text text-anchor="middle" x="190" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node4" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="294,-24 240,-24 240,-0 294,-0 294,-24"/> +<text text-anchor="middle" x="267" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="366,-24 312,-24 312,-0 366,-0 366,-24"/> +<text text-anchor="middle" x="339" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="481.5,-24 384.5,-24 384.5,-0 481.5,-0 481.5,-24"/> +<text text-anchor="middle" x="433" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a submodule to the (sub)module which it is + descended from. Dashed arrows point from a module or program unit to + modules which it uses. + </p> + </div></div></div></div> + </li> + + </ul> + </div> + + + + + <p>write a field on lat-lon grid to GRIB file</p> + + + <h3>Arguments</h3> + + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> +<th>Intent</th><th>Optional</th> +<th>Attributes</th><th></th><th>Name</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-iunit"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>IUNIT</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-igrib"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>igrib</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ogrib"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>ogrib</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-feld"></span>real</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>FELD</strong>(MAXL,MAXB,MLEVEL)</td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxl"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxb"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlevel"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlevelist"></span>character(len=*)</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MLEVELIST</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mstride"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MSTRIDE</strong></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mpar"></span>integer</td> + <td></td> + <td></td> + + <td></td><td>::</td> + <td><strong>MPAR</strong>(MSTRIDE)</td><td></td> + +</tr> + +</tbody> +</table> + + + + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Calls</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: proc~~writelatlon~~CallsGraph Pages: 1 --> +<svg id="procwritelatlonCallsGraph" width="191pt" height="74pt" + viewBox="0.00 0.00 191.00 74.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="proc~~writelatlon~~CallsGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 70)"> +<title>proc~~writelatlon~~CallsGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-70 187,-70 187,4 -4,4"/> +<!-- proc~writelatlon --> +<g id="proc~~writelatlon~~CallsGraph_node1" class="node"><title>proc~writelatlon</title> +<polygon fill="none" stroke="black" points="88,-45 7.10543e-15,-45 7.10543e-15,-21 88,-21 88,-45"/> +<text text-anchor="middle" x="44" y="-30.6" font-family="Helvetica,sans-Serif" font-size="10.50">WRITELATLON</text> +</g> +<!-- grib_write --> +<g id="proc~~writelatlon~~CallsGraph_node2" class="node"><title>grib_write</title> +<polygon fill="#777777" stroke="#777777" points="183,-66 124,-66 124,-42 183,-42 183,-66"/> +<text text-anchor="middle" x="153.5" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grib_write</text> +</g> +<!-- proc~writelatlon->grib_write --> +<g id="proc~~writelatlon~~CallsGraph_edge1" class="edge"><title>proc~writelatlon->grib_write</title> +<path fill="none" stroke="#000000" d="M88.105,-41.4205C96.6597,-43.0917 105.589,-44.836 113.979,-46.475"/> +<polygon fill="#000000" stroke="#000000" points="113.398,-49.9276 123.884,-48.4099 114.74,-43.0575 113.398,-49.9276"/> +</g> +<!-- grib_set --> +<g id="proc~~writelatlon~~CallsGraph_node3" class="node"><title>grib_set</title> +<polygon fill="#777777" stroke="#777777" points="180.5,-24 126.5,-24 126.5,-0 180.5,-0 180.5,-24"/> +<text text-anchor="middle" x="153.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grib_set</text> +</g> +<!-- proc~writelatlon->grib_set --> +<g id="proc~~writelatlon~~CallsGraph_edge2" class="edge"><title>proc~writelatlon->grib_set</title> +<path fill="none" stroke="#000000" d="M88.105,-24.5795C97.5267,-22.739 107.403,-20.8096 116.513,-19.0301"/> +<polygon fill="#000000" stroke="#000000" points="117.263,-22.4497 126.407,-17.0973 115.921,-15.5796 117.263,-22.4497"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + + + + + + + + +<em>None</em> + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/program/calc_etadot.html b/Documentation/html/Documentation/Api/Fortran/program/calc_etadot.html new file mode 100644 index 0000000000000000000000000000000000000000..632b4b3833431277b510045cef58b940a93fb9fc --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/program/calc_etadot.html @@ -0,0 +1,2928 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>calc_etadot – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>calc_etadot + <small>Program</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title="100.0% of total for programs.">381 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/calc_etadot.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + <li><a href='../sourcefile/calc_etadot.f90.html'>calc_etadot.f90</a></li> + + + <li class="active">calc_etadot</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#vars-0">Variables</a></h3></div> + <div id="vars-0" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lnps">LNPS</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-z%7E12">Z</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-t">T</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-uv">UV</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-uv2">UV2</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-qa">QA</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-om">OM</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-omr">OMR</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-div%7E3">DIV</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-eta%7E2">ETA</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-etar">ETAR</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-dpsdl%7E3">DPSDL</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-dpsdm%7E3">DPSDM</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ps%7E3">PS</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-dpsdt">DPSDT</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-surf">SURF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-flux">FLUX</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-orolsm">OROLSM</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-wsave%7E8">WSAVE</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-h%7E3">H</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-sinl">SINL</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-cosl">COSL</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-wsave2">WSAVE2</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-breite%7E3">BREITE</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-gbreite">GBREITE</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ak">AK</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-bk">BK</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-pv">pv</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-x1%7E2">X1</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-x2%7E2">X2</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-rms%7E2">RMS</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mw%7E2">MW</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-sig%7E2">SIG</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lam">LAM</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-cua">CUA</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-cva">CVA</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-p%7E5">P</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-pp">PP</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-p2">P2</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-xmn%7E5">XMN</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-hilfuv">HILFUV</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lnpmn">LNPMN</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lnpmn2">LNPMN2</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lnpmn3">LNPMN3</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-weight">WEIGHT</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ugvg">UGVG</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-dg">DG</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-etag">ETAG</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-gwsave%7E5">GWSAVE</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-psg">PSG</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-hilf">HILF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mlat%7E11">MLAT</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mpsurf">MPSURF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mpflux">MPFLUX</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mporo">MPORO</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mpar%7E2">MPAR</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-gifax">GIFAX</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-pi">PI</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-cosb">COSB</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-dak">DAK</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-dbk">DBK</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-p00">P00</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-urlar8">URLAR8</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-jmin1">JMIN1</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lllar8">LLLAR8</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-maxbmin1">MAXBMIN1</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-pir8">PIR8</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-dcosb">DCOSB</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-i">I</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-j%7E4">J</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-k%7E2">K</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-l%7E2">L</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ierr">IERR</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-m">M</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ltest">LTEST</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mk">MK</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ngi%7E2">NGI</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ngj%7E2">NGJ</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mflux">MFLUX</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-msurf">MSURF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-moro">MORO</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lunit">LUNIT</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lunit2">LUNIT2</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-maxl%7E11">MAXL</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-maxb%7E10">MAXB</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mlevel%7E9">MLEVEL</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-levout">LEVOUT</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-levmin">LEVMIN</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-levmax">LEVMAX</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-momega">MOMEGA</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-momegadiff">MOMEGADIFF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mgauss">MGAUSS</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-msmooth">MSMOOTH</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mnauf%7E17">MNAUF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-meta">META</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-metadiff">METADIFF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mdpdeta">MDPDETA</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-metapar">METAPAR</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-rlo0">RLO0</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-rlo1">RLO1</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-rla0">RLA0</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-rla1">RLA1</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mlevelist%7E2">MLEVELIST</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mauf%7E6">MAUF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-manf%7E5">MANF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ifax%7E14">IFAX</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-igrib">IGRIB</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-iret">iret</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ogrib%7E2">ogrib</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-filename">FILENAME</a> + + </div> + </div> +</div> + + + + + + + + + + + + + + + + + + + + + +</div> + + </div> + + <div class="col-md-9" id='text'> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Uses</h3> + </div> + <ul class="list-group"> + + <li class="list-group-item"> + <ul class="list-inline"> + + <li><a href='../module/phtogr.html'>PHTOGR</a></li> + + <li><a href='../module/grtoph.html'>GRTOPH</a></li> + + <li><a href='../module/ftrafo.html'>FTRAFO</a></li> + + <li><a href='../module/rwgrib2.html'>RWGRIB2</a></li> + + <li>GRIB_API</li> + + </ul> + </li> + + + + <li class="list-group-item"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: program~~calc_etadot~~UsesGraph Pages: 1 --> +<svg id="programcalc_etadotUsesGraph" width="266pt" height="174pt" + viewBox="0.00 0.00 266.00 173.78" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="program~~calc_etadot~~UsesGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 169.779)"> +<title>program~~calc_etadot~~UsesGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-169.779 262,-169.779 262,4 -4,4"/> +<!-- program~calc_etadot --> +<g id="program~~calc_etadot~~UsesGraph_node1" class="node"><title>program~calc_etadot</title> +<polygon fill="none" stroke="black" points="258,-108 191,-108 191,-84 258,-84 258,-108"/> +<text text-anchor="middle" x="224.5" y="-93.6" font-family="Helvetica,sans-Serif" font-size="10.50">calc_etadot</text> +</g> +<!-- module~phtogr --> +<g id="program~~calc_etadot~~UsesGraph_node2" class="node"><title>module~phtogr</title> +<g id="a_program~~calc_etadot~~UsesGraph_node2"><a xlink:href=".././module/phtogr.html" xlink:title="PHTOGR"> +<polygon fill="#337ab7" stroke="#337ab7" points="58,-128 0,-128 0,-104 58,-104 58,-128"/> +<text text-anchor="middle" x="29" y="-113.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHTOGR</text> +</a> +</g> +</g> +<!-- program~calc_etadot->module~phtogr --> +<g id="program~~calc_etadot~~UsesGraph_edge5" class="edge"><title>program~calc_etadot->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M214.98,-108.107C203.425,-123.353 181.193,-148.787 155,-159 129.741,-168.849 119.934,-166.903 94,-159 78.1322,-154.164 62.6299,-143.934 50.8575,-134.666"/> +<polygon fill="#000000" stroke="#000000" points="52.9338,-131.841 42.9927,-128.177 48.4792,-137.241 52.9338,-131.841"/> +</g> +<!-- module~rwgrib2 --> +<g id="program~~calc_etadot~~UsesGraph_node3" class="node"><title>module~rwgrib2</title> +<g id="a_program~~calc_etadot~~UsesGraph_node3"><a xlink:href=".././module/rwgrib2.html" xlink:title="RWGRIB2"> +<polygon fill="#337ab7" stroke="#337ab7" points="155,-150 94,-150 94,-126 155,-126 155,-150"/> +<text text-anchor="middle" x="124.5" y="-135.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">RWGRIB2</text> +</a> +</g> +</g> +<!-- program~calc_etadot->module~rwgrib2 --> +<g id="program~~calc_etadot~~UsesGraph_edge2" class="edge"><title>program~calc_etadot->module~rwgrib2</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M195.417,-108.036C185.268,-112.385 173.645,-117.366 162.828,-122.002"/> +<polygon fill="#000000" stroke="#000000" points="161.4,-118.806 153.587,-125.963 164.157,-125.24 161.4,-118.806"/> +</g> +<!-- module~ftrafo --> +<g id="program~~calc_etadot~~UsesGraph_node4" class="node"><title>module~ftrafo</title> +<g id="a_program~~calc_etadot~~UsesGraph_node4"><a xlink:href=".././module/ftrafo.html" xlink:title="FTRAFO"> +<polygon fill="#337ab7" stroke="#337ab7" points="152,-108 97,-108 97,-84 152,-84 152,-108"/> +<text text-anchor="middle" x="124.5" y="-93.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">FTRAFO</text> +</a> +</g> +</g> +<!-- program~calc_etadot->module~ftrafo --> +<g id="program~~calc_etadot~~UsesGraph_edge4" class="edge"><title>program~calc_etadot->module~ftrafo</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M190.867,-96C181.725,-96 171.723,-96 162.353,-96"/> +<polygon fill="#000000" stroke="#000000" points="162.123,-92.5001 152.123,-96 162.123,-99.5001 162.123,-92.5001"/> +</g> +<!-- module~grtoph --> +<g id="program~~calc_etadot~~UsesGraph_node5" class="node"><title>module~grtoph</title> +<g id="a_program~~calc_etadot~~UsesGraph_node5"><a xlink:href=".././module/grtoph.html" xlink:title="GRTOPH"> +<polygon fill="#337ab7" stroke="#337ab7" points="153.5,-66 95.5,-66 95.5,-42 153.5,-42 153.5,-66"/> +<text text-anchor="middle" x="124.5" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GRTOPH</text> +</a> +</g> +</g> +<!-- program~calc_etadot->module~grtoph --> +<g id="program~~calc_etadot~~UsesGraph_edge3" class="edge"><title>program~calc_etadot->module~grtoph</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M195.417,-83.9645C185.268,-79.6149 173.645,-74.6337 162.828,-69.9978"/> +<polygon fill="#000000" stroke="#000000" points="164.157,-66.7595 153.587,-66.0373 161.4,-73.1935 164.157,-66.7595"/> +</g> +<!-- GRIB_API --> +<g id="program~~calc_etadot~~UsesGraph_node6" class="node"><title>GRIB_API</title> +<polygon fill="#337ab7" stroke="#337ab7" points="155,-24 94,-24 94,-0 155,-0 155,-24"/> +<text text-anchor="middle" x="124.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GRIB_API</text> +</g> +<!-- program~calc_etadot->GRIB_API --> +<g id="program~~calc_etadot~~UsesGraph_edge1" class="edge"><title>program~calc_etadot->GRIB_API</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M211.294,-83.9032C197.908,-70.8474 175.585,-49.6848 155,-33 153.84,-32.0599 152.641,-31.1134 151.421,-30.1699"/> +<polygon fill="#000000" stroke="#000000" points="153.352,-27.2436 143.239,-24.0844 149.174,-32.8606 153.352,-27.2436"/> +</g> +<!-- module~grtoph->module~phtogr --> +<g id="program~~calc_etadot~~UsesGraph_edge6" class="edge"><title>module~grtoph->module~phtogr</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M105.027,-66.2492C91.2359,-75.3944 72.1852,-88.0269 56.732,-98.274"/> +<polygon fill="#000000" stroke="#000000" points="54.516,-95.5438 48.1161,-103.987 58.3845,-101.378 54.516,-95.5438"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="490pt" height="32pt" + viewBox="0.00 0.00 489.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 485.5,-28 485.5,4 -4,4"/> +<!-- Module --> +<g id="node1" class="node"><title>Module</title> +<polygon fill="#337ab7" stroke="#337ab7" points="54,-24 0,-24 0,-0 54,-0 54,-24"/> +<text text-anchor="middle" x="27" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Module</text> +</g> +<!-- Submodule --> +<g id="node2" class="node"><title>Submodule</title> +<polygon fill="#5bc0de" stroke="#5bc0de" points="139.5,-24 72.5,-24 72.5,-0 139.5,-0 139.5,-24"/> +<text text-anchor="middle" x="106" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Submodule</text> +</g> +<!-- Subroutine --> +<g id="node3" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="222,-24 158,-24 158,-0 222,-0 222,-24"/> +<text text-anchor="middle" x="190" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node4" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="294,-24 240,-24 240,-0 294,-0 294,-24"/> +<text text-anchor="middle" x="267" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="366,-24 312,-24 312,-0 366,-0 366,-24"/> +<text text-anchor="middle" x="339" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="481.5,-24 384.5,-24 384.5,-0 481.5,-0 481.5,-24"/> +<text text-anchor="middle" x="433" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a submodule to the (sub)module which it is + descended from. Dashed arrows point from a module or program unit to + modules which it uses. + </p> + </div></div></div></div> + </li> + + </ul> + </div> + + + <p>Prepare input data for FLEXPART, esp. vertical velocity as + etadot or etadot * dp/deta</p> +<hr> +<p>author: L. Haimberger + date: 03/2010 + version: V4.0 </p> +<h2>Program calc_etadot</h2> +<p><strong>Prepares input data for POP model meteorological preprocessor</strong></p> +<hr> +<p>Calculation of etapoint on a regular <script type="math/tex">\lambda-\phi</script> grid and writing + <code>U,V,ETAPOINT,T,PS,Q,SD,MSL,TCC,10U, 10V, 2T,2D,LSP,CP,SSHF,SSR, + EWSS,NSSS</code> + to an output file (input and output in GRIB 1 or 2 format). <br> + etapoint is defined as the total time derivative of + ECMWF vertical coordinate eta multiplied by the derivative + of pressure with respect to eta: + <script type="math/tex; mode=display">\frac{\mathrm{d}\eta}{\mathrm{d}t}\frac{\partial p}{\partial \eta}</script> +</p> +<h3>Version history and authors:</h3> +<ul> +<li> +<p>04/1994: Leopold Haimberger, Gerhard Wotawa</p> +</li> +<li> +<p>2003-05-11: Alexander Beck </p> +</li> +<li> +<p>12/2006: L. Haimberger V2.0, + handle arbitrary regular grids and T799 resolution data </p> +</li> +<li> +<p>03/2010: L. Haimberger V4.0, + handle GRIB edition 2 fields and T1279 resolution data </p> +</li> +<li>04-06/2019: Petra Seibert, + beautify code and add FORD documentation</li> +</ul> +<hr> +<p># </p> +<h2>Input required:</h2> +<div class="codehilite"><pre><span></span> UNIT FILE PARAMETER(S) DATA REPRESENTATION + + 11 fort.11 T,U,V regular lambda phi grid + 12 fort.12 D regular lambda phi grid + 13 fort.13 LNSP spherical harmonics + 14 fort.14 SD,MSL,TCC,10U, + 10V,2T,2D regular lambda phi grid + 16 fort.16 LSP,CP,SSHF, + SSR,EWSS,NSSS regular lambda phi grid + 17 fort.17 Q regular lambda phi grid +</pre></div> + + +<hr> +<h3>Output produced:</h3> +<div class="codehilite"><pre><span></span>UNIT FILE PARAMETER(S) DATA REPRESENTATION + +15 fort.15 `U,V,ETA,T,PS, + `Q,SD,MSL,TCC,` + `10U,10V,2T,2D,` regular lambda phi grid + `LSP,CP,SSHF,` + `SSR,EWSS,NSSS` +</pre></div> + + +<hr> +<p>ALLOCATE VARIABLES </p> +<p>Initialisieren Legendretransformation auf das LaT/LON Gitter </p> +<p>Initialisation of fields for FFT and Legendre transformation + to Gaussian grid and back to phase space + read LNSP in SH + read u,v in SH + Transformieren des Windes auf das Gaussgitter<br> + read DIV in SH + Transformieren der horizontalen Divergenz auf das Gaussgitter<br> + Berechnung des Gradienten des Logarithmus des Bodendrucks auf dem Gaussgitter<br> + Berechnung der Vertikalgeschwindigkeit auf dem Gaussgitter<br> + Berechnung von Omega auf dem Gaussgitter </p> +<p>READING OF SURFACE PRESSURE </p> +<p>READING OF U,V </p> +<p>READING OF LNSP on grid </p> +<p>READING OF DIVERGENCE </p> +<p>Initialisieren Legendretransformation auf das LaT/LON Gitter + Without Gaussian grid calculation Legendre Polynomials are calculated + only for one latitude to save space</p> +<p>CREATE FILE VERTICAL.EC NEEDED BY POP MODEL </p> +<p>READING OF T </p> +<p>READING OF SPECIFIC HUMIDITY </p> +<p>WRITE MODEL LEVEL DATA TO fort.15 </p> +<div class="codehilite"><pre><span></span> Calculation of etadot in CONTGL needed scaled winds (ucosphi,vcosphi) + Now we are transforming back to the usual winds. +</pre></div> + + <br> + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Calls</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: program~~calc_etadot~~CallsGraph Pages: 1 --> +<svg id="programcalc_etadotCallsGraph" width="530pt" height="494pt" + viewBox="0.00 0.00 530.00 494.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="program~~calc_etadot~~CallsGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 490)"> +<title>program~~calc_etadot~~CallsGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-490 526,-490 526,4 -4,4"/> +<!-- program~calc_etadot --> +<g id="program~~calc_etadot~~CallsGraph_node1" class="node"><title>program~calc_etadot</title> +<polygon fill="none" stroke="black" points="67,-255 0,-255 0,-231 67,-231 67,-255"/> +<text text-anchor="middle" x="33.5" y="-240.6" font-family="Helvetica,sans-Serif" font-size="10.50">calc_etadot</text> +</g> +<!-- proc~readspectral --> +<g id="program~~calc_etadot~~CallsGraph_node2" class="node"><title>proc~readspectral</title> +<g id="a_program~~calc_etadot~~CallsGraph_node2"><a xlink:href=".././proc/readspectral.html" xlink:title="READSPECTRAL"> +<polygon fill="#d9534f" stroke="#d9534f" points="199,-444 103,-444 103,-420 199,-420 199,-444"/> +<text text-anchor="middle" x="151" y="-429.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">READSPECTRAL</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~readspectral --> +<g id="program~~calc_etadot~~CallsGraph_edge1" class="edge"><title>program~calc_etadot->proc~readspectral</title> +<path fill="none" stroke="#000000" d="M36.3004,-255.263C41.351,-285.558 58.3209,-364.82 103,-411 104.049,-412.084 105.163,-413.116 106.331,-414.099"/> +<polygon fill="#000000" stroke="#000000" points="104.45,-417.054 114.66,-419.888 108.446,-411.306 104.45,-417.054"/> +</g> +<!-- proc~phgcut --> +<g id="program~~calc_etadot~~CallsGraph_node3" class="node"><title>proc~phgcut</title> +<g id="a_program~~calc_etadot~~CallsGraph_node3"><a xlink:href=".././proc/phgcut.html" xlink:title="PHGCUT"> +<polygon fill="#d9534f" stroke="#d9534f" points="179.5,-360 122.5,-360 122.5,-336 179.5,-336 179.5,-360"/> +<text text-anchor="middle" x="151" y="-345.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGCUT</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~phgcut --> +<g id="program~~calc_etadot~~CallsGraph_edge2" class="edge"><title>program~calc_etadot->proc~phgcut</title> +<path fill="none" stroke="#000000" d="M41.7298,-255.073C52.9116,-272.877 75.9566,-306.294 103,-327 106.182,-329.436 109.692,-331.664 113.316,-333.68"/> +<polygon fill="#000000" stroke="#000000" points="111.934,-336.903 122.442,-338.258 115.073,-330.646 111.934,-336.903"/> +</g> +<!-- proc~grph213 --> +<g id="program~~calc_etadot~~CallsGraph_node4" class="node"><title>proc~grph213</title> +<g id="a_program~~calc_etadot~~CallsGraph_node4"><a xlink:href=".././proc/grph213.html" xlink:title="GRPH213"> +<polygon fill="#d9534f" stroke="#d9534f" points="181.5,-318 120.5,-318 120.5,-294 181.5,-294 181.5,-318"/> +<text text-anchor="middle" x="151" y="-303.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GRPH213</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~grph213 --> +<g id="program~~calc_etadot~~CallsGraph_edge3" class="edge"><title>program~calc_etadot->proc~grph213</title> +<path fill="none" stroke="#000000" d="M52.7285,-255.073C66.3174,-263.851 85.4768,-275.763 103,-285 105.925,-286.542 108.987,-288.077 112.084,-289.575"/> +<polygon fill="#000000" stroke="#000000" points="110.841,-292.857 121.382,-293.926 113.808,-286.517 110.841,-292.857"/> +</g> +<!-- grib_close_file --> +<g id="program~~calc_etadot~~CallsGraph_node5" class="node"><title>grib_close_file</title> +<polygon fill="#777777" stroke="#777777" points="324,-486 243,-486 243,-462 324,-462 324,-486"/> +<text text-anchor="middle" x="283.5" y="-471.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grib_close_file</text> +</g> +<!-- program~calc_etadot->grib_close_file --> +<g id="program~~calc_etadot~~CallsGraph_edge12" class="edge"><title>program~calc_etadot->grib_close_file</title> +<path fill="none" stroke="#000000" d="M34.3006,-255.173C34.4252,-291.801 40.2385,-401.624 103,-453 138.882,-482.373 193.16,-484.83 232.634,-481.659"/> +<polygon fill="#000000" stroke="#000000" points="233.214,-485.12 242.838,-480.69 232.551,-478.152 233.214,-485.12"/> +</g> +<!-- proc~statis --> +<g id="program~~calc_etadot~~CallsGraph_node6" class="node"><title>proc~statis</title> +<g id="a_program~~calc_etadot~~CallsGraph_node6"><a xlink:href=".././proc/statis.html" xlink:title="STATIS"> +<polygon fill="#d9534f" stroke="#d9534f" points="178,-276 124,-276 124,-252 178,-252 178,-276"/> +<text text-anchor="middle" x="151" y="-261.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">STATIS</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~statis --> +<g id="program~~calc_etadot~~CallsGraph_edge4" class="edge"><title>program~calc_etadot->proc~statis</title> +<path fill="none" stroke="#000000" d="M67.2887,-248.962C81.8111,-251.602 98.9413,-254.717 113.834,-257.424"/> +<polygon fill="#000000" stroke="#000000" points="113.263,-260.878 123.728,-259.223 114.515,-253.991 113.263,-260.878"/> +</g> +<!-- proc~phgr213 --> +<g id="program~~calc_etadot~~CallsGraph_node7" class="node"><title>proc~phgr213</title> +<g id="a_program~~calc_etadot~~CallsGraph_node7"><a xlink:href=".././proc/phgr213.html" xlink:title="PHGR213"> +<polygon fill="#d9534f" stroke="#d9534f" points="181.5,-234 120.5,-234 120.5,-210 181.5,-210 181.5,-234"/> +<text text-anchor="middle" x="151" y="-219.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGR213</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~phgr213 --> +<g id="program~~calc_etadot~~CallsGraph_edge5" class="edge"><title>program~calc_etadot->proc~phgr213</title> +<path fill="none" stroke="#000000" d="M67.2887,-237.038C80.7055,-234.599 96.3481,-231.755 110.396,-229.201"/> +<polygon fill="#000000" stroke="#000000" points="111.076,-232.635 120.289,-227.402 109.824,-225.747 111.076,-232.635"/> +</g> +<!-- proc~gauleg --> +<g id="program~~calc_etadot~~CallsGraph_node8" class="node"><title>proc~gauleg</title> +<g id="a_program~~calc_etadot~~CallsGraph_node8"><a xlink:href=".././proc/gauleg.html" xlink:title="GAULEG"> +<polygon fill="#d9534f" stroke="#d9534f" points="179,-192 123,-192 123,-168 179,-168 179,-192"/> +<text text-anchor="middle" x="151" y="-177.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GAULEG</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~gauleg --> +<g id="program~~calc_etadot~~CallsGraph_edge6" class="edge"><title>program~calc_etadot->proc~gauleg</title> +<path fill="none" stroke="#000000" d="M52.7285,-230.927C66.3174,-222.149 85.4768,-210.237 103,-201 106.459,-199.177 110.108,-197.363 113.782,-195.61"/> +<polygon fill="#000000" stroke="#000000" points="115.265,-198.78 122.869,-191.402 112.324,-192.428 115.265,-198.78"/> +</g> +<!-- grib_open_file --> +<g id="program~~calc_etadot~~CallsGraph_node9" class="node"><title>grib_open_file</title> +<polygon fill="#777777" stroke="#777777" points="191,-150 111,-150 111,-126 191,-126 191,-150"/> +<text text-anchor="middle" x="151" y="-135.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grib_open_file</text> +</g> +<!-- program~calc_etadot->grib_open_file --> +<g id="program~~calc_etadot~~CallsGraph_edge7" class="edge"><title>program~calc_etadot->grib_open_file</title> +<path fill="none" stroke="#000000" d="M41.7298,-230.927C52.9116,-213.123 75.9566,-179.706 103,-159 104.787,-157.632 106.678,-156.329 108.634,-155.093"/> +<polygon fill="#000000" stroke="#000000" points="110.515,-158.051 117.515,-150.098 107.083,-151.95 110.515,-158.051"/> +</g> +<!-- set99 --> +<g id="program~~calc_etadot~~CallsGraph_node10" class="node"><title>set99</title> +<polygon fill="#777777" stroke="#777777" points="178,-108 124,-108 124,-84 178,-84 178,-108"/> +<text text-anchor="middle" x="151" y="-93.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">set99</text> +</g> +<!-- program~calc_etadot->set99 --> +<g id="program~~calc_etadot~~CallsGraph_edge8" class="edge"><title>program~calc_etadot->set99</title> +<path fill="none" stroke="#000000" d="M38.1212,-230.942C46.0545,-206.393 67.177,-150.14 103,-117 106.413,-113.842 110.381,-111.1 114.536,-108.736"/> +<polygon fill="#000000" stroke="#000000" points="116.386,-111.726 123.79,-104.148 113.276,-105.454 116.386,-111.726"/> +</g> +<!-- proc~posnam --> +<g id="program~~calc_etadot~~CallsGraph_node11" class="node"><title>proc~posnam</title> +<g id="a_program~~calc_etadot~~CallsGraph_node11"><a xlink:href=".././proc/posnam.html" xlink:title="POSNAM"> +<polygon fill="#d9534f" stroke="#d9534f" points="180,-66 122,-66 122,-42 180,-42 180,-66"/> +<text text-anchor="middle" x="151" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">POSNAM</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~posnam --> +<g id="program~~calc_etadot~~CallsGraph_edge10" class="edge"><title>program~calc_etadot->proc~posnam</title> +<path fill="none" stroke="#000000" d="M36.3004,-230.737C41.351,-200.442 58.3209,-121.18 103,-75 105.936,-71.9651 109.39,-69.3351 113.069,-67.064"/> +<polygon fill="#000000" stroke="#000000" points="114.715,-70.1532 121.929,-62.3941 111.451,-63.9607 114.715,-70.1532"/> +</g> +<!-- proc~readlatlon --> +<g id="program~~calc_etadot~~CallsGraph_node12" class="node"><title>proc~readlatlon</title> +<g id="a_program~~calc_etadot~~CallsGraph_node12"><a xlink:href=".././proc/readlatlon.html" xlink:title="READLATLON"> +<polygon fill="#d9534f" stroke="#d9534f" points="192,-402 110,-402 110,-378 192,-378 192,-402"/> +<text text-anchor="middle" x="151" y="-387.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">READLATLON</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~readlatlon --> +<g id="program~~calc_etadot~~CallsGraph_edge11" class="edge"><title>program~calc_etadot->proc~readlatlon</title> +<path fill="none" stroke="#000000" d="M38.1212,-255.058C46.0545,-279.607 67.177,-335.86 103,-369 104.263,-370.168 105.602,-371.28 106.998,-372.336"/> +<polygon fill="#000000" stroke="#000000" points="105.186,-375.332 115.49,-377.798 108.973,-369.445 105.186,-375.332"/> +</g> +<!-- proc~phgrad --> +<g id="program~~calc_etadot~~CallsGraph_node13" class="node"><title>proc~phgrad</title> +<g id="a_program~~calc_etadot~~CallsGraph_node13"><a xlink:href=".././proc/phgrad.html" xlink:title="PHGRAD"> +<polygon fill="#d9534f" stroke="#d9534f" points="179.5,-24 122.5,-24 122.5,-0 179.5,-0 179.5,-24"/> +<text text-anchor="middle" x="151" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGRAD</text> +</a> +</g> +</g> +<!-- program~calc_etadot->proc~phgrad --> +<g id="program~~calc_etadot~~CallsGraph_edge9" class="edge"><title>program~calc_etadot->proc~phgrad</title> +<path fill="none" stroke="#000000" d="M35.1211,-230.893C37.5417,-195.821 49.1182,-92.852 103,-33 105.893,-29.7869 109.37,-27.0382 113.109,-24.6932"/> +<polygon fill="#000000" stroke="#000000" points="114.938,-27.6854 122.152,-19.9256 111.674,-21.4932 114.938,-27.6854"/> +</g> +<!-- proc~readspectral->grib_close_file --> +<g id="program~~calc_etadot~~CallsGraph_edge14" class="edge"><title>proc~readspectral->grib_close_file</title> +<path fill="none" stroke="#000000" d="M189.396,-444.036C203.73,-448.649 220.271,-453.972 235.399,-458.841"/> +<polygon fill="#000000" stroke="#000000" points="234.507,-462.231 245.098,-461.963 236.652,-455.567 234.507,-462.231"/> +</g> +<!-- grib_count_in_file --> +<g id="program~~calc_etadot~~CallsGraph_node18" class="node"><title>grib_count_in_file</title> +<polygon fill="#777777" stroke="#777777" points="332,-444 235,-444 235,-420 332,-420 332,-444"/> +<text text-anchor="middle" x="283.5" y="-429.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grib_count_in_file</text> +</g> +<!-- proc~readspectral->grib_count_in_file --> +<g id="program~~calc_etadot~~CallsGraph_edge13" class="edge"><title>proc~readspectral->grib_count_in_file</title> +<path fill="none" stroke="#000000" d="M199.113,-432C207.314,-432 215.93,-432 224.385,-432"/> +<polygon fill="#000000" stroke="#000000" points="224.578,-435.5 234.578,-432 224.578,-428.5 224.578,-435.5"/> +</g> +<!-- proc~phsymcut --> +<g id="program~~calc_etadot~~CallsGraph_node14" class="node"><title>proc~phsymcut</title> +<g id="a_program~~calc_etadot~~CallsGraph_node14"><a xlink:href=".././proc/phsymcut.html" xlink:title="PHSYMCUT"> +<polygon fill="#d9534f" stroke="#d9534f" points="319,-402 248,-402 248,-378 319,-378 319,-402"/> +<text text-anchor="middle" x="283.5" y="-387.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHSYMCUT</text> +</a> +</g> +</g> +<!-- proc~phgcut->proc~phsymcut --> +<g id="program~~calc_etadot~~CallsGraph_edge15" class="edge"><title>proc~phgcut->proc~phsymcut</title> +<path fill="none" stroke="#000000" d="M179.676,-356.907C196.701,-362.387 218.904,-369.532 238.318,-375.781"/> +<polygon fill="#000000" stroke="#000000" points="237.29,-379.126 247.882,-378.858 239.435,-372.463 237.29,-379.126"/> +</g> +<!-- proc~phgpns --> +<g id="program~~calc_etadot~~CallsGraph_node17" class="node"><title>proc~phgpns</title> +<g id="a_program~~calc_etadot~~CallsGraph_node17"><a xlink:href=".././proc/phgpns.html" xlink:title="PHGPNS"> +<polygon fill="#d9534f" stroke="#d9534f" points="311.5,-360 255.5,-360 255.5,-336 311.5,-336 311.5,-360"/> +<text text-anchor="middle" x="283.5" y="-345.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHGPNS</text> +</a> +</g> +</g> +<!-- proc~phgcut->proc~phgpns --> +<g id="program~~calc_etadot~~CallsGraph_edge16" class="edge"><title>proc~phgcut->proc~phgpns</title> +<path fill="none" stroke="#000000" d="M179.676,-348C198.749,-348 224.32,-348 245.19,-348"/> +<polygon fill="#000000" stroke="#000000" points="245.312,-351.5 255.312,-348 245.312,-344.5 245.312,-351.5"/> +</g> +<!-- proc~grphsub --> +<g id="program~~calc_etadot~~CallsGraph_node16" class="node"><title>proc~grphsub</title> +<g id="a_program~~calc_etadot~~CallsGraph_node16"><a xlink:href=".././proc/grphsub.html" xlink:title="GRPHSUB"> +<polygon fill="#d9534f" stroke="#d9534f" points="315.5,-318 251.5,-318 251.5,-294 315.5,-294 315.5,-318"/> +<text text-anchor="middle" x="283.5" y="-303.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">GRPHSUB</text> +</a> +</g> +</g> +<!-- proc~grph213->proc~grphsub --> +<g id="program~~calc_etadot~~CallsGraph_edge18" class="edge"><title>proc~grph213->proc~grphsub</title> +<path fill="none" stroke="#000000" d="M181.612,-306C199.206,-306 221.786,-306 241.122,-306"/> +<polygon fill="#000000" stroke="#000000" points="241.185,-309.5 251.185,-306 241.185,-302.5 241.185,-309.5"/> +</g> +<!-- ind --> +<g id="program~~calc_etadot~~CallsGraph_node20" class="node"><title>ind</title> +<polygon fill="#777777" stroke="#777777" points="310.5,-276 256.5,-276 256.5,-252 310.5,-252 310.5,-276"/> +<text text-anchor="middle" x="283.5" y="-261.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">ind</text> +</g> +<!-- proc~grph213->ind --> +<g id="program~~calc_etadot~~CallsGraph_edge17" class="edge"><title>proc~grph213->ind</title> +<path fill="none" stroke="#000000" d="M181.612,-296.47C200.871,-290.271 226.104,-282.15 246.517,-275.581"/> +<polygon fill="#000000" stroke="#000000" points="247.657,-278.891 256.104,-272.495 245.512,-272.227 247.657,-278.891"/> +</g> +<!-- proc~phsym --> +<g id="program~~calc_etadot~~CallsGraph_node15" class="node"><title>proc~phsym</title> +<g id="a_program~~calc_etadot~~CallsGraph_node15"><a xlink:href=".././proc/phsym.html" xlink:title="PHSYM"> +<polygon fill="#d9534f" stroke="#d9534f" points="310.5,-234 256.5,-234 256.5,-210 310.5,-210 310.5,-234"/> +<text text-anchor="middle" x="283.5" y="-219.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">PHSYM</text> +</a> +</g> +</g> +<!-- proc~phgr213->proc~phsym --> +<g id="program~~calc_etadot~~CallsGraph_edge19" class="edge"><title>proc~phgr213->proc~phsym</title> +<path fill="none" stroke="#000000" d="M181.612,-222C200.696,-222 225.646,-222 245.959,-222"/> +<polygon fill="#000000" stroke="#000000" points="246.104,-225.5 256.104,-222 246.104,-218.5 246.104,-225.5"/> +</g> +<!-- dcos --> +<g id="program~~calc_etadot~~CallsGraph_node19" class="node"><title>dcos</title> +<polygon fill="#777777" stroke="#777777" points="310.5,-192 256.5,-192 256.5,-168 310.5,-168 310.5,-192"/> +<text text-anchor="middle" x="283.5" y="-177.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">dcos</text> +</g> +<!-- proc~gauleg->dcos --> +<g id="program~~calc_etadot~~CallsGraph_edge20" class="edge"><title>proc~gauleg->dcos</title> +<path fill="none" stroke="#000000" d="M179.04,-180C198.455,-180 224.84,-180 246.104,-180"/> +<polygon fill="#000000" stroke="#000000" points="246.385,-183.5 256.385,-180 246.385,-176.5 246.385,-183.5"/> +</g> +<!-- proc~readlatlon->grib_close_file --> +<g id="program~~calc_etadot~~CallsGraph_edge22" class="edge"><title>proc~readlatlon->grib_close_file</title> +<path fill="none" stroke="#000000" d="M184.415,-402.191C189.513,-404.745 194.559,-407.686 199,-411 218.702,-425.706 215.269,-438.333 235,-453 236.823,-454.355 238.746,-455.646 240.734,-456.874"/> +<polygon fill="#000000" stroke="#000000" points="239.292,-460.076 249.738,-461.844 242.675,-453.947 239.292,-460.076"/> +</g> +<!-- proc~readlatlon->grib_count_in_file --> +<g id="program~~calc_etadot~~CallsGraph_edge21" class="edge"><title>proc~readlatlon->grib_count_in_file</title> +<path fill="none" stroke="#000000" d="M189.396,-402.036C203.73,-406.649 220.271,-411.972 235.399,-416.841"/> +<polygon fill="#000000" stroke="#000000" points="234.507,-420.231 245.098,-419.963 236.652,-413.567 234.507,-420.231"/> +</g> +<!-- proc~rfourtr --> +<g id="program~~calc_etadot~~CallsGraph_node21" class="node"><title>proc~rfourtr</title> +<g id="a_program~~calc_etadot~~CallsGraph_node21"><a xlink:href=".././proc/rfourtr.html" xlink:title="RFOURTR"> +<polygon fill="#d9534f" stroke="#d9534f" points="432,-381 368,-381 368,-357 432,-357 432,-381"/> +<text text-anchor="middle" x="400" y="-366.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">RFOURTR</text> +</a> +</g> +</g> +<!-- proc~phsymcut->proc~rfourtr --> +<g id="program~~calc_etadot~~CallsGraph_edge23" class="edge"><title>proc~phsymcut->proc~rfourtr</title> +<path fill="none" stroke="#000000" d="M319.165,-383.642C331.422,-381.394 345.324,-378.845 358.053,-376.51"/> +<polygon fill="#000000" stroke="#000000" points="358.751,-379.94 367.956,-374.694 357.488,-373.055 358.751,-379.94"/> +</g> +<!-- proc~phgpns->proc~rfourtr --> +<g id="program~~calc_etadot~~CallsGraph_edge24" class="edge"><title>proc~phgpns->proc~rfourtr</title> +<path fill="none" stroke="#000000" d="M311.635,-352.977C325.283,-355.48 342.123,-358.568 357.364,-361.364"/> +<polygon fill="#000000" stroke="#000000" points="357.134,-364.88 367.601,-363.241 358.397,-357.995 357.134,-364.88"/> +</g> +<!-- fft99 --> +<g id="program~~calc_etadot~~CallsGraph_node22" class="node"><title>fft99</title> +<polygon fill="#777777" stroke="#777777" points="522,-381 468,-381 468,-357 522,-357 522,-381"/> +<text text-anchor="middle" x="495" y="-366.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">fft99</text> +</g> +<!-- proc~rfourtr->fft99 --> +<g id="program~~calc_etadot~~CallsGraph_edge25" class="edge"><title>proc~rfourtr->fft99</title> +<path fill="none" stroke="#000000" d="M432.226,-369C440.48,-369 449.455,-369 457.941,-369"/> +<polygon fill="#000000" stroke="#000000" points="457.969,-372.5 467.969,-369 457.969,-365.5 457.969,-372.5"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="560pt" height="32pt" + viewBox="0.00 0.00 559.50 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 555.5,-28 555.5,4 -4,4"/> +<!-- Subroutine --> +<g id="node1" class="node"><title>Subroutine</title> +<polygon fill="#d9534f" stroke="#d9534f" points="64,-24 0,-24 0,-0 64,-0 64,-24"/> +<text text-anchor="middle" x="32" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Subroutine</text> +</g> +<!-- Function --> +<g id="node2" class="node"><title>Function</title> +<polygon fill="#d94e8f" stroke="#d94e8f" points="136,-24 82,-24 82,-0 136,-0 136,-24"/> +<text text-anchor="middle" x="109" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Function</text> +</g> +<!-- Interface --> +<g id="node3" class="node"><title>Interface</title> +<polygon fill="#a7506f" stroke="#a7506f" points="209.5,-24 154.5,-24 154.5,-0 209.5,-0 209.5,-24"/> +<text text-anchor="middle" x="182" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Interface</text> +</g> +<!-- Unknown Procedure Type --> +<g id="node4" class="node"><title>Unknown Procedure Type</title> +<polygon fill="#777777" stroke="#777777" points="364,-24 228,-24 228,-0 364,-0 364,-24"/> +<text text-anchor="middle" x="296" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Unknown Procedure Type</text> +</g> +<!-- Program --> +<g id="node5" class="node"><title>Program</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="436,-24 382,-24 382,-0 436,-0 436,-24"/> +<text text-anchor="middle" x="409" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Program</text> +</g> +<!-- This Page's Entity --> +<g id="node6" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="551.5,-24 454.5,-24 454.5,-0 551.5,-0 551.5,-24"/> +<text text-anchor="middle" x="503" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a procedure to one which it calls. Dashed + arrows point from an interface to procedures which implement that interface. + This could include the module procedures in a generic interface or the + implementation in a submodule of an interface in a parent module. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#vars-1">Variables</a></h3></div> + <div id="vars-1" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lnps">LNPS</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-z%7E12">Z</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-t">T</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-uv">UV</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-uv2">UV2</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-qa">QA</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-om">OM</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-omr">OMR</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-div%7E3">DIV</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-eta%7E2">ETA</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-etar">ETAR</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-dpsdl%7E3">DPSDL</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-dpsdm%7E3">DPSDM</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ps%7E3">PS</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-dpsdt">DPSDT</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-surf">SURF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-flux">FLUX</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-orolsm">OROLSM</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-wsave%7E8">WSAVE</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-h%7E3">H</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-sinl">SINL</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-cosl">COSL</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-wsave2">WSAVE2</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-breite%7E3">BREITE</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-gbreite">GBREITE</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ak">AK</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-bk">BK</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-pv">pv</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-x1%7E2">X1</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-x2%7E2">X2</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-rms%7E2">RMS</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mw%7E2">MW</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-sig%7E2">SIG</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lam">LAM</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-cua">CUA</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-cva">CVA</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-p%7E5">P</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-pp">PP</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-p2">P2</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-xmn%7E5">XMN</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-hilfuv">HILFUV</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lnpmn">LNPMN</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lnpmn2">LNPMN2</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lnpmn3">LNPMN3</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-weight">WEIGHT</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ugvg">UGVG</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-dg">DG</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-etag">ETAG</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-gwsave%7E5">GWSAVE</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-psg">PSG</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-hilf">HILF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mlat%7E11">MLAT</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mpsurf">MPSURF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mpflux">MPFLUX</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mporo">MPORO</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mpar%7E2">MPAR</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-gifax">GIFAX</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-pi">PI</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-cosb">COSB</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-dak">DAK</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-dbk">DBK</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-p00">P00</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-urlar8">URLAR8</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-jmin1">JMIN1</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lllar8">LLLAR8</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-maxbmin1">MAXBMIN1</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-pir8">PIR8</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-dcosb">DCOSB</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-i">I</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-j%7E4">J</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-k%7E2">K</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-l%7E2">L</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ierr">IERR</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-m">M</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ltest">LTEST</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mk">MK</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ngi%7E2">NGI</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ngj%7E2">NGJ</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mflux">MFLUX</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-msurf">MSURF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-moro">MORO</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lunit">LUNIT</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-lunit2">LUNIT2</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-maxl%7E11">MAXL</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-maxb%7E10">MAXB</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mlevel%7E9">MLEVEL</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-levout">LEVOUT</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-levmin">LEVMIN</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-levmax">LEVMAX</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-momega">MOMEGA</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-momegadiff">MOMEGADIFF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mgauss">MGAUSS</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-msmooth">MSMOOTH</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mnauf%7E17">MNAUF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-meta">META</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-metadiff">METADIFF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mdpdeta">MDPDETA</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-metapar">METAPAR</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-rlo0">RLO0</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-rlo1">RLO1</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-rla0">RLA0</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-rla1">RLA1</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mlevelist%7E2">MLEVELIST</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-mauf%7E6">MAUF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-manf%7E5">MANF</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ifax%7E14">IFAX</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-igrib">IGRIB</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-iret">iret</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-ogrib%7E2">ogrib</a> + + <a class="list-group-item" href="../program/calc_etadot.html#variable-filename">FILENAME</a> + + </div> + </div> +</div> + + + + + + + + + + + + + + + + + + + + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + + + + <section> + <h2>Variables</h2> + +<table class="table table-striped varlist"> +<thead><tr><th>Type</th> + +<th>Attributes</th><th></th><th>Name</th><th></th><th>Initial</th><th></th></thead> + + + +<tbody> + + + + + +<tr> + + <td><span class="anchor" id="variable-lnps"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:)</td><td>::</td> + <td><strong>LNPS</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-z%7E12"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:)</td><td>::</td> + <td><strong>Z</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-t"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:,:)</td><td>::</td> + <td><strong>T</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-uv"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:,:)</td><td>::</td> + <td><strong>UV</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-uv2"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:,:)</td><td>::</td> + <td><strong>UV2</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-qa"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:,:)</td><td>::</td> + <td><strong>QA</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-om"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:,:)</td><td>::</td> + <td><strong>OM</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-omr"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:,:)</td><td>::</td> + <td><strong>OMR</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-div%7E3"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:,:)</td><td>::</td> + <td><strong>DIV</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-eta%7E2"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:,:)</td><td>::</td> + <td><strong>ETA</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-etar"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:,:)</td><td>::</td> + <td><strong>ETAR</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-dpsdl%7E3"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:)</td><td>::</td> + <td><strong>DPSDL</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-dpsdm%7E3"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:)</td><td>::</td> + <td><strong>DPSDM</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ps%7E3"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:,:)</td><td>::</td> + <td><strong>PS</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-dpsdt"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:,:)</td><td>::</td> + <td><strong>DPSDT</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-surf"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:,:)</td><td>::</td> + <td><strong>SURF</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-flux"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:,:)</td><td>::</td> + <td><strong>FLUX</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-orolsm"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:,:)</td><td>::</td> + <td><strong>OROLSM</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-wsave%7E8"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>WSAVE</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-h%7E3"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>H</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-sinl"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>SINL</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-cosl"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>COSL</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-wsave2"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>WSAVE2</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-breite%7E3"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>BREITE</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-gbreite"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>GBREITE</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ak"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>AK</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-bk"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>BK</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-pv"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>pv</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-x1%7E2"></span>real</td> + + + <td></td><td>::</td> + <td><strong>X1</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-x2%7E2"></span>real</td> + + + <td></td><td>::</td> + <td><strong>X2</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-rms%7E2"></span>real</td> + + + <td></td><td>::</td> + <td><strong>RMS</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mw%7E2"></span>real</td> + + + <td></td><td>::</td> + <td><strong>MW</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-sig%7E2"></span>real</td> + + + <td></td><td>::</td> + <td><strong>SIG</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-lam"></span>real</td> + + + <td></td><td>::</td> + <td><strong>LAM</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-cua"></span>real,</td> + + + <td>ALLOCATABLE</td><td>::</td> + <td><strong>CUA</strong>(:,:,:)</td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-cva"></span>real,</td> + + + <td>ALLOCATABLE</td><td>::</td> + <td><strong>CVA</strong>(:,:,:)</td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-p%7E5"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:)</td><td>::</td> + <td><strong>P</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-pp"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:)</td><td>::</td> + <td><strong>PP</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-p2"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:)</td><td>::</td> + <td><strong>P2</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-xmn%7E5"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:)</td><td>::</td> + <td><strong>XMN</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-hilfuv"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:)</td><td>::</td> + <td><strong>HILFUV</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-lnpmn"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>LNPMN</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-lnpmn2"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>LNPMN2</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-lnpmn3"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>LNPMN3</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-weight"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>WEIGHT</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ugvg"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:)</td><td>::</td> + <td><strong>UGVG</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-dg"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:)</td><td>::</td> + <td><strong>DG</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-etag"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:)</td><td>::</td> + <td><strong>ETAG</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-gwsave%7E5"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:,:)</td><td>::</td> + <td><strong>GWSAVE</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-psg"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>PSG</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-hilf"></span>real,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>HILF</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlat%7E11"></span>integer,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>MLAT</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mpsurf"></span>integer,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>MPSURF</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mpflux"></span>integer,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>MPFLUX</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mporo"></span>integer,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>MPORO</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mpar%7E2"></span>integer,</td> + + + <td>ALLOCATABLE, DIMENSION (:)</td><td>::</td> + <td><strong>MPAR</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-gifax"></span>integer,</td> + + + <td>ALLOCATABLE</td><td>::</td> + <td><strong>GIFAX</strong>(:,:)</td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-pi"></span>real</td> + + + <td></td><td>::</td> + <td><strong>PI</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-cosb"></span>real</td> + + + <td></td><td>::</td> + <td><strong>COSB</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-dak"></span>real</td> + + + <td></td><td>::</td> + <td><strong>DAK</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-dbk"></span>real</td> + + + <td></td><td>::</td> + <td><strong>DBK</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-p00"></span>real</td> + + + <td></td><td>::</td> + <td><strong>P00</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-urlar8"></span>real</td> + + + <td></td><td>::</td> + <td><strong>URLAR8</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-jmin1"></span>real</td> + + + <td></td><td>::</td> + <td><strong>JMIN1</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-lllar8"></span>real</td> + + + <td></td><td>::</td> + <td><strong>LLLAR8</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxbmin1"></span>real</td> + + + <td></td><td>::</td> + <td><strong>MAXBMIN1</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-pir8"></span>real</td> + + + <td></td><td>::</td> + <td><strong>PIR8</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-dcosb"></span>real</td> + + + <td></td><td>::</td> + <td><strong>DCOSB</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-i"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>I</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-j%7E4"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>J</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-k%7E2"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>K</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-l%7E2"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>L</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ierr"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>IERR</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-m"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>M</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ltest"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>LTEST</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mk"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>MK</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ngi%7E2"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>NGI</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ngj%7E2"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>NGJ</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mflux"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>MFLUX</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-msurf"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>MSURF</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-moro"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>MORO</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-lunit"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>LUNIT</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-lunit2"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>LUNIT2</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxl%7E11"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>MAXL</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-maxb%7E10"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>MAXB</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlevel%7E9"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>MLEVEL</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-levout"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>LEVOUT</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-levmin"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>LEVMIN</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-levmax"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>LEVMAX</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-momega"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>MOMEGA</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-momegadiff"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>MOMEGADIFF</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mgauss"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>MGAUSS</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-msmooth"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>MSMOOTH</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mnauf%7E17"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>MNAUF</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-meta"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>META</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-metadiff"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>METADIFF</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mdpdeta"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>MDPDETA</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-metapar"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>METAPAR</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-rlo0"></span>real</td> + + + <td></td><td>::</td> + <td><strong>RLO0</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-rlo1"></span>real</td> + + + <td></td><td>::</td> + <td><strong>RLO1</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-rla0"></span>real</td> + + + <td></td><td>::</td> + <td><strong>RLA0</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-rla1"></span>real</td> + + + <td></td><td>::</td> + <td><strong>RLA1</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mlevelist%7E2"></span>character(len=300)</td> + + + <td></td><td>::</td> + <td><strong>MLEVELIST</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-mauf%7E6"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>MAUF</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-manf%7E5"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>MANF</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ifax%7E14"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>IFAX</strong>(10)</td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-igrib"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>IGRIB</strong>(1)</td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-iret"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>iret</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-ogrib%7E2"></span>integer</td> + + + <td></td><td>::</td> + <td><strong>ogrib</strong></td><td></td><td></td><td></td> + +</tr> + + + + + +<tr> + + <td><span class="anchor" id="variable-filename"></span>character(len=80)</td> + + + <td></td><td>::</td> + <td><strong>FILENAME</strong></td><td></td><td></td><td></td> + +</tr> + +</tbody> +</table> + + </section> + <br> + + + + + + + + + + + + + + + + + + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/search.html b/Documentation/html/Documentation/Api/Fortran/search.html new file mode 100644 index 0000000000000000000000000000000000000000..b7d31718b9773c3d89f96e2016d5c4df306dbf20 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/search.html @@ -0,0 +1,185 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="./favicon.png"> + + <title> +Search Results – Flex_extract: Calculation of etadot +</title> + + <link href="./css/bootstrap.min.css" rel="stylesheet"> + <link href="./css/pygments.css" rel="stylesheet"> + <link href="./css/font-awesome.min.css" rel="stylesheet"> + <link href="./css/local.css" rel="stylesheet"> + + <link href="./tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="./js/jquery-2.1.3.min.js"></script> + <script src="./js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="./index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="./lists/files.html">Source Files</a></li> + + + + <li><a href="./lists/modules.html">Modules</a></li> + + + + <li><a href="./lists/procedures.html">Procedures</a></li> + + + + <li><a href="./program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="./lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="./lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="./lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="./program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="./search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + <div class="row"> + <div class="col-lg-12"> + <h1>Search Results</h1> + <div id="tipue_search_content"><div id="tipue_search_loading"></div></div> + </div> + </div> +<!-- + <script> + $(document).ready(function() { + $('#tipue_search_input').tipuesearch({ + 'mode' : 'static', + 'show': 10, + 'newWindow': false, + 'descriptiveWords': 35, + }); + }); + </script> +--> +<script> +$(document).ready(function() { + $('#tipue_search_input').tipuesearch(); +}); +</script> + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="./js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="./js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="./tipuesearch/tipuesearch_content.js"></script> + <script src="./tipuesearch/tipuesearch_set.js"></script> + <script src="./tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/sourcefile/calc_etadot.f90.html b/Documentation/html/Documentation/Api/Fortran/sourcefile/calc_etadot.f90.html new file mode 100644 index 0000000000000000000000000000000000000000..3f601b389d4019095d08ceb1cd2c5f9f608de91b --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/sourcefile/calc_etadot.f90.html @@ -0,0 +1,1303 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>calc_etadot.f90 – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>calc_etadot.f90 + <small>Source File</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title="31.0% of total for source files.">438 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/calc_etadot.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + + <li class="active">calc_etadot.f90</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#progs-0">Programs</a></h3></div> + <div id="progs-0" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../program/calc_etadot.html">calc_etadot</a> + + </div> + </div> +</div> + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#funcs-0">Functions</a></h3></div> + <div id="funcs-0" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../proc/ia.html">IA</a> + + </div> + </div> +</div> + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#subs-0">Subroutines</a></h3></div> + <div class="list-group"> + <div id="subs-0" class="panel-collapse collapse"> + + <a class="list-group-item" href="../proc/statis.html">STATIS</a> + + </div> + </div> +</div> + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title">Source Code</h3></div> + <div class="list-group"> + <a class="list-group-item" href="../sourcefile/calc_etadot.f90.html#src">calc_etadot.f90</a> + </div> +</div> + + + +</div> + + </div> + <div class="col-md-9" id='text'> + + <br> + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">This file depends on</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: sourcefile~~calc_etadot.f90~~EfferentGraph Pages: 1 --> +<svg id="sourcefilecalc_etadotf90EfferentGraph" width="305pt" height="154pt" + viewBox="0.00 0.00 305.00 154.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="sourcefile~~calc_etadot.f90~~EfferentGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 150)"> +<title>sourcefile~~calc_etadot.f90~~EfferentGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-150 301,-150 301,4 -4,4"/> +<!-- sourcefile~calc_etadot.f90 --> +<g id="sourcefile~~calc_etadot.f90~~EfferentGraph_node1" class="node"><title>sourcefile~calc_etadot.f90</title> +<polygon fill="none" stroke="black" points="297,-84 212,-84 212,-60 297,-60 297,-84"/> +<text text-anchor="middle" x="254.5" y="-69.6" font-family="Helvetica,sans-Serif" font-size="10.50">calc_etadot.f90</text> +</g> +<!-- sourcefile~rwgrib2.f90 --> +<g id="sourcefile~~calc_etadot.f90~~EfferentGraph_node2" class="node"><title>sourcefile~rwgrib2.f90</title> +<g id="a_sourcefile~~calc_etadot.f90~~EfferentGraph_node2"><a xlink:href=".././sourcefile/rwgrib2.f90.html" xlink:title="rwgrib2.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="174,-146 108,-146 108,-122 174,-122 174,-146"/> +<text text-anchor="middle" x="141" y="-131.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">rwgrib2.f90</text> +</a> +</g> +</g> +<!-- sourcefile~calc_etadot.f90->sourcefile~rwgrib2.f90 --> +<g id="sourcefile~~calc_etadot.f90~~EfferentGraph_edge1" class="edge"><title>sourcefile~calc_etadot.f90->sourcefile~rwgrib2.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M231.737,-84.1014C214.853,-93.4897 191.244,-106.618 172.48,-117.052"/> +<polygon fill="#000000" stroke="#000000" points="170.747,-114.01 163.708,-121.929 174.149,-120.128 170.747,-114.01"/> +</g> +<!-- sourcefile~ftrafo.f90 --> +<g id="sourcefile~~calc_etadot.f90~~EfferentGraph_node3" class="node"><title>sourcefile~ftrafo.f90</title> +<g id="a_sourcefile~~calc_etadot.f90~~EfferentGraph_node3"><a xlink:href=".././sourcefile/ftrafo.f90.html" xlink:title="ftrafo.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="168.5,-104 113.5,-104 113.5,-80 168.5,-80 168.5,-104"/> +<text text-anchor="middle" x="141" y="-89.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">ftrafo.f90</text> +</a> +</g> +</g> +<!-- sourcefile~calc_etadot.f90->sourcefile~ftrafo.f90 --> +<g id="sourcefile~~calc_etadot.f90~~EfferentGraph_edge2" class="edge"><title>sourcefile~calc_etadot.f90->sourcefile~ftrafo.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M211.982,-79.4473C201.002,-81.4167 189.233,-83.5276 178.539,-85.4459"/> +<polygon fill="#000000" stroke="#000000" points="177.901,-82.0044 168.676,-87.2151 179.137,-88.8945 177.901,-82.0044"/> +</g> +<!-- sourcefile~phgrreal.f90 --> +<g id="sourcefile~~calc_etadot.f90~~EfferentGraph_node4" class="node"><title>sourcefile~phgrreal.f90</title> +<g id="a_sourcefile~~calc_etadot.f90~~EfferentGraph_node4"><a xlink:href=".././sourcefile/phgrreal.f90.html" xlink:title="phgrreal.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="70,-64 0,-64 0,-40 70,-40 70,-64"/> +<text text-anchor="middle" x="35" y="-49.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">phgrreal.f90</text> +</a> +</g> +</g> +<!-- sourcefile~calc_etadot.f90->sourcefile~phgrreal.f90 --> +<g id="sourcefile~~calc_etadot.f90~~EfferentGraph_edge4" class="edge"><title>sourcefile~calc_etadot.f90->sourcefile~phgrreal.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M211.821,-68.1675C174.163,-64.7046 118.901,-59.6231 80.4182,-56.0844"/> +<polygon fill="#000000" stroke="#000000" points="80.3161,-52.5604 70.0376,-55.1299 79.6751,-59.531 80.3161,-52.5604"/> +</g> +<!-- sourcefile~grphreal.f90 --> +<g id="sourcefile~~calc_etadot.f90~~EfferentGraph_node5" class="node"><title>sourcefile~grphreal.f90</title> +<g id="a_sourcefile~~calc_etadot.f90~~EfferentGraph_node5"><a xlink:href=".././sourcefile/grphreal.f90.html" xlink:title="grphreal.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="176,-24 106,-24 106,-0 176,-0 176,-24"/> +<text text-anchor="middle" x="141" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grphreal.f90</text> +</a> +</g> +</g> +<!-- sourcefile~calc_etadot.f90->sourcefile~grphreal.f90 --> +<g id="sourcefile~~calc_etadot.f90~~EfferentGraph_edge3" class="edge"><title>sourcefile~calc_etadot.f90->sourcefile~grphreal.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M230.936,-59.8581C214.387,-50.9529 191.705,-38.747 173.389,-28.8909"/> +<polygon fill="#000000" stroke="#000000" points="174.995,-25.7804 164.53,-24.1238 171.678,-31.9446 174.995,-25.7804"/> +</g> +<!-- sourcefile~ftrafo.f90->sourcefile~phgrreal.f90 --> +<g id="sourcefile~~calc_etadot.f90~~EfferentGraph_edge5" class="edge"><title>sourcefile~ftrafo.f90->sourcefile~phgrreal.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M113.487,-81.8028C102.375,-77.529 89.2008,-72.4618 76.8961,-67.7293"/> +<polygon fill="#000000" stroke="#000000" points="77.8605,-64.3503 67.2706,-64.0272 75.3476,-70.8837 77.8605,-64.3503"/> +</g> +<!-- sourcefile~grphreal.f90->sourcefile~phgrreal.f90 --> +<g id="sourcefile~~calc_etadot.f90~~EfferentGraph_edge6" class="edge"><title>sourcefile~grphreal.f90->sourcefile~phgrreal.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M108.797,-24.0013C98.8103,-27.8422 87.5988,-32.1543 77.0222,-36.2222"/> +<polygon fill="#000000" stroke="#000000" points="75.6179,-33.0123 67.5409,-39.8689 78.1308,-39.5458 75.6179,-33.0123"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="190pt" height="32pt" + viewBox="0.00 0.00 190.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 186,-28 186,4 -4,4"/> +<!-- Source File --> +<g id="node1" class="node"><title>Source File</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Source File</text> +</g> +<!-- This Page's Entity --> +<g id="node2" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="182,-24 85,-24 85,-0 182,-0 182,-24"/> +<text text-anchor="middle" x="133.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a file to a file which it depends on. A file + is dependent upon another if the latter must be compiled before the former + can be. + </p> + </div></div></div></div> + </div> + </div> + + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#progs-1">Programs</a></h3></div> + <div id="progs-1" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../program/calc_etadot.html">calc_etadot</a> + + </div> + </div> +</div> + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#funcs-1">Functions</a></h3></div> + <div id="funcs-1" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../proc/ia.html">IA</a> + + </div> + </div> +</div> + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#subs-1">Subroutines</a></h3></div> + <div class="list-group"> + <div id="subs-1" class="panel-collapse collapse"> + + <a class="list-group-item" href="../proc/statis.html">STATIS</a> + + </div> + </div> +</div> + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title">Source Code</h3></div> + <div class="list-group"> + <a class="list-group-item" href="../sourcefile/calc_etadot.f90.html#src">calc_etadot.f90</a> + </div> +</div> + + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + <section> + <h2><span class="anchor" id="src"></span>Source Code</h2> + <div class="hl"><pre><span></span><a name="ln-1"></a><span class="k">PROGRAM </span><span class="n">calc_etadot</span> +<a name="ln-2"></a> +<a name="ln-3"></a><span class="c">!! Prepare input data for FLEXPART, esp. vertical velocity as </span> +<a name="ln-4"></a><span class="c">!! etadot or etadot * dp/deta</span> +<a name="ln-5"></a> +<a name="ln-6"></a><span class="c">!*----------------------------------------------------------------</span> +<a name="ln-7"></a><span class="c">! author: L. Haimberger</span> +<a name="ln-8"></a><span class="c">! date: 03/2010</span> +<a name="ln-9"></a><span class="c">! version: V4.0 </span> +<a name="ln-10"></a><span class="c">! </span> +<a name="ln-11"></a><span class="c">!## Program calc_etadot </span> +<a name="ln-12"></a><span class="c">! </span> +<a name="ln-13"></a><span class="c">! **Prepares input data for POP model meteorological preprocessor**</span> +<a name="ln-14"></a><span class="c">! </span> +<a name="ln-15"></a><span class="c">!-----------------------------------------------------------------</span> +<a name="ln-16"></a><span class="c">! </span> +<a name="ln-17"></a><span class="c">! Calculation of etapoint on a regular \(\lambda-\phi\) grid and writing </span> +<a name="ln-18"></a><span class="c">! `U,V,ETAPOINT,T,PS,Q,SD,MSL,TCC,10U, 10V, 2T,2D,LSP,CP,SSHF,SSR, </span> +<a name="ln-19"></a><span class="c">! EWSS,NSSS`</span> +<a name="ln-20"></a><span class="c">! to an output file (input and output in GRIB 1 or 2 format). </span> +<a name="ln-21"></a><span class="c">! etapoint is defined as the total time derivative of </span> +<a name="ln-22"></a><span class="c">! ECMWF vertical coordinate eta multiplied by the derivative</span> +<a name="ln-23"></a><span class="c">! of pressure with respect to eta:</span> +<a name="ln-24"></a><span class="c">! \[\frac{\mathrm{d}\eta}{\mathrm{d}t}\frac{\partial p}{\partial \eta}\]</span> +<a name="ln-25"></a><span class="c">! </span> +<a name="ln-26"></a><span class="c">!### Version history and authors:</span> +<a name="ln-27"></a><span class="c">! - 04/1994: Leopold Haimberger, Gerhard Wotawa</span> +<a name="ln-28"></a><span class="c">!</span> +<a name="ln-29"></a><span class="c">! - 2003-05-11: Alexander Beck </span> +<a name="ln-30"></a><span class="c">!</span> +<a name="ln-31"></a><span class="c">! - 12/2006: L. Haimberger V2.0,</span> +<a name="ln-32"></a><span class="c">! handle arbitrary regular grids and T799 resolution data </span> +<a name="ln-33"></a><span class="c">!</span> +<a name="ln-34"></a><span class="c">! - 03/2010: L. Haimberger V4.0,</span> +<a name="ln-35"></a><span class="c">! handle GRIB edition 2 fields and T1279 resolution data </span> +<a name="ln-36"></a><span class="c">! - 04-06/2019: Petra Seibert, </span> +<a name="ln-37"></a><span class="c">! beautify code and add FORD documentation</span> +<a name="ln-38"></a><span class="c">! </span> +<a name="ln-39"></a><span class="c">!-----------------------------------------------------------------</span> +<a name="ln-40"></a><span class="c">! # </span> +<a name="ln-41"></a><span class="c">!## Input required:</span> +<a name="ln-42"></a><span class="c">! </span> +<a name="ln-43"></a><span class="c">! UNIT FILE PARAMETER(S) DATA REPRESENTATION </span> +<a name="ln-44"></a><span class="c">! </span> +<a name="ln-45"></a><span class="c">! 11 fort.11 T,U,V regular lambda phi grid</span> +<a name="ln-46"></a><span class="c">! 12 fort.12 D regular lambda phi grid </span> +<a name="ln-47"></a><span class="c">! 13 fort.13 LNSP spherical harmonics</span> +<a name="ln-48"></a><span class="c">! 14 fort.14 SD,MSL,TCC,10U, </span> +<a name="ln-49"></a><span class="c">! 10V,2T,2D regular lambda phi grid </span> +<a name="ln-50"></a><span class="c">! 16 fort.16 LSP,CP,SSHF, </span> +<a name="ln-51"></a><span class="c">! SSR,EWSS,NSSS regular lambda phi grid</span> +<a name="ln-52"></a><span class="c">! 17 fort.17 Q regular lambda phi grid</span> +<a name="ln-53"></a><span class="c">! </span> +<a name="ln-54"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-55"></a><span class="c">! </span> +<a name="ln-56"></a><span class="c">!### Output produced:</span> +<a name="ln-57"></a><span class="c">! </span> +<a name="ln-58"></a><span class="c">! UNIT FILE PARAMETER(S) DATA REPRESENTATION </span> +<a name="ln-59"></a><span class="c">! </span> +<a name="ln-60"></a><span class="c">! 15 fort.15 `U,V,ETA,T,PS, </span> +<a name="ln-61"></a><span class="c">! `Q,SD,MSL,TCC,` </span> +<a name="ln-62"></a><span class="c">! `10U,10V,2T,2D,` regular lambda phi grid </span> +<a name="ln-63"></a><span class="c">! `LSP,CP,SSHF,` </span> +<a name="ln-64"></a><span class="c">! `SSR,EWSS,NSSS` </span> +<a name="ln-65"></a><span class="c">! </span> +<a name="ln-66"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-67"></a> +<a name="ln-68"></a> <span class="k">USE </span><span class="n">PHTOGR</span> +<a name="ln-69"></a> <span class="k">USE </span><span class="n">GRTOPH</span> +<a name="ln-70"></a> <span class="k">USE </span><span class="n">FTRAFO</span> +<a name="ln-71"></a> <span class="k">USE </span><span class="n">RWGRIB2</span> +<a name="ln-72"></a> <span class="k">USE </span><span class="n">GRIB_API</span> +<a name="ln-73"></a> +<a name="ln-74"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-75"></a> +<a name="ln-76"></a><span class="k"> </span><span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:,:)</span> <span class="kd">::</span> <span class="n">LNPS</span> +<a name="ln-77"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:,:)</span> <span class="kd">::</span> <span class="n">Z</span> +<a name="ln-78"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:,:,:)</span> <span class="kd">::</span> <span class="n">T</span><span class="p">,</span> <span class="n">UV</span> <span class="p">,</span> <span class="n">UV2</span> +<a name="ln-79"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:,:,:)</span> <span class="kd">::</span> <span class="n">QA</span><span class="p">,</span><span class="n">OM</span><span class="p">,</span><span class="n">OMR</span> +<a name="ln-80"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:,:,:)</span> <span class="kd">::</span> <span class="n">DIV</span><span class="p">,</span> <span class="n">ETA</span><span class="p">,</span><span class="n">ETAR</span> +<a name="ln-81"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:,:)</span> <span class="kd">::</span> <span class="n">DPSDL</span><span class="p">,</span> <span class="n">DPSDM</span> +<a name="ln-82"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:,:,:)</span> <span class="kd">::</span> <span class="n">PS</span><span class="p">,</span><span class="n">DPSDT</span> +<a name="ln-83"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:,:,:)</span> <span class="kd">::</span> <span class="n">SURF</span><span class="p">,</span><span class="n">FLUX</span><span class="p">,</span><span class="n">OROLSM</span> +<a name="ln-84"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:)</span> <span class="kd">::</span> <span class="n">WSAVE</span><span class="p">,</span><span class="n">H</span><span class="p">,</span><span class="n">SINL</span><span class="p">,</span><span class="n">COSL</span><span class="p">,</span><span class="n">WSAVE2</span> +<a name="ln-85"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:)</span> <span class="kd">::</span> <span class="n">BREITE</span><span class="p">,</span> <span class="n">GBREITE</span><span class="p">,</span><span class="n">AK</span><span class="p">,</span> <span class="n">BK</span><span class="p">,</span><span class="n">pv</span> +<a name="ln-86"></a> +<a name="ln-87"></a><span class="c">! Arrays for Gaussian grid calculations</span> +<a name="ln-88"></a> <span class="kt">REAL</span> <span class="kd">::</span> <span class="n">X1</span><span class="p">,</span><span class="n">X2</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">,</span><span class="n">LAM</span> +<a name="ln-89"></a> <span class="kt">REAL</span><span class="p">,</span><span class="k">ALLOCATABLE</span> <span class="kd">::</span> <span class="n">CUA</span><span class="p">(:,:,:),</span><span class="n">CVA</span><span class="p">(:,:,:)</span> +<a name="ln-90"></a> +<a name="ln-91"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:,:)</span> <span class="kd">::</span> <span class="n">P</span><span class="p">,</span><span class="n">PP</span><span class="p">,</span><span class="n">P2</span> +<a name="ln-92"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:,:)</span> <span class="kd">::</span> <span class="n">XMN</span><span class="p">,</span><span class="n">HILFUV</span> +<a name="ln-93"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:)</span> <span class="kd">::</span> <span class="n">LNPMN</span><span class="p">,</span><span class="n">LNPMN2</span><span class="p">,</span><span class="n">LNPMN3</span> +<a name="ln-94"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:)</span> <span class="kd">::</span> <span class="n">WEIGHT</span> +<a name="ln-95"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:,:)</span> <span class="kd">::</span> <span class="n">UGVG</span> +<a name="ln-96"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:,:)</span> <span class="kd">::</span> <span class="n">DG</span><span class="p">,</span> <span class="n">ETAG</span> +<a name="ln-97"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:,:)</span> <span class="kd">::</span> <span class="n">GWSAVE</span> +<a name="ln-98"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:)</span> <span class="kd">::</span> <span class="n">PSG</span><span class="p">,</span><span class="n">HILF</span> +<a name="ln-99"></a> +<a name="ln-100"></a><span class="c">! end arrays for Gaussian grid calculations</span> +<a name="ln-101"></a> +<a name="ln-102"></a> <span class="kt">INTEGER</span><span class="p">,</span> <span class="k">ALLOCATABLE</span><span class="p">,</span> <span class="k">DIMENSION</span> <span class="p">(:)</span> <span class="kd">::</span> <span class="n">MLAT</span><span class="p">,</span><span class="n">MPSURF</span><span class="p">,</span><span class="n">MPFLUX</span><span class="p">,</span><span class="n">MPORO</span><span class="p">,</span><span class="n">MPAR</span> +<a name="ln-103"></a> <span class="kt">INTEGER</span><span class="p">,</span> <span class="k">ALLOCATABLE</span> <span class="kd">::</span> <span class="n">GIFAX</span><span class="p">(:,:)</span> +<a name="ln-104"></a> +<a name="ln-105"></a> <span class="kt">REAL </span><span class="n">PI</span><span class="p">,</span><span class="n">COSB</span><span class="p">,</span><span class="n">DAK</span><span class="p">,</span><span class="n">DBK</span><span class="p">,</span><span class="n">P00</span> +<a name="ln-106"></a> <span class="kt">REAL </span><span class="n">URLAR8</span><span class="p">,</span><span class="n">JMIN1</span><span class="p">,</span><span class="n">LLLAR8</span><span class="p">,</span><span class="n">MAXBMIN1</span><span class="p">,</span><span class="n">PIR8</span><span class="p">,</span><span class="n">DCOSB</span> +<a name="ln-107"></a> +<a name="ln-108"></a> <span class="kt">INTEGER </span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">,</span><span class="n">L</span><span class="p">,</span><span class="n">IERR</span><span class="p">,</span><span class="n">M</span><span class="p">,</span><span class="n">LTEST</span><span class="p">,</span><span class="n">MK</span><span class="p">,</span><span class="n">NGI</span><span class="p">,</span><span class="n">NGJ</span> +<a name="ln-109"></a> <span class="kt">INTEGER </span><span class="n">MFLUX</span><span class="p">,</span><span class="n">MSURF</span><span class="p">,</span><span class="n">MORO</span> +<a name="ln-110"></a> <span class="kt">INTEGER </span><span class="n">LUNIT</span><span class="p">,</span><span class="n">LUNIT2</span> +<a name="ln-111"></a> +<a name="ln-112"></a> <span class="kt">INTEGER </span><span class="n">MAXL</span><span class="p">,</span> <span class="n">MAXB</span><span class="p">,</span> <span class="n">MLEVEL</span><span class="p">,</span> <span class="n">LEVOUT</span><span class="p">,</span><span class="n">LEVMIN</span><span class="p">,</span><span class="n">LEVMAX</span> +<a name="ln-113"></a> <span class="kt">INTEGER </span><span class="n">MOMEGA</span><span class="p">,</span><span class="n">MOMEGADIFF</span><span class="p">,</span><span class="n">MGAUSS</span><span class="p">,</span><span class="n">MSMOOTH</span><span class="p">,</span> <span class="n">MNAUF</span><span class="p">,</span><span class="n">META</span><span class="p">,</span><span class="n">METADIFF</span> +<a name="ln-114"></a> <span class="kt">INTEGER </span><span class="n">MDPDETA</span><span class="p">,</span><span class="n">METAPAR</span> +<a name="ln-115"></a> <span class="kt">REAL </span><span class="n">RLO0</span><span class="p">,</span> <span class="n">RLO1</span><span class="p">,</span> <span class="n">RLA0</span><span class="p">,</span> <span class="n">RLA1</span> +<a name="ln-116"></a> <span class="kt">CHARACTER</span><span class="o">*</span><span class="mi">300</span> <span class="n">MLEVELIST</span> +<a name="ln-117"></a> +<a name="ln-118"></a> <span class="kt">INTEGER </span><span class="n">MAUF</span><span class="p">,</span> <span class="n">MANF</span><span class="p">,</span><span class="n">IFAX</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> +<a name="ln-119"></a> +<a name="ln-120"></a> <span class="kt">INTEGER </span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="n">iret</span><span class="p">,</span><span class="n">ogrib</span> +<a name="ln-121"></a> +<a name="ln-122"></a> <span class="kt">CHARACTER</span><span class="o">*</span><span class="mi">80</span> <span class="n">FILENAME</span> +<a name="ln-123"></a> +<a name="ln-124"></a> <span class="k">NAMELIST</span> <span class="o">/</span><span class="n">NAMGEN</span><span class="o">/</span> <span class="p">&</span> +<a name="ln-125"></a> <span class="n">MAXL</span><span class="p">,</span> <span class="n">MAXB</span><span class="p">,</span> <span class="p">&</span> +<a name="ln-126"></a> <span class="n">MLEVEL</span><span class="p">,</span><span class="n">MLEVELIST</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">METAPAR</span><span class="p">,</span> <span class="p">&</span> +<a name="ln-127"></a> <span class="n">RLO0</span><span class="p">,</span> <span class="n">RLO1</span><span class="p">,</span> <span class="n">RLA0</span><span class="p">,</span> <span class="n">RLA1</span><span class="p">,</span> <span class="p">&</span> +<a name="ln-128"></a> <span class="n">MOMEGA</span><span class="p">,</span><span class="n">MOMEGADIFF</span><span class="p">,</span><span class="n">MGAUSS</span><span class="p">,</span><span class="n">MSMOOTH</span><span class="p">,</span><span class="n">META</span><span class="p">,</span><span class="n">METADIFF</span><span class="p">,&</span> +<a name="ln-129"></a> <span class="n">MDPDETA</span> +<a name="ln-130"></a> +<a name="ln-131"></a> <span class="n">LTEST</span><span class="o">=</span><span class="mi">1</span> +<a name="ln-132"></a> +<a name="ln-133"></a> <span class="k">CALL </span><span class="n">POSNAM</span> <span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="s1">'NAMGEN'</span><span class="p">)</span> +<a name="ln-134"></a> <span class="k">READ</span> <span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="n">NAMGEN</span><span class="p">)</span> +<a name="ln-135"></a> +<a name="ln-136"></a> <span class="n">MAUF</span><span class="o">=</span><span class="nb">INT</span><span class="p">(</span><span class="mi">36</span><span class="mf">0.</span><span class="o">*</span><span class="p">(</span><span class="kt">REAL</span><span class="p">(</span><span class="n">MAXL</span><span class="p">)</span><span class="o">-</span><span class="mf">1.</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">RLO1</span><span class="o">-</span><span class="n">RLO0</span><span class="p">)</span><span class="o">+</span><span class="mf">0.0001</span><span class="p">)</span> +<a name="ln-137"></a><span class="c">! PRINT*, MAUF</span> +<a name="ln-138"></a> +<a name="ln-139"></a> <span class="n">MANF</span><span class="o">=</span><span class="nb">INT</span><span class="p">(</span><span class="kt">REAL</span><span class="p">(</span><span class="n">MAUF</span><span class="p">)</span><span class="o">/</span><span class="mi">36</span><span class="mf">0.</span><span class="o">*</span><span class="p">(</span><span class="mi">36</span><span class="mf">0.</span><span class="o">+</span><span class="n">RLO0</span><span class="p">)</span><span class="o">+</span><span class="mf">1.0001</span><span class="p">)</span> +<a name="ln-140"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MANF</span> <span class="p">.</span><span class="n">gt</span><span class="p">.</span> <span class="n">MAUF</span><span class="p">)</span> <span class="n">MANF</span><span class="o">=</span><span class="n">MANF</span><span class="o">-</span><span class="n">MAUF</span> +<a name="ln-141"></a> +<a name="ln-142"></a> +<a name="ln-143"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-144"></a><span class="c">!! ALLOCATE VARIABLES </span> +<a name="ln-145"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-146"></a> +<a name="ln-147"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">LNPS</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span> +<a name="ln-148"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">H</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="p">))</span> +<a name="ln-149"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">OM</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span> <span class="n">MAXB</span><span class="p">,</span> <span class="n">MLEVEL</span><span class="p">))</span> +<a name="ln-150"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">ETA</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">))</span> +<a name="ln-151"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">PS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span> <span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="n">DPSDT</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span> <span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span> +<a name="ln-152"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">WSAVE</span><span class="p">(</span><span class="mi">4</span><span class="o">*</span><span class="n">MAUF</span><span class="o">+</span><span class="mi">15</span><span class="p">),</span><span class="n">WSAVE2</span><span class="p">(</span><span class="mi">4</span><span class="o">*</span><span class="n">MAUF</span><span class="o">+</span><span class="mi">15</span><span class="p">))</span> +<a name="ln-153"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">BREITE</span><span class="p">(</span><span class="n">MAXB</span><span class="p">),</span><span class="n">AK</span><span class="p">(</span><span class="n">MLEVEL</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span><span class="n">BK</span><span class="p">(</span><span class="n">MLEVEL</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span><span class="n">PV</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">MLEVEL</span><span class="o">+</span><span class="mi">2</span><span class="p">))</span> +<a name="ln-154"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">MPAR</span><span class="p">(</span><span class="mi">2</span><span class="p">))</span> +<a name="ln-155"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">COSL</span><span class="p">(</span><span class="n">MAXL</span><span class="p">),</span><span class="n">SINL</span><span class="p">(</span><span class="n">MAXL</span><span class="p">))</span> +<a name="ln-156"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">CUA</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">),</span><span class="n">CVA</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">))</span> +<a name="ln-157"></a> +<a name="ln-158"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-159"></a><span class="c">! GAUSS STUFF </span> +<a name="ln-160"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-161"></a> +<a name="ln-162"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MGAUSS</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">1</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-163"></a><span class="k"> </span><span class="n">LUNIT</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-164"></a> <span class="n">FILENAME</span><span class="o">=</span><span class="s1">'fort.18'</span> +<a name="ln-165"></a> +<a name="ln-166"></a> <span class="k">CALL </span><span class="n">GRIB_OPEN_FILE</span><span class="p">(</span><span class="n">LUNIT</span><span class="p">,</span> <span class="nb">TRIM</span><span class="p">(</span><span class="n">FILENAME</span><span class="p">),</span><span class="s1">'R'</span><span class="p">)</span> +<a name="ln-167"></a> +<a name="ln-168"></a> <span class="k">CALL </span><span class="n">GRIB_NEW_FROM_FILE</span><span class="p">(</span><span class="n">LUNIT</span><span class="p">,</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="n">IRET</span><span class="p">)</span> +<a name="ln-169"></a> +<a name="ln-170"></a><span class="c">! we can close the file</span> +<a name="ln-171"></a> <span class="k">CALL </span><span class="n">GRIB_CLOSE_FILE</span><span class="p">(</span><span class="n">LUNIT</span><span class="p">)</span> +<a name="ln-172"></a><span class="c">! call grib_get(igrib(1),'gridType', j)</span> +<a name="ln-173"></a> +<a name="ln-174"></a> <span class="n">NGJ</span><span class="o">=</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-175"></a> +<a name="ln-176"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">GWSAVE</span><span class="p">(</span><span class="mi">8</span><span class="o">*</span><span class="n">NGJ</span><span class="o">+</span><span class="mi">15</span><span class="p">,</span><span class="n">NGJ</span><span class="o">/</span><span class="mi">2</span><span class="p">))</span> +<a name="ln-177"></a> <span class="k">ALLOCATE</span><span class="p">(</span><span class="n">GIFAX</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="n">NGJ</span><span class="p">))</span> +<a name="ln-178"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">GBREITE</span><span class="p">(</span><span class="n">NGJ</span><span class="p">),</span><span class="n">WEIGHT</span><span class="p">(</span><span class="n">NGJ</span><span class="p">))</span> +<a name="ln-179"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">MLAT</span><span class="p">(</span><span class="n">NGJ</span><span class="p">))</span> +<a name="ln-180"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">P</span><span class="p">(</span><span class="mi">0</span><span class="p">:((</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">NGJ</span><span class="o">/</span><span class="mi">2</span><span class="p">))</span> +<a name="ln-181"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">PP</span><span class="p">(</span><span class="n">NGJ</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">:((</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">))</span> +<a name="ln-182"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">Z</span><span class="p">(</span><span class="mi">0</span><span class="p">:((</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">MAXB</span><span class="p">))</span> +<a name="ln-183"></a> +<a name="ln-184"></a> <span class="k">CALL </span><span class="n">GRIB_GET</span><span class="p">(</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="s1">'numberOfPointsAlongAMeridian'</span><span class="p">,</span> <span class="n">NGJ</span><span class="p">)</span> +<a name="ln-185"></a> +<a name="ln-186"></a><span class="c">! get as a integer</span> +<a name="ln-187"></a> <span class="k">call </span><span class="n">grib_get</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="s1">'pl'</span><span class="p">,</span> <span class="n">MLAT</span><span class="p">)</span> +<a name="ln-188"></a> +<a name="ln-189"></a> <span class="n">NGI</span><span class="o">=</span><span class="nb">SUM</span><span class="p">(</span><span class="n">MLAT</span><span class="p">)</span> +<a name="ln-190"></a> +<a name="ln-191"></a> <span class="k">CALL </span><span class="n">GRIB_GET</span><span class="p">(</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="s1">'numberOfVerticalCoordinateValues'</span><span class="p">,</span><span class="n">MK</span><span class="p">)</span> +<a name="ln-192"></a> +<a name="ln-193"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MK</span><span class="o">/</span><span class="mi">2</span><span class="o">-</span><span class="mi">1</span> <span class="p">.</span><span class="n">NE</span><span class="p">.</span> <span class="n">MLEVEL</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-194"></a><span class="k"> WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="o">*</span><span class="p">)</span> <span class="s1">'FATAL: Number of model levels'</span><span class="p">,</span><span class="n">mk</span><span class="p">,</span> <span class="p">&</span> +<a name="ln-195"></a> <span class="s1">' does not agree with'</span><span class="p">,</span> <span class="n">MLEVEL</span><span class="p">,</span><span class="s1">' in namelist'</span> +<a name="ln-196"></a> <span class="k">STOP</span> +<a name="ln-197"></a><span class="k"> END IF</span> +<a name="ln-198"></a><span class="k"> call </span><span class="n">grib_get</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="s1">'pv'</span><span class="p">,</span><span class="n">pv</span><span class="p">)</span> +<a name="ln-199"></a> <span class="n">AK</span><span class="o">=</span><span class="n">PV</span><span class="p">(</span><span class="mi">1</span><span class="p">:</span><span class="mi">1</span><span class="o">+</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-200"></a> <span class="n">BK</span><span class="o">=</span><span class="n">PV</span><span class="p">(</span><span class="mi">2</span><span class="o">+</span><span class="n">MLEVEL</span><span class="p">:</span><span class="mi">2</span><span class="o">*</span><span class="n">MLEVEL</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-201"></a> +<a name="ln-202"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">LNPMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span> +<a name="ln-203"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">LNPMN2</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span> +<a name="ln-204"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">UGVG</span><span class="p">(</span><span class="n">NGI</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">MLEVEL</span><span class="p">),</span><span class="n">HILFUV</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">MAXL</span><span class="p">,</span><span class="mi">2</span><span class="p">))</span> +<a name="ln-205"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">DPSDL</span><span class="p">(</span><span class="n">NGI</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="n">DPSDM</span><span class="p">(</span><span class="n">NGI</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span> +<a name="ln-206"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">PSG</span><span class="p">(</span><span class="n">NGI</span><span class="p">),</span><span class="n">HILF</span><span class="p">(</span><span class="n">NGI</span><span class="p">))</span> +<a name="ln-207"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">UV</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span> <span class="n">MAXB</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">MLEVEL</span><span class="p">))</span> +<a name="ln-208"></a><span class="c">! ALLOCATE (UV2(MAXL, MAXB, 2*MLEVEL))</span> +<a name="ln-209"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">XMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">MLEVEL</span><span class="p">))</span> +<a name="ln-210"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">DG</span><span class="p">(</span><span class="n">NGI</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">),</span><span class="n">ETAG</span><span class="p">(</span><span class="n">NGI</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">))</span> +<a name="ln-211"></a> +<a name="ln-212"></a><span class="c">!! Initialisieren Legendretransformation auf das LaT/LON Gitter </span> +<a name="ln-213"></a> +<a name="ln-214"></a> <span class="n">PI</span><span class="o">=</span><span class="nb">ACOS</span><span class="p">(</span><span class="o">-</span><span class="mf">1.D0</span><span class="p">)</span> +<a name="ln-215"></a> +<a name="ln-216"></a><span class="c">!$OMP PARALLEL DO</span> +<a name="ln-217"></a> <span class="k">DO </span><span class="mi">20</span> <span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXB</span> +<a name="ln-218"></a> <span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">=</span><span class="nb">SIN</span><span class="p">((</span><span class="n">RLA1</span><span class="o">-</span><span class="p">(</span><span class="n">J</span><span class="o">-</span><span class="mf">1.D0</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">RLA1</span><span class="o">-</span><span class="n">RLA0</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">MAXB</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span><span class="o">*</span> <span class="n">PI</span><span class="o">/</span><span class="mi">18</span><span class="mf">0.D0</span><span class="p">)</span> +<a name="ln-219"></a> <span class="k">CALL </span><span class="n">PLGNFA</span><span class="p">(</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="n">Z</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">J</span><span class="p">))</span> +<a name="ln-220"></a><span class="mi">20</span> <span class="k">CONTINUE</span> +<a name="ln-221"></a><span class="c">!$OMP END PARALLEL DO</span> +<a name="ln-222"></a> +<a name="ln-223"></a><span class="c">! Avoid possible Pole problem</span> +<a name="ln-224"></a><span class="c">! IF (RLA0 .EQ. -90.0) BREITE(MAXB)=sin(-89.99*PI/180.d0)</span> +<a name="ln-225"></a><span class="c">! IF (RLA1 .EQ. 90.0) BREITE(1)=sin(89.99*PI/180.d0)</span> +<a name="ln-226"></a> +<a name="ln-227"></a><span class="c">!* Initialisation of fields for FFT and Legendre transformation</span> +<a name="ln-228"></a><span class="c">! to Gaussian grid and back to phase space</span> +<a name="ln-229"></a> <span class="n">X1</span><span class="o">=-</span><span class="mf">1.D0</span> +<a name="ln-230"></a> <span class="n">X2</span><span class="o">=</span><span class="mf">1.D0</span> +<a name="ln-231"></a> <span class="k">CALL </span><span class="n">GAULEG</span><span class="p">(</span><span class="n">X1</span><span class="p">,</span><span class="n">X2</span><span class="p">,</span><span class="n">GBREITE</span><span class="p">,</span><span class="n">WEIGHT</span><span class="p">,</span><span class="n">NGJ</span><span class="p">)</span> +<a name="ln-232"></a> +<a name="ln-233"></a><span class="c">!$OMP PARALLEL DO PRIVATE(M)</span> +<a name="ln-234"></a> <span class="k">DO </span><span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">NGJ</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-235"></a> <span class="k">CALL </span><span class="n">PLGNFA</span><span class="p">(</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">GBREITE</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="n">P</span><span class="p">(:,</span><span class="n">J</span><span class="p">))</span> +<a name="ln-236"></a> <span class="k">DO </span><span class="n">M</span><span class="o">=</span><span class="mi">0</span><span class="p">,(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-237"></a> <span class="n">PP</span><span class="p">(</span><span class="n">J</span><span class="p">,</span><span class="n">M</span><span class="p">)</span><span class="o">=</span><span class="n">P</span><span class="p">(</span><span class="n">M</span><span class="p">,</span><span class="n">J</span><span class="p">)</span> +<a name="ln-238"></a> <span class="k">END DO</span> +<a name="ln-239"></a><span class="k"> END DO</span> +<a name="ln-240"></a><span class="c">!$OMP END PARALLEL DO</span> +<a name="ln-241"></a> +<a name="ln-242"></a><span class="c">! MPAR(1)=152</span> +<a name="ln-243"></a> <span class="n">FILENAME</span><span class="o">=</span><span class="s1">'fort.12'</span> +<a name="ln-244"></a><span class="c">!! read LNSP in SH</span> +<a name="ln-245"></a> <span class="k">CALL </span><span class="n">READSPECTRAL</span><span class="p">(</span><span class="n">FILENAME</span><span class="p">,</span><span class="n">LNPMN</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,(</span><span class="o">/</span><span class="mi">152</span><span class="o">/</span><span class="p">),</span><span class="n">AK</span><span class="p">,</span><span class="n">BK</span><span class="p">)</span> +<a name="ln-246"></a> <span class="k">CALL </span><span class="n">SET99</span><span class="p">(</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">mauf</span><span class="p">)</span> +<a name="ln-247"></a> <span class="k">CALL </span><span class="n">PHGCUT</span><span class="p">(</span><span class="n">LNPMN</span><span class="p">,</span><span class="n">PS</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="n">MANF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-248"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="nb">EXP</span><span class="p">(</span><span class="n">PS</span><span class="p">),</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-249"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A,T20,3F12.4)'</span><span class="p">)</span> <span class="s1">'STATISTICS PS: '</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-250"></a> +<a name="ln-251"></a> <span class="k">DO </span><span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">NGJ</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-252"></a> <span class="k">CALL </span><span class="n">SET99</span><span class="p">(</span><span class="n">GWSAVE</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">),</span><span class="n">GIFAX</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">),</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">))</span> +<a name="ln-253"></a> <span class="k">END DO</span> +<a name="ln-254"></a><span class="k"> CALL </span><span class="n">PHGR213</span><span class="p">(</span><span class="n">LNPMN</span><span class="p">,</span><span class="n">HILF</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">GIFAX</span><span class="p">,</span><span class="n">P</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">NGI</span><span class="p">,</span><span class="n">NGJ</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-255"></a> <span class="n">PSG</span><span class="o">=</span><span class="n">HILF</span> +<a name="ln-256"></a> <span class="k">CALL </span><span class="n">GRPH213</span><span class="p">(</span><span class="n">LNPMN2</span><span class="p">,</span><span class="n">PSG</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">GIFAX</span><span class="p">,</span><span class="n">PP</span><span class="p">,</span><span class="n">WEIGHT</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">NGI</span><span class="p">,</span><span class="n">NGJ</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-257"></a> <span class="k">CALL </span><span class="n">PHGR213</span><span class="p">(</span><span class="n">LNPMN2</span><span class="p">,</span><span class="n">HILF</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">GIFAX</span><span class="p">,</span><span class="n">P</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">NGI</span><span class="p">,</span><span class="n">NGJ</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-258"></a> +<a name="ln-259"></a> +<a name="ln-260"></a> <span class="n">HILF</span><span class="o">=</span><span class="nb">exp</span><span class="p">(</span><span class="n">PSG</span><span class="p">)</span><span class="o">-</span><span class="nb">exp</span><span class="p">(</span><span class="n">HILF</span><span class="p">)</span> +<a name="ln-261"></a> +<a name="ln-262"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">NGI</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">HILF</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-263"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A,T20,3F12.4)'</span><span class="p">)</span> <span class="s1">'STATISTICS ratio of PS: '</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-264"></a> +<a name="ln-265"></a> <span class="n">PSG</span><span class="o">=</span><span class="nb">EXP</span><span class="p">(</span><span class="n">PSG</span><span class="p">)</span> +<a name="ln-266"></a> <span class="n">HILF</span><span class="o">=</span><span class="n">PSG</span> +<a name="ln-267"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">NGI</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">HILF</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-268"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A,T20,3F12.4)'</span><span class="p">)</span> <span class="s1">'STATISTICS PSG: '</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-269"></a> +<a name="ln-270"></a><span class="mi">111</span> <span class="n">FILENAME</span><span class="o">=</span><span class="s1">'fort.10'</span> +<a name="ln-271"></a><span class="c">!! read u,v in SH</span> +<a name="ln-272"></a> <span class="k">CALL </span><span class="n">READSPECTRAL</span><span class="p">(</span><span class="n">FILENAME</span><span class="p">,</span><span class="n">XMN</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="mi">2</span><span class="o">*</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,(</span><span class="o">/</span><span class="mi">131</span><span class="p">,</span><span class="mi">132</span><span class="o">/</span><span class="p">),</span><span class="n">AK</span><span class="p">,</span><span class="n">BK</span><span class="p">)</span> +<a name="ln-273"></a> +<a name="ln-274"></a><span class="c">!! Transformieren des Windes auf das Gaussgitter </span> +<a name="ln-275"></a> <span class="k">CALL </span><span class="n">PHGR213</span><span class="p">(</span><span class="n">XMN</span><span class="p">,</span><span class="n">UGVG</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">GIFAX</span><span class="p">,</span><span class="n">P</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">NGI</span><span class="p">,</span><span class="n">NGJ</span><span class="p">,</span><span class="mi">2</span><span class="o">*</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-276"></a> <span class="k">DO </span><span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span> +<a name="ln-277"></a><span class="c">! North Pole</span> +<a name="ln-278"></a> <span class="k">CALL </span><span class="n">JSPPOLE</span><span class="p">(</span><span class="n">XMN</span><span class="p">(:,</span><span class="n">K</span><span class="p">),</span><span class="mi">1</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,.</span><span class="n">TRUE</span><span class="p">.,</span><span class="n">CUA</span><span class="p">(:,:,</span><span class="n">K</span><span class="p">))</span> +<a name="ln-279"></a> <span class="k">CALL </span><span class="n">JSPPOLE</span><span class="p">(</span><span class="n">XMN</span><span class="p">(:,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="n">K</span><span class="p">),</span><span class="mi">1</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,.</span><span class="n">TRUE</span><span class="p">.,</span><span class="n">CVA</span><span class="p">(:,:,</span><span class="n">K</span><span class="p">))</span> +<a name="ln-280"></a><span class="c">! South Pole</span> +<a name="ln-281"></a> <span class="k">CALL </span><span class="n">JSPPOLE</span><span class="p">(</span><span class="n">XMN</span><span class="p">(:,</span><span class="n">K</span><span class="p">),</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,.</span><span class="n">TRUE</span><span class="p">.,</span><span class="n">CUA</span><span class="p">(:,</span><span class="mi">3</span><span class="p">:</span><span class="mi">4</span><span class="p">,</span><span class="n">K</span><span class="p">))</span> +<a name="ln-282"></a> <span class="k">CALL </span><span class="n">JSPPOLE</span><span class="p">(</span><span class="n">XMN</span><span class="p">(:,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="n">K</span><span class="p">),</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,.</span><span class="n">TRUE</span><span class="p">.,</span><span class="n">CVA</span><span class="p">(:,</span><span class="mi">3</span><span class="p">:</span><span class="mi">4</span><span class="p">,</span><span class="n">K</span><span class="p">))</span> +<a name="ln-283"></a> <span class="k">END DO</span> +<a name="ln-284"></a> +<a name="ln-285"></a><span class="k"> DO </span><span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="o">*</span><span class="n">MLEVEL</span> +<a name="ln-286"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MSMOOTH</span> <span class="p">.</span><span class="n">ne</span><span class="p">.</span> <span class="mi">0</span><span class="p">)</span> <span class="k">CALL </span><span class="n">SPFILTER</span><span class="p">(</span><span class="n">XMN</span><span class="p">(:,</span><span class="n">K</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MSMOOTH</span><span class="p">)</span> +<a name="ln-287"></a> <span class="k">END DO</span> +<a name="ln-288"></a><span class="k"> CALL </span><span class="n">PHGCUT</span><span class="p">(</span><span class="n">XMN</span><span class="p">,</span><span class="n">UV</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="n">MANF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">2</span><span class="o">*</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-289"></a> +<a name="ln-290"></a> +<a name="ln-291"></a><span class="mi">112</span> <span class="n">FILENAME</span><span class="o">=</span><span class="s1">'fort.13'</span> +<a name="ln-292"></a><span class="c">!! read DIV in SH</span> +<a name="ln-293"></a> <span class="k">CALL </span><span class="n">READSPECTRAL</span><span class="p">(</span><span class="n">FILENAME</span><span class="p">,</span><span class="n">XMN</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,(</span><span class="o">/</span><span class="mi">155</span><span class="o">/</span><span class="p">),</span><span class="n">AK</span><span class="p">,</span><span class="n">BK</span><span class="p">)</span> +<a name="ln-294"></a><span class="c">!! Transformieren der horizontalen Divergenz auf das Gaussgitter </span> +<a name="ln-295"></a> <span class="k">CALL </span><span class="n">PHGR213</span><span class="p">(</span><span class="n">XMN</span><span class="p">,</span><span class="n">DG</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">GIFAX</span><span class="p">,</span><span class="n">P</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">NGI</span><span class="p">,</span><span class="n">NGJ</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-296"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">DG</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-297"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A,T20,3p,3F12.4)'</span><span class="p">)</span> <span class="s1">'STATISTICS DG-PS: '</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-298"></a> +<a name="ln-299"></a><span class="c">!! Berechnung des Gradienten des Logarithmus des Bodendrucks auf dem Gaussgitter </span> +<a name="ln-300"></a> <span class="k">CALL </span><span class="n">PHGRAD</span><span class="p">(</span><span class="n">LNPMN</span><span class="p">,</span><span class="n">DPSDL</span><span class="p">,</span><span class="n">DPSDM</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">GIFAX</span><span class="p">,</span><span class="n">P</span><span class="p">,</span><span class="n">H</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">NGI</span><span class="p">,</span><span class="n">NGJ</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-301"></a> +<a name="ln-302"></a><span class="c">!! Berechnung der Vertikalgeschwindigkeit auf dem Gaussgitter </span> +<a name="ln-303"></a> <span class="k">CALL </span><span class="n">CONTGL</span><span class="p">(</span><span class="n">HILF</span><span class="p">,</span><span class="n">DPSDL</span><span class="p">,</span><span class="n">DPSDM</span><span class="p">,</span><span class="n">DG</span><span class="p">,</span><span class="n">UGVG</span><span class="p">(:,</span><span class="mi">1</span><span class="p">),</span><span class="n">UGVG</span><span class="p">(:,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span> <span class="p">&</span> +<a name="ln-304"></a> <span class="n">GBREITE</span><span class="p">,</span><span class="n">ETAG</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">AK</span><span class="p">,</span><span class="n">BK</span><span class="p">,</span><span class="n">NGI</span><span class="p">,</span><span class="n">NGJ</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-305"></a><span class="c">! note that HILF is ps on input and dpsdt*ps on output</span> +<a name="ln-306"></a> +<a name="ln-307"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">ETAG</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-308"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A,T20,3p,3F12.4)'</span><span class="p">)</span> <span class="s1">'STATISTICS ETAG-PS: '</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-309"></a> <span class="k">CALL </span><span class="n">GRPH213</span><span class="p">(</span><span class="n">XMN</span><span class="p">,</span><span class="n">ETAG</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">GIFAX</span><span class="p">,</span><span class="n">PP</span><span class="p">,</span><span class="n">WEIGHT</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">NGI</span><span class="p">,</span><span class="n">NGJ</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-310"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">ETAG</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-311"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A,T20,3p,3F12.4)'</span><span class="p">)</span> <span class="s1">'STATISTICS ETAG-PS: '</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-312"></a> <span class="k">DO </span><span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span> +<a name="ln-313"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MSMOOTH</span> <span class="p">.</span><span class="n">ne</span><span class="p">.</span> <span class="mi">0</span><span class="p">)</span> <span class="k">CALL </span><span class="n">SPFILTER</span><span class="p">(</span><span class="n">XMN</span><span class="p">(:,</span><span class="n">K</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MSMOOTH</span><span class="p">)</span> +<a name="ln-314"></a> <span class="k">END DO</span> +<a name="ln-315"></a> +<a name="ln-316"></a><span class="k"> CALL </span><span class="n">PHGCUT</span><span class="p">(</span><span class="n">XMN</span><span class="p">,</span><span class="n">ETA</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="n">MANF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-317"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">ETA</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-318"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A,T20,3p,3F12.4)'</span><span class="p">)</span> <span class="s1">'STATISTICS ETA-PS: '</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-319"></a> +<a name="ln-320"></a> <span class="k">CALL </span><span class="n">GRPH213</span><span class="p">(</span><span class="n">XMN</span><span class="p">,</span><span class="n">HILF</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">GIFAX</span><span class="p">,</span><span class="n">PP</span><span class="p">,</span><span class="n">WEIGHT</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span> <span class="n">MNAUF</span><span class="p">,</span><span class="n">NGI</span><span class="p">,</span><span class="n">NGJ</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-321"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">HILF</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-322"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A,T20,3p,3F12.4)'</span><span class="p">)</span> <span class="s1">'STATISTICS HILF-PS: '</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-323"></a> +<a name="ln-324"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MSMOOTH</span> <span class="p">.</span><span class="n">ne</span><span class="p">.</span> <span class="mi">0</span><span class="p">)</span> <span class="k">CALL </span><span class="n">SPFILTER</span><span class="p">(</span><span class="n">XMN</span><span class="p">(:,</span><span class="mi">1</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MSMOOTH</span><span class="p">)</span> +<a name="ln-325"></a> <span class="k">CALL </span><span class="n">PHGCUT</span><span class="p">(</span><span class="n">XMN</span><span class="p">,</span><span class="n">DPSDT</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="n">MANF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-326"></a> +<a name="ln-327"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">DPSDT</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-328"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A,T20,3F12.4)'</span><span class="p">)</span> <span class="s1">'STATISTICS DPSDT: '</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-329"></a> +<a name="ln-330"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MOMEGADIFF</span> <span class="p">.</span><span class="n">ne</span><span class="p">.</span> <span class="mi">0</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-331"></a><span class="c">!! Berechnung von Omega auf dem Gaussgitter </span> +<a name="ln-332"></a> +<a name="ln-333"></a> <span class="k">CALL </span><span class="n">OMEGA</span><span class="p">(</span><span class="n">PSG</span><span class="p">,</span><span class="n">DPSDL</span><span class="p">,</span><span class="n">DPSDM</span><span class="p">,</span><span class="n">DG</span><span class="p">,</span><span class="n">UGVG</span><span class="p">(:,</span><span class="mi">1</span><span class="p">),</span><span class="n">UGVG</span><span class="p">(:,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span> <span class="p">&</span> +<a name="ln-334"></a> <span class="n">GBREITE</span><span class="p">,</span><span class="n">ETAG</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">AK</span><span class="p">,</span><span class="n">BK</span><span class="p">,</span><span class="n">NGI</span> <span class="p">,</span><span class="n">NGJ</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-335"></a> <span class="k">CALL </span><span class="n">GRPH213</span><span class="p">(</span><span class="n">XMN</span><span class="p">,</span><span class="n">ETAG</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">GIFAX</span><span class="p">,</span><span class="n">PP</span><span class="p">,</span><span class="n">WEIGHT</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">NGI</span><span class="p">,</span><span class="n">NGJ</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-336"></a> <span class="k">DO </span><span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span> +<a name="ln-337"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MSMOOTH</span> <span class="p">.</span><span class="n">ne</span><span class="p">.</span> <span class="mi">0</span><span class="p">)</span> <span class="k">CALL </span><span class="n">SPFILTER</span><span class="p">(</span><span class="n">XMN</span><span class="p">(:,</span><span class="n">K</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MSMOOTH</span><span class="p">)</span> +<a name="ln-338"></a> <span class="k">END DO</span> +<a name="ln-339"></a><span class="k"> CALL </span><span class="n">PHGCUT</span><span class="p">(</span><span class="n">XMN</span><span class="p">,</span><span class="n">OM</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="n">MANF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-340"></a> +<a name="ln-341"></a> <span class="k">END IF</span> <span class="c">! MOMEGA</span> +<a name="ln-342"></a> +<a name="ln-343"></a> <span class="k">CALL </span><span class="n">GRPH213</span><span class="p">(</span><span class="n">XMN</span><span class="p">,</span><span class="n">PSG</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">GIFAX</span><span class="p">,</span><span class="n">PP</span><span class="p">,</span><span class="n">WEIGHT</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">NGI</span><span class="p">,</span><span class="n">NGJ</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-344"></a> +<a name="ln-345"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">PSG</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-346"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A,T20,3F12.4)'</span><span class="p">)</span> <span class="s1">'STATISTICS PSG-PS: '</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-347"></a> +<a name="ln-348"></a> <span class="k">CALL </span><span class="n">PHGCUT</span><span class="p">(</span><span class="n">XMN</span><span class="p">,</span><span class="n">PS</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="n">MANF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-349"></a> +<a name="ln-350"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">PS</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-351"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A,T20,3F12.4)'</span><span class="p">)</span> <span class="s1">'STATISTICS PS: '</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-352"></a> +<a name="ln-353"></a><span class="mi">114</span> <span class="k">DEALLOCATE</span><span class="p">(</span><span class="n">HILF</span><span class="p">,</span><span class="n">PSG</span><span class="p">,</span><span class="n">DPSDL</span><span class="p">,</span><span class="n">DPSDM</span><span class="p">,</span><span class="n">ETAG</span><span class="p">,</span><span class="n">DG</span><span class="p">,</span><span class="n">LNPMN</span><span class="p">)</span> +<a name="ln-354"></a> +<a name="ln-355"></a><span class="c">! ALLOCATE (UV(MAXL, MAXB, 2*MLEVEL))</span> +<a name="ln-356"></a><span class="c">! CALL GRPH213(XMN,UGVG,GWSAVE,GIFAX,PP,WEIGHT,MLAT,</span> +<a name="ln-357"></a><span class="c">! *MNAUF,NGI,NGJ,2*MLEVEL)</span> +<a name="ln-358"></a><span class="c">! DO K=1,2*MLEVEL</span> +<a name="ln-359"></a><span class="c">! IF (MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH)</span> +<a name="ln-360"></a><span class="c">! END DO</span> +<a name="ln-361"></a><span class="c">! CALL PHGCUT(XMN,UV,WSAVE,IFAX,Z,</span> +<a name="ln-362"></a><span class="c">! *MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,2*MLEVEL)</span> +<a name="ln-363"></a> <span class="k">DEALLOCATE</span><span class="p">(</span><span class="n">PP</span><span class="p">,</span><span class="n">P</span><span class="p">,</span><span class="n">UGVG</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">GBREITE</span><span class="p">,</span><span class="n">WEIGHT</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">XMN</span><span class="p">)</span> +<a name="ln-364"></a><span class="c">! CALL ETAGAUSS(Z,WSAVE</span> +<a name="ln-365"></a><span class="c">! *,BREITE,UV,ETA,OM,PS,</span> +<a name="ln-366"></a><span class="c">! *MAUF,MAXB,MAXL,MANF,MNAUF,MLEVEL,MSMOOTH)</span> +<a name="ln-367"></a> +<a name="ln-368"></a> <span class="k">ELSE</span> +<a name="ln-369"></a> +<a name="ln-370"></a><span class="c">!-----------------------------------------------------------------</span> +<a name="ln-371"></a><span class="c">! READING OF PREPARED METEOROLOGICAL FIELDS </span> +<a name="ln-372"></a><span class="c">! </span> +<a name="ln-373"></a><span class="c">! THE FOLLOWING FIELDS ARE EXPECTED: </span> +<a name="ln-374"></a><span class="c">! </span> +<a name="ln-375"></a><span class="c">! UNIT 11: T,U,V (REGULAR GRID) </span> +<a name="ln-376"></a><span class="c">! UNIT 17: Q (REGULAR GRID) </span> +<a name="ln-377"></a><span class="c">! UNIT 13: D (REGULAR GRID) </span> +<a name="ln-378"></a><span class="c">! UNIT 12: LNSP (SPHERICAL HARMONICS) </span> +<a name="ln-379"></a><span class="c">! UNIT 14: SURFACE DATA (REGULAR GRID) </span> +<a name="ln-380"></a><span class="c">! UNIT 16: FLUX DATA (REGULAR GRID) </span> +<a name="ln-381"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-382"></a> +<a name="ln-383"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">MLAT</span><span class="p">(</span><span class="n">MAXB</span><span class="p">))</span> +<a name="ln-384"></a> <span class="n">MLAT</span><span class="o">=</span><span class="n">MAXL</span> +<a name="ln-385"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">Z</span><span class="p">(</span><span class="mi">0</span><span class="p">:((</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span> +<a name="ln-386"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">DPSDL</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">),</span><span class="n">DPSDM</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">))</span> +<a name="ln-387"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">UV</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span> <span class="n">MAXB</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">MLEVEL</span><span class="p">),</span><span class="n">DIV</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">))</span> +<a name="ln-388"></a> +<a name="ln-389"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-390"></a><span class="c">!! READING OF SURFACE PRESSURE </span> +<a name="ln-391"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-392"></a> +<a name="ln-393"></a> <span class="n">FILENAME</span><span class="o">=</span><span class="s1">'fort.12'</span> +<a name="ln-394"></a> <span class="k">CALL </span><span class="n">READSPECTRAL</span><span class="p">(</span><span class="n">FILENAME</span><span class="p">,</span><span class="n">LNPS</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,(</span><span class="o">/</span><span class="mi">152</span><span class="o">/</span><span class="p">),</span><span class="n">AK</span><span class="p">,</span><span class="n">BK</span><span class="p">)</span> +<a name="ln-395"></a> +<a name="ln-396"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-397"></a><span class="c">!! READING OF U,V </span> +<a name="ln-398"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-399"></a> +<a name="ln-400"></a><span class="c">! OPENING OF UNBLOCKED GRIB FILE</span> +<a name="ln-401"></a> +<a name="ln-402"></a> <span class="n">FILENAME</span><span class="o">=</span><span class="s1">'fort.10'</span> +<a name="ln-403"></a> <span class="k">CALL </span><span class="n">READLATLON</span><span class="p">(</span><span class="n">FILENAME</span><span class="p">,</span><span class="n">UV</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">2</span><span class="o">*</span><span class="n">MLEVEL</span><span class="p">,(</span><span class="o">/</span><span class="mi">131</span><span class="p">,</span><span class="mi">132</span><span class="o">/</span><span class="p">))</span> +<a name="ln-404"></a> +<a name="ln-405"></a> <span class="n">PI</span><span class="o">=</span><span class="nb">ACOS</span><span class="p">(</span><span class="o">-</span><span class="mf">1.D0</span><span class="p">)</span> +<a name="ln-406"></a> <span class="k">DO </span><span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXB</span> +<a name="ln-407"></a> <span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">=</span><span class="nb">SIN</span><span class="p">((</span><span class="n">RLA1</span><span class="o">-</span><span class="p">(</span><span class="n">J</span><span class="o">-</span><span class="mf">1.D0</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">RLA1</span><span class="o">-</span><span class="n">RLA0</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">MAXB</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span><span class="o">*</span><span class="n">PI</span><span class="o">/</span><span class="mi">18</span><span class="mf">0.D0</span><span class="p">)</span> +<a name="ln-408"></a> <span class="k">END DO</span> +<a name="ln-409"></a> +<a name="ln-410"></a><span class="c">! Avoid possible Pole problem</span> +<a name="ln-411"></a><span class="c">! IF (RLA0 .EQ. -90.0) BREITE(MAXB)=sin(-89.99*PI/180.d0)</span> +<a name="ln-412"></a><span class="c">! IF (RLA1 .EQ. 90.0) BREITE(1)=sin(89.99*PI/180.d0)</span> +<a name="ln-413"></a> +<a name="ln-414"></a> <span class="k">DO </span><span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="o">*</span><span class="n">MLEVEL</span> +<a name="ln-415"></a> <span class="k">DO </span><span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXB</span> +<a name="ln-416"></a> <span class="n">COSB</span><span class="o">=</span><span class="nb">SQRT</span><span class="p">(</span><span class="mf">1.0</span><span class="o">-</span><span class="p">(</span><span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">))</span><span class="o">*</span><span class="p">(</span><span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">)))</span> +<a name="ln-417"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">RLA0</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="o">-</span><span class="mi">9</span><span class="mf">0.0</span> <span class="p">.</span><span class="nb">AND</span><span class="p">.</span> <span class="n">J</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="n">MAXB</span> <span class="p">.</span><span class="nb">OR</span><span class="p">.</span> <span class="p">&</span> +<a name="ln-418"></a> <span class="n">RLA1</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">9</span><span class="mf">0.0</span> <span class="p">.</span><span class="nb">AND</span><span class="p">.</span> <span class="n">J</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">1</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-419"></a><span class="k"> </span><span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">/</span><span class="mf">1.D6</span> +<a name="ln-420"></a> <span class="k">ELSE</span> +<a name="ln-421"></a><span class="k"> </span><span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">COSB</span> +<a name="ln-422"></a> <span class="k">END IF</span> +<a name="ln-423"></a><span class="k"> END DO</span> +<a name="ln-424"></a><span class="k"> END DO</span> +<a name="ln-425"></a> +<a name="ln-426"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-427"></a><span class="c">!! READING OF LNSP on grid </span> +<a name="ln-428"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-429"></a> +<a name="ln-430"></a><span class="c">! For debugging only</span> +<a name="ln-431"></a><span class="c">! FILENAME='LNSPG_G.20060330.600'</span> +<a name="ln-432"></a><span class="c">! INQUIRE(FILE=FILENAME,EXIST=EX)</span> +<a name="ln-433"></a><span class="c">! CALL READLATLON(FILENAME,QA,</span> +<a name="ln-434"></a><span class="c">! *MAXL,MAXB,1,1,(/152/))</span> +<a name="ln-435"></a> +<a name="ln-436"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-437"></a><span class="c">!! READING OF DIVERGENCE </span> +<a name="ln-438"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-439"></a> +<a name="ln-440"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">META</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">0</span> <span class="p">.</span><span class="nb">OR</span><span class="p">.</span> <span class="n">METADIFF</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">1</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-441"></a><span class="k"> </span><span class="n">FILENAME</span><span class="o">=</span><span class="s1">'fort.13'</span> +<a name="ln-442"></a> <span class="k">CALL </span><span class="n">READLATLON</span><span class="p">(</span><span class="n">FILENAME</span><span class="p">,</span><span class="n">DIV</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,(</span><span class="o">/</span><span class="mi">155</span><span class="o">/</span><span class="p">))</span> +<a name="ln-443"></a> <span class="k">END IF</span> +<a name="ln-444"></a> +<a name="ln-445"></a> +<a name="ln-446"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-447"></a><span class="c">!</span> +<a name="ln-448"></a><span class="c">! Calculation of etapoint --> total time derivative of </span> +<a name="ln-449"></a><span class="c">! ECMWF vertical coordinate eta multiplied by the derivative</span> +<a name="ln-450"></a><span class="c">! of pressure with respect to eta:</span> +<a name="ln-451"></a><span class="c">! \[\frac{\mathrm{d}\eta}{\mathrm{d}t}\frac{\partial p}{\partial \eta}\]</span> +<a name="ln-452"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-453"></a> +<a name="ln-454"></a><span class="c">!* Initialisieren Legendretransformation auf das LaT/LON Gitter</span> +<a name="ln-455"></a><span class="c">!! Without Gaussian grid calculation Legendre Polynomials are calculated</span> +<a name="ln-456"></a><span class="c">!! only for one latitude to save space</span> +<a name="ln-457"></a> +<a name="ln-458"></a> +<a name="ln-459"></a> +<a name="ln-460"></a> <span class="k">DO </span><span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXB</span> +<a name="ln-461"></a> <span class="k">CALL </span><span class="n">PLGNFA</span><span class="p">(</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="n">Z</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span> +<a name="ln-462"></a> <span class="k">CALL </span><span class="n">PHGCUT</span><span class="p">(</span><span class="n">LNPS</span><span class="p">,</span><span class="n">PS</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="n">MANF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-463"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">META</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">0</span> <span class="p">.</span><span class="nb">OR</span><span class="p">.</span> <span class="n">METADIFF</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">1</span> <span class="p">)</span> <span class="k">THEN</span> +<a name="ln-464"></a><span class="k"> CALL </span><span class="n">PHGRACUT</span><span class="p">(</span><span class="n">LNPS</span><span class="p">,</span><span class="n">DPSDL</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">DPSDM</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">H</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span> <span class="p">&</span> +<a name="ln-465"></a> <span class="n">MNAUF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">MANF</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-466"></a> <span class="k">END IF</span> +<a name="ln-467"></a><span class="k"> END DO</span> +<a name="ln-468"></a> +<a name="ln-469"></a><span class="k"> </span><span class="n">PS</span><span class="o">=</span><span class="nb">EXP</span><span class="p">(</span><span class="n">PS</span><span class="p">)</span> +<a name="ln-470"></a> +<a name="ln-471"></a><span class="c">! For debugging only</span> +<a name="ln-472"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">PS</span><span class="p">(:,:,</span><span class="mi">1</span><span class="p">),</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-473"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A,T20,3F12.4)'</span><span class="p">)</span> <span class="s1">'STATISTICS: '</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-474"></a> +<a name="ln-475"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MOMEGADIFF</span> <span class="p">.</span><span class="n">ne</span><span class="p">.</span> <span class="mi">0</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-476"></a><span class="k"> CALL </span><span class="n">OMEGA</span><span class="p">(</span><span class="n">PS</span><span class="p">,</span><span class="n">DPSDL</span><span class="p">,</span><span class="n">DPSDM</span><span class="p">,</span><span class="n">DIV</span><span class="p">,</span><span class="n">UV</span><span class="p">(:,:,</span><span class="mi">1</span><span class="p">),</span><span class="n">UV</span><span class="p">(:,:,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span> <span class="p">&</span> +<a name="ln-477"></a> <span class="n">BREITE</span><span class="p">,</span><span class="n">OM</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">AK</span><span class="p">,</span><span class="n">BK</span><span class="p">,</span><span class="n">MAXL</span><span class="o">*</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-478"></a> <span class="k">END IF</span> +<a name="ln-479"></a> +<a name="ln-480"></a><span class="k"> IF</span> <span class="p">(</span><span class="n">META</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">0</span> <span class="p">.</span><span class="nb">OR</span><span class="p">.</span> <span class="n">METADIFF</span> <span class="p">.</span><span class="n">ne</span><span class="p">.</span> <span class="mi">0</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-481"></a><span class="k"> </span><span class="n">DPSDT</span><span class="o">=</span><span class="n">PS</span> +<a name="ln-482"></a> <span class="k">CALL </span><span class="n">CONTGL</span><span class="p">(</span><span class="n">DPSDT</span><span class="p">,</span><span class="n">DPSDL</span><span class="p">,</span><span class="n">DPSDM</span><span class="p">,</span><span class="n">DIV</span><span class="p">,</span><span class="n">UV</span><span class="p">(:,:,</span><span class="mi">1</span><span class="p">),</span><span class="n">UV</span><span class="p">(:,:,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span> <span class="p">&</span> +<a name="ln-483"></a> <span class="n">BREITE</span><span class="p">,</span><span class="n">ETA</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">AK</span><span class="p">,</span><span class="n">BK</span><span class="p">,</span><span class="n">MAXL</span><span class="o">*</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-484"></a> <span class="k">END IF</span> +<a name="ln-485"></a> +<a name="ln-486"></a><span class="k"> END IF</span> <span class="c">! MGAUSS</span> +<a name="ln-487"></a> +<a name="ln-488"></a><span class="c">!! CREATE FILE VERTICAL.EC NEEDED BY POP MODEL </span> +<a name="ln-489"></a> +<a name="ln-490"></a> <span class="k">OPEN</span><span class="p">(</span><span class="mi">21</span><span class="p">,</span><span class="k">FILE</span><span class="o">=</span><span class="s1">'VERTICAL.EC'</span><span class="p">)</span> +<a name="ln-491"></a> <span class="k">WRITE</span><span class="p">(</span><span class="mi">21</span><span class="p">,</span><span class="s1">'(A)'</span><span class="p">)</span> +<a name="ln-492"></a> <span class="k">WRITE</span><span class="p">(</span><span class="mi">21</span><span class="p">,</span><span class="s1">'(A)'</span><span class="p">)</span> <span class="s1">'VERTICAL DISCRETIZATION OF POP MODEL'</span> +<a name="ln-493"></a> <span class="k">WRITE</span><span class="p">(</span><span class="mi">21</span><span class="p">,</span><span class="s1">'(A)'</span><span class="p">)</span> +<a name="ln-494"></a> <span class="k">write</span><span class="p">(</span><span class="mi">21</span><span class="p">,</span><span class="s1">'(i3,a)'</span><span class="p">)</span> <span class="n">MLEVEL</span><span class="p">,</span><span class="s1">' number of layers'</span> +<a name="ln-495"></a> <span class="k">WRITE</span><span class="p">(</span><span class="mi">21</span><span class="p">,</span><span class="s1">'(A)'</span><span class="p">)</span> +<a name="ln-496"></a> <span class="k">WRITE</span><span class="p">(</span><span class="mi">21</span><span class="p">,</span><span class="s1">'(A)'</span><span class="p">)</span> <span class="s1">'* A(NLEV+1)'</span> +<a name="ln-497"></a> <span class="k">WRITE</span><span class="p">(</span><span class="mi">21</span><span class="p">,</span><span class="s1">'(A)'</span><span class="p">)</span> +<a name="ln-498"></a> <span class="k">DO </span><span class="mi">205</span> <span class="n">I</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-499"></a><span class="mi">205</span> <span class="k">WRITE</span><span class="p">(</span><span class="mi">21</span><span class="p">,</span><span class="s1">'(F18.12)'</span><span class="p">)</span> <span class="n">AK</span><span class="p">(</span><span class="n">I</span><span class="p">)</span> +<a name="ln-500"></a> <span class="k">WRITE</span><span class="p">(</span><span class="mi">21</span><span class="p">,</span><span class="s1">'(A)'</span><span class="p">)</span> +<a name="ln-501"></a> <span class="k">WRITE</span><span class="p">(</span><span class="mi">21</span><span class="p">,</span><span class="s1">'(A)'</span><span class="p">)</span> <span class="s1">'* B(NLEV+1)'</span> +<a name="ln-502"></a> <span class="k">WRITE</span><span class="p">(</span><span class="mi">21</span><span class="p">,</span><span class="s1">'(A)'</span><span class="p">)</span> +<a name="ln-503"></a> <span class="k">DO </span><span class="mi">210</span> <span class="n">I</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-504"></a><span class="mi">210</span> <span class="k">WRITE</span><span class="p">(</span><span class="mi">21</span><span class="p">,</span><span class="s1">'(F18.12)'</span><span class="p">)</span> <span class="n">BK</span><span class="p">(</span><span class="n">I</span><span class="p">)</span> +<a name="ln-505"></a> <span class="k">CLOSE</span><span class="p">(</span><span class="mi">21</span><span class="p">)</span> +<a name="ln-506"></a> +<a name="ln-507"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-508"></a><span class="c">! READING OF OMEGA </span> +<a name="ln-509"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-510"></a> +<a name="ln-511"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MOMEGA</span> <span class="p">.</span><span class="n">NE</span><span class="p">.</span> <span class="mi">0</span> <span class="p">)</span> <span class="k">THEN</span> +<a name="ln-512"></a> +<a name="ln-513"></a><span class="k"> ALLOCATE</span> <span class="p">(</span><span class="n">OMR</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span> <span class="n">MAXB</span><span class="p">,</span> <span class="n">MLEVEL</span><span class="p">))</span> +<a name="ln-514"></a> +<a name="ln-515"></a> <span class="n">FILENAME</span><span class="o">=</span><span class="s1">'fort.19'</span> +<a name="ln-516"></a> <span class="k">CALL </span><span class="n">READLATLON</span><span class="p">(</span><span class="n">FILENAME</span><span class="p">,</span><span class="n">OMR</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,(</span><span class="o">/</span><span class="mi">135</span><span class="o">/</span><span class="p">))</span> +<a name="ln-517"></a> +<a name="ln-518"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MOMEGADIFF</span> <span class="p">.</span><span class="n">NE</span><span class="p">.</span> <span class="mi">0</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-519"></a> +<a name="ln-520"></a><span class="k"> DO </span><span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span> +<a name="ln-521"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">ETA</span><span class="p">(:,:,</span><span class="n">K</span><span class="p">),</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-522"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A12,I3,3F12.4)'</span><span class="p">)</span> <span class="s1">' ETA: '</span><span class="p">,</span><span class="n">K</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-523"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">OMR</span><span class="p">(:,:,</span><span class="n">K</span><span class="p">),</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-524"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A12,I3,3F12.4)'</span><span class="p">)</span> <span class="s1">' OMEGA: '</span><span class="p">,</span><span class="n">K</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-525"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">OM</span><span class="p">(:,:,</span><span class="n">K</span><span class="p">)</span><span class="o">-</span><span class="n">OMR</span><span class="p">(:,:,</span><span class="n">K</span><span class="p">),</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-526"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A12,I3,3F12.4)'</span><span class="p">)</span> <span class="s1">'OMEGA DIFF: '</span><span class="p">,</span><span class="n">K</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-527"></a> <span class="k">END DO</span> +<a name="ln-528"></a> +<a name="ln-529"></a><span class="k"> END IF</span> +<a name="ln-530"></a><span class="k"> END IF</span> +<a name="ln-531"></a> +<a name="ln-532"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-533"></a><span class="c">! READING OF ETA </span> +<a name="ln-534"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-535"></a> +<a name="ln-536"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">META</span> <span class="p">.</span><span class="n">NE</span><span class="p">.</span> <span class="mi">0</span> <span class="p">)</span> <span class="k">THEN</span> +<a name="ln-537"></a> +<a name="ln-538"></a><span class="k"> ALLOCATE</span> <span class="p">(</span><span class="n">ETAR</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span> <span class="n">MAXB</span><span class="p">,</span> <span class="n">MLEVEL</span><span class="p">))</span> +<a name="ln-539"></a> +<a name="ln-540"></a> <span class="n">P00</span><span class="o">=</span><span class="mi">10132</span><span class="mf">5.</span> +<a name="ln-541"></a> <span class="n">FILENAME</span><span class="o">=</span><span class="s1">'fort.21'</span> +<a name="ln-542"></a> <span class="k">CALL </span><span class="n">READLATLON</span><span class="p">(</span><span class="n">FILENAME</span><span class="p">,</span><span class="n">ETAR</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,(</span><span class="o">/</span><span class="mi">77</span><span class="o">/</span><span class="p">))</span> +<a name="ln-543"></a> +<a name="ln-544"></a> <span class="k">IF</span><span class="p">(</span><span class="n">MDPDETA</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">1</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-545"></a><span class="k"> DO </span><span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span> +<a name="ln-546"></a> <span class="n">DAK</span><span class="o">=</span><span class="n">AK</span><span class="p">(</span><span class="n">K</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">-</span><span class="n">AK</span><span class="p">(</span><span class="n">K</span><span class="p">)</span> +<a name="ln-547"></a> <span class="n">DBK</span><span class="o">=</span><span class="n">BK</span><span class="p">(</span><span class="n">K</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">-</span><span class="n">BK</span><span class="p">(</span><span class="n">K</span><span class="p">)</span> +<a name="ln-548"></a> <span class="k">DO </span><span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXB</span> +<a name="ln-549"></a> <span class="k">DO </span><span class="n">I</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXL</span> +<a name="ln-550"></a> <span class="n">ETAR</span><span class="p">(</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="mi">2</span><span class="o">*</span><span class="n">ETAR</span><span class="p">(</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">PS</span><span class="p">(</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">DAK</span><span class="o">/</span><span class="n">PS</span><span class="p">(</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="n">DBK</span><span class="p">)</span><span class="o">/</span> <span class="p">&</span> +<a name="ln-551"></a> <span class="p">(</span><span class="n">DAK</span><span class="o">/</span><span class="n">P00</span><span class="o">+</span><span class="n">DBK</span><span class="p">)</span> +<a name="ln-552"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">K</span> <span class="p">.</span><span class="n">GT</span><span class="p">.</span> <span class="mi">1</span><span class="p">)</span> <span class="n">ETAR</span><span class="p">(</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">ETAR</span><span class="p">(</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">-</span><span class="n">ETAR</span><span class="p">(</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-553"></a> <span class="k">END DO</span> +<a name="ln-554"></a><span class="k"> END DO</span> +<a name="ln-555"></a><span class="k"> END DO</span> +<a name="ln-556"></a><span class="k"> END IF</span> +<a name="ln-557"></a> +<a name="ln-558"></a><span class="k"> IF</span> <span class="p">(</span><span class="n">METADIFF</span> <span class="p">.</span><span class="n">NE</span><span class="p">.</span> <span class="mi">0</span> <span class="p">)</span> <span class="k">THEN</span> +<a name="ln-559"></a> +<a name="ln-560"></a><span class="k"> DO </span><span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span> +<a name="ln-561"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">ETA</span><span class="p">(:,:,</span><span class="n">K</span><span class="p">),</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-562"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A12,I3,3F12.4)'</span><span class="p">)</span> <span class="s1">' ETA: '</span><span class="p">,</span><span class="n">K</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-563"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">ETAR</span><span class="p">(:,:,</span><span class="n">K</span><span class="p">),</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-564"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A12,I3,3F12.4)'</span><span class="p">)</span> <span class="s1">' ETAR: '</span><span class="p">,</span><span class="n">K</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-565"></a> <span class="k">CALL </span><span class="n">STATIS</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">ETA</span><span class="p">(:,:,</span><span class="n">K</span><span class="p">)</span><span class="o">-</span><span class="n">ETAR</span><span class="p">(:,:,</span><span class="n">K</span><span class="p">),</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-566"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(A12,I3,3F12.4)'</span><span class="p">)</span> <span class="s1">'ETA DIFF: '</span><span class="p">,</span><span class="n">K</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span> +<a name="ln-567"></a> <span class="k">END DO</span> +<a name="ln-568"></a><span class="k"> DO </span><span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span> +<a name="ln-569"></a> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="s1">'(I3,2F12.4)'</span><span class="p">)</span> <span class="n">K</span><span class="p">,</span><span class="n">ETA</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">K</span><span class="p">),</span><span class="n">ETAR</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-570"></a> <span class="k">END DO</span> +<a name="ln-571"></a><span class="k"> ELSE</span> +<a name="ln-572"></a><span class="k"> </span><span class="n">ETA</span><span class="o">=</span><span class="n">ETAR</span> +<a name="ln-573"></a> <span class="k">END IF</span> +<a name="ln-574"></a><span class="k"> END IF</span> +<a name="ln-575"></a> +<a name="ln-576"></a><span class="k"> ALLOCATE</span> <span class="p">(</span><span class="n">T</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span> <span class="n">MAXB</span><span class="p">,</span> <span class="n">MLEVEL</span><span class="p">))</span> +<a name="ln-577"></a> <span class="k">ALLOCATE</span> <span class="p">(</span><span class="n">QA</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span> <span class="n">MAXB</span><span class="p">,</span> <span class="n">MLEVEL</span><span class="p">))</span> +<a name="ln-578"></a> +<a name="ln-579"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-580"></a><span class="c">!! READING OF T </span> +<a name="ln-581"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-582"></a> +<a name="ln-583"></a><span class="c">! OPENING OF UNBLOCKED GRIB FILE</span> +<a name="ln-584"></a> +<a name="ln-585"></a> <span class="n">FILENAME</span><span class="o">=</span><span class="s1">'fort.11'</span> +<a name="ln-586"></a> <span class="k">CALL </span><span class="n">READLATLON</span><span class="p">(</span><span class="n">FILENAME</span><span class="p">,</span><span class="n">T</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,(</span><span class="o">/</span><span class="mi">130</span><span class="o">/</span><span class="p">))</span> +<a name="ln-587"></a> +<a name="ln-588"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-589"></a><span class="c">!! READING OF SPECIFIC HUMIDITY </span> +<a name="ln-590"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-591"></a> +<a name="ln-592"></a> <span class="n">FILENAME</span><span class="o">=</span><span class="s1">'fort.17'</span> +<a name="ln-593"></a> <span class="k">CALL </span><span class="n">READLATLON</span><span class="p">(</span><span class="n">FILENAME</span><span class="p">,</span><span class="n">QA</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,(</span><span class="o">/</span><span class="mi">133</span><span class="o">/</span><span class="p">))</span> +<a name="ln-594"></a> +<a name="ln-595"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-596"></a><span class="c">! TEST READING OF UV from MARS (debug only) </span> +<a name="ln-597"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-598"></a><span class="c">! FILENAME='fort.22'</span> +<a name="ln-599"></a><span class="c">! CALL READLATLON(FILENAME,UV2,MAXL,MAXB,2*MLEVEL,2,(/131,132/))</span> +<a name="ln-600"></a> +<a name="ln-601"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-602"></a><span class="c">!! WRITE MODEL LEVEL DATA TO fort.15 </span> +<a name="ln-603"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-604"></a> +<a name="ln-605"></a><span class="c">!! Calculation of etadot in CONTGL needed scaled winds (ucosphi,vcosphi)</span> +<a name="ln-606"></a><span class="c">!! Now we are transforming back to the usual winds.</span> +<a name="ln-607"></a> +<a name="ln-608"></a> <span class="k">DO </span><span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span> +<a name="ln-609"></a> <span class="k">DO </span><span class="n">J</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span><span class="n">MAXB</span><span class="o">-</span><span class="mi">1</span> +<a name="ln-610"></a> <span class="n">COSB</span><span class="o">=</span><span class="nb">SQRT</span><span class="p">(</span><span class="mf">1.0</span><span class="o">-</span><span class="p">(</span><span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">))</span><span class="o">*</span><span class="p">(</span><span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">)))</span> +<a name="ln-611"></a> <span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">/</span><span class="n">COSB</span> +<a name="ln-612"></a> <span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="n">K</span><span class="p">)</span><span class="o">/</span><span class="n">COSB</span> +<a name="ln-613"></a> <span class="k">END DO</span> +<a name="ln-614"></a> +<a name="ln-615"></a><span class="c">! special treatment for poles, if necessary.</span> +<a name="ln-616"></a> <span class="k">DO </span><span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MAXB</span><span class="o">-</span><span class="mi">1</span> +<a name="ln-617"></a> <span class="n">COSB</span><span class="o">=</span><span class="nb">SQRT</span><span class="p">(</span><span class="mf">1.0</span><span class="o">-</span><span class="p">(</span><span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">))</span><span class="o">*</span><span class="p">(</span><span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">)))</span> +<a name="ln-618"></a> <span class="k">IF</span> <span class="p">(</span><span class="mf">1.0</span><span class="o">-</span><span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">*</span><span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">)</span> <span class="p">.</span><span class="n">GT</span><span class="p">.</span> <span class="mi">0</span> <span class="p">.</span><span class="nb">OR</span><span class="p">.</span> <span class="n">MGAUSS</span> <span class="p">.</span><span class="n">NE</span><span class="p">.</span> <span class="mi">1</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-619"></a><span class="k"> IF</span> <span class="p">(</span><span class="n">RLA0</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="o">-</span><span class="mi">9</span><span class="mf">0.0</span> <span class="p">.</span><span class="nb">AND</span><span class="p">.</span> <span class="n">J</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="n">MAXB</span> <span class="p">.</span><span class="nb">OR</span><span class="p">.</span> <span class="p">&</span> +<a name="ln-620"></a> <span class="n">RLA1</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">9</span><span class="mf">0.0</span> <span class="p">.</span><span class="nb">AND</span><span class="p">.</span> <span class="n">J</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">1</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-621"></a><span class="k"> </span><span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="mf">1.D6</span> +<a name="ln-622"></a> <span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="mf">1.D6</span> +<a name="ln-623"></a> <span class="k">ELSE</span> +<a name="ln-624"></a><span class="k"> </span><span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">/</span><span class="n">COSB</span> +<a name="ln-625"></a> <span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">UV</span><span class="p">(:,</span><span class="n">J</span><span class="p">,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="n">K</span><span class="p">)</span><span class="o">/</span><span class="n">COSB</span> +<a name="ln-626"></a> <span class="k">END IF</span> +<a name="ln-627"></a><span class="k"> ELSE</span> +<a name="ln-628"></a><span class="k"> </span><span class="n">HILFUV</span><span class="p">(</span><span class="mi">5</span><span class="p">:</span><span class="n">MAXL</span><span class="p">,:)</span><span class="o">=</span><span class="mf">0.</span> +<a name="ln-629"></a> <span class="n">HILFUV</span><span class="p">(</span><span class="mi">1</span><span class="p">:</span><span class="mi">2</span><span class="p">,:)</span><span class="o">=</span><span class="mf">0.</span> +<a name="ln-630"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">J</span><span class="p">.</span><span class="n">EQ</span><span class="p">.</span><span class="n">MAXB</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-631"></a><span class="c">! Suedpol</span> +<a name="ln-632"></a> <span class="n">HILFUV</span><span class="p">(</span><span class="mi">3</span><span class="p">:</span><span class="mi">4</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">CUA</span><span class="p">(:,</span><span class="mi">4</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-633"></a> <span class="n">HILFUV</span><span class="p">(</span><span class="mi">3</span><span class="p">:</span><span class="mi">4</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span><span class="o">=</span><span class="n">CVA</span><span class="p">(:,</span><span class="mi">4</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-634"></a> <span class="k">ELSE</span> +<a name="ln-635"></a><span class="c">! Nordpol</span> +<a name="ln-636"></a> <span class="n">HILFUV</span><span class="p">(</span><span class="mi">3</span><span class="p">:</span><span class="mi">4</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">CUA</span><span class="p">(:,</span><span class="mi">2</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-637"></a> <span class="n">HILFUV</span><span class="p">(</span><span class="mi">3</span><span class="p">:</span><span class="mi">4</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span><span class="o">=</span><span class="n">CVA</span><span class="p">(:,</span><span class="mi">2</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-638"></a> <span class="k">END IF</span> +<a name="ln-639"></a><span class="k"> CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">HILFUV</span><span class="p">(:,</span><span class="mi">1</span><span class="p">),</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">MAXL</span><span class="o">/</span><span class="mi">2</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-640"></a> <span class="k">DO </span><span class="n">I</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">MAXL</span><span class="o">-</span><span class="mi">1</span> +<a name="ln-641"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MANF</span><span class="o">+</span><span class="n">I</span> <span class="p">.</span><span class="n">LE</span><span class="p">.</span> <span class="n">MAXL</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-642"></a><span class="k"> </span><span class="n">UV</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">HILFUV</span><span class="p">(</span><span class="n">MANF</span><span class="o">+</span><span class="n">I</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-643"></a> <span class="k">ELSE</span> +<a name="ln-644"></a><span class="k"> </span><span class="n">UV</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">HILFUV</span><span class="p">(</span><span class="n">MANF</span><span class="o">-</span><span class="n">MAXL</span><span class="o">+</span><span class="n">I</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-645"></a> <span class="k">END IF</span> +<a name="ln-646"></a><span class="k"> END DO</span> +<a name="ln-647"></a><span class="k"> CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">HILFUV</span><span class="p">(:,</span><span class="mi">2</span><span class="p">),</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">MAXL</span><span class="o">/</span><span class="mi">2</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-648"></a> <span class="k">DO </span><span class="n">I</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">MAXL</span><span class="o">-</span><span class="mi">1</span> +<a name="ln-649"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MANF</span><span class="o">+</span><span class="n">I</span> <span class="p">.</span><span class="n">LE</span><span class="p">.</span> <span class="n">MAXL</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-650"></a><span class="k"> </span><span class="n">UV</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">HILFUV</span><span class="p">(</span><span class="n">MANF</span><span class="o">+</span><span class="n">I</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-651"></a> <span class="k">ELSE</span> +<a name="ln-652"></a><span class="k"> </span><span class="n">UV</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">HILFUV</span><span class="p">(</span><span class="n">MANF</span><span class="o">-</span><span class="n">MAXL</span><span class="o">+</span><span class="n">I</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-653"></a> <span class="k">END IF</span> +<a name="ln-654"></a><span class="k"> END DO</span> +<a name="ln-655"></a><span class="k"> end if</span> +<a name="ln-656"></a><span class="k"> END DO</span> +<a name="ln-657"></a><span class="k"> END DO</span> +<a name="ln-658"></a> +<a name="ln-659"></a><span class="c">! open output file</span> +<a name="ln-660"></a> <span class="k">call </span><span class="n">grib_open_file</span><span class="p">(</span><span class="n">LUNIT</span><span class="p">,</span><span class="s1">'fort.15'</span><span class="p">,</span><span class="s1">'w'</span><span class="p">)</span> +<a name="ln-661"></a> +<a name="ln-662"></a><span class="c">! we use temperature on lat/lon on model levels as template for model level data</span> +<a name="ln-663"></a> <span class="n">LUNIT2</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-664"></a> <span class="k">CALL </span><span class="n">GRIB_OPEN_FILE</span><span class="p">(</span><span class="n">LUNIT2</span><span class="p">,</span><span class="s1">'fort.11'</span><span class="p">,</span><span class="s1">'R'</span><span class="p">)</span> +<a name="ln-665"></a> <span class="k">CALL </span><span class="n">GRIB_NEW_FROM_FILE</span><span class="p">(</span><span class="n">LUNIT2</span><span class="p">,</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="n">IRET</span><span class="p">)</span> +<a name="ln-666"></a> <span class="k">CALL </span><span class="n">GRIB_CLOSE_FILE</span><span class="p">(</span><span class="n">LUNIT2</span><span class="p">)</span> +<a name="ln-667"></a> +<a name="ln-668"></a> +<a name="ln-669"></a> <span class="k">CALL </span><span class="n">WRITELATLON</span> <span class="p">&</span> +<a name="ln-670"></a> <span class="p">(</span><span class="n">LUNIT</span><span class="p">,</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="n">OGRIB</span><span class="p">,</span><span class="n">UV</span><span class="p">(:,:,</span><span class="mi">1</span><span class="p">),</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MLEVELIST</span><span class="p">,</span><span class="mi">1</span><span class="p">,(</span><span class="o">/</span><span class="mi">131</span><span class="o">/</span><span class="p">))</span> +<a name="ln-671"></a> +<a name="ln-672"></a> <span class="k">CALL </span><span class="n">WRITELATLON</span> <span class="p">&</span> +<a name="ln-673"></a> <span class="p">(</span><span class="n">LUNIT</span><span class="p">,</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="n">OGRIB</span><span class="p">,</span><span class="n">UV</span><span class="p">(:,:,</span><span class="n">MLEVEL</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MLEVELIST</span><span class="p">,</span><span class="mi">1</span><span class="p">,(</span><span class="o">/</span><span class="mi">132</span><span class="o">/</span><span class="p">))</span> +<a name="ln-674"></a> +<a name="ln-675"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MDPDETA</span> <span class="p">.</span><span class="n">ne</span><span class="p">.</span> <span class="mi">1</span> <span class="p">.</span><span class="nb">AND</span><span class="p">.</span> <span class="n">MGAUSS</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">0</span> <span class="p">.</span><span class="nb">and</span><span class="p">.</span> <span class="n">META</span> <span class="p">.</span><span class="n">eq</span><span class="p">.</span> <span class="mi">1</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-676"></a><span class="k"> CALL </span><span class="n">WRITELATLON</span> <span class="p">&</span> +<a name="ln-677"></a> <span class="p">(</span><span class="n">LUNIT</span><span class="p">,</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="n">OGRIB</span><span class="p">,</span><span class="n">ETA</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MLEVELIST</span><span class="p">,</span><span class="mi">1</span><span class="p">,(</span><span class="o">/</span><span class="mi">77</span><span class="o">/</span><span class="p">))</span> +<a name="ln-678"></a> <span class="k">ELSE</span> +<a name="ln-679"></a><span class="k"> CALL </span><span class="n">WRITELATLON</span> <span class="p">&</span> +<a name="ln-680"></a> <span class="p">(</span><span class="n">LUNIT</span><span class="p">,</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="n">OGRIB</span><span class="p">,</span><span class="n">ETA</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MLEVELIST</span><span class="p">,</span><span class="mi">1</span><span class="p">,(</span><span class="o">/</span><span class="n">METAPAR</span><span class="o">/</span><span class="p">))</span> +<a name="ln-681"></a> <span class="k">END IF</span> +<a name="ln-682"></a> +<a name="ln-683"></a><span class="k"> CALL </span><span class="n">WRITELATLON</span><span class="p">(</span><span class="n">LUNIT</span><span class="p">,</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="n">OGRIB</span><span class="p">,</span><span class="n">T</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MLEVELIST</span><span class="p">,</span><span class="mi">1</span><span class="p">,(</span><span class="o">/</span><span class="mi">130</span><span class="o">/</span><span class="p">))</span> +<a name="ln-684"></a> +<a name="ln-685"></a> <span class="k">CALL </span><span class="n">WRITELATLON</span><span class="p">(</span><span class="n">LUNIT</span><span class="p">,</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="n">OGRIB</span><span class="p">,</span><span class="n">PS</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s1">'1'</span><span class="p">,</span><span class="mi">1</span><span class="p">,(</span><span class="o">/</span><span class="mi">134</span><span class="o">/</span><span class="p">))</span> +<a name="ln-686"></a> +<a name="ln-687"></a> <span class="k">CALL </span><span class="n">GRIB_SET</span><span class="p">(</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="s2">"levelType"</span><span class="p">,</span><span class="s2">"ml"</span><span class="p">)</span> +<a name="ln-688"></a> <span class="k">CALL </span><span class="n">GRIB_SET</span><span class="p">(</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="s2">"typeOfLevel"</span><span class="p">,</span><span class="s2">"hybrid"</span><span class="p">)</span> +<a name="ln-689"></a> <span class="k">CALL </span><span class="n">WRITELATLON</span><span class="p">(</span><span class="n">LUNIT</span><span class="p">,</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="n">OGRIB</span><span class="p">,</span><span class="n">QA</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MLEVELIST</span><span class="p">,</span><span class="mi">1</span><span class="p">,(</span><span class="o">/</span><span class="mi">133</span><span class="o">/</span><span class="p">))</span> +<a name="ln-690"></a> +<a name="ln-691"></a> +<a name="ln-692"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MOMEGA</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">1</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-693"></a><span class="k"> CALL </span><span class="n">GRIB_OPEN_FILE</span><span class="p">(</span><span class="n">LUNIT2</span><span class="p">,</span><span class="s1">'fort.25'</span><span class="p">,</span><span class="s1">'w'</span><span class="p">)</span> +<a name="ln-694"></a> <span class="k">CALL </span><span class="n">WRITELATLON</span> <span class="p">&</span> +<a name="ln-695"></a> <span class="p">(</span><span class="n">LUNIT2</span><span class="p">,</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="n">OGRIB</span><span class="p">,</span><span class="n">OMR</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MLEVELIST</span><span class="p">,</span><span class="mi">1</span><span class="p">,(</span><span class="o">/</span><span class="mi">135</span><span class="o">/</span><span class="p">))</span> +<a name="ln-696"></a> +<a name="ln-697"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MOMEGADIFF</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">1</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-698"></a><span class="k"> CALL </span><span class="n">WRITELATLON</span><span class="p">(</span><span class="n">LUNIT2</span><span class="p">,</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="n">OGRIB</span><span class="p">,</span><span class="n">DPSDT</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s1">'1'</span><span class="p">,</span><span class="mi">1</span><span class="p">,(</span><span class="o">/</span><span class="mi">158</span><span class="o">/</span><span class="p">))</span> +<a name="ln-699"></a> <span class="n">OM</span><span class="o">=</span><span class="n">OM</span><span class="o">-</span><span class="n">OMR</span> +<a name="ln-700"></a> <span class="k">CALL </span><span class="n">WRITELATLON</span> <span class="p">&</span> +<a name="ln-701"></a> <span class="p">(</span><span class="n">LUNIT2</span><span class="p">,</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="n">OGRIB</span><span class="p">,</span><span class="n">OM</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MLEVELIST</span><span class="p">,</span><span class="mi">1</span><span class="p">,(</span><span class="o">/</span><span class="mi">001</span><span class="o">/</span><span class="p">))</span> +<a name="ln-702"></a> <span class="k">CALL </span><span class="n">GRIB_CLOSE_FILE</span><span class="p">(</span><span class="n">LUNIT2</span><span class="p">)</span> +<a name="ln-703"></a> <span class="k">END IF</span> +<a name="ln-704"></a><span class="k"> END IF</span> +<a name="ln-705"></a> +<a name="ln-706"></a><span class="k"> IF</span> <span class="p">(</span><span class="n">META</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">1</span> <span class="p">.</span><span class="nb">AND</span><span class="p">.</span> <span class="n">METADIFF</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">1</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-707"></a><span class="k"> CALL </span><span class="n">GRIB_OPEN_FILE</span><span class="p">(</span><span class="n">LUNIT2</span><span class="p">,</span><span class="s1">'fort.26'</span><span class="p">,</span><span class="s1">'w'</span><span class="p">)</span> +<a name="ln-708"></a> <span class="k">CALL </span><span class="n">WRITELATLON</span> <span class="p">&</span> +<a name="ln-709"></a> <span class="p">(</span><span class="n">LUNIT2</span><span class="p">,</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="n">OGRIB</span><span class="p">,</span><span class="n">ETAR</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MLEVELIST</span><span class="p">,</span><span class="mi">1</span><span class="p">,(</span><span class="o">/</span><span class="mi">135</span><span class="o">/</span><span class="p">))</span> +<a name="ln-710"></a><span class="c">! IF (MOMEGADIFF .EQ. 1) THEN</span> +<a name="ln-711"></a> <span class="k">CALL </span><span class="n">WRITELATLON</span><span class="p">(</span><span class="n">LUNIT2</span><span class="p">,</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="n">OGRIB</span><span class="p">,</span><span class="n">DPSDT</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s1">'1'</span><span class="p">,</span><span class="mi">1</span><span class="p">,(</span><span class="o">/</span><span class="mi">158</span><span class="o">/</span><span class="p">))</span> +<a name="ln-712"></a> <span class="n">OM</span><span class="o">=</span><span class="n">ETA</span><span class="o">-</span><span class="n">ETAR</span> +<a name="ln-713"></a> <span class="k">CALL </span><span class="n">WRITELATLON</span> <span class="p">&</span> +<a name="ln-714"></a> <span class="p">(</span><span class="n">LUNIT2</span><span class="p">,</span><span class="n">IGRIB</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="n">OGRIB</span><span class="p">,</span><span class="n">OM</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MLEVELIST</span><span class="p">,</span><span class="mi">1</span><span class="p">,(</span><span class="o">/</span><span class="mi">001</span><span class="o">/</span><span class="p">))</span> +<a name="ln-715"></a> <span class="k">CALL </span><span class="n">GRIB_CLOSE_FILE</span><span class="p">(</span><span class="n">LUNIT2</span><span class="p">)</span> +<a name="ln-716"></a><span class="c">! END IF</span> +<a name="ln-717"></a> <span class="k">END IF</span> +<a name="ln-718"></a> +<a name="ln-719"></a><span class="k"> CALL </span><span class="n">GRIB_CLOSE_FILE</span><span class="p">(</span><span class="n">LUNIT</span><span class="p">)</span> +<a name="ln-720"></a> +<a name="ln-721"></a><span class="mi">2000</span> <span class="k">STOP</span> <span class="s1">'SUCCESSFULLY FINISHED calc_etadot: CONGRATULATIONS'</span> +<a name="ln-722"></a><span class="mi">3000</span> <span class="k">STOP</span> <span class="s1">'ROUTINE calc_etadot: ERROR'</span> +<a name="ln-723"></a><span class="mi">9999</span> <span class="k">stop</span> <span class="s1">'ROUTINE calc_etadot: ERROR'</span> +<a name="ln-724"></a> +<a name="ln-725"></a><span class="k">END</span> +<a name="ln-726"></a> +<a name="ln-727"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-728"></a><span class="kt">INTEGER </span><span class="k">FUNCTION </span><span class="n">IA</span> <span class="p">(</span><span class="n">FIELD1</span><span class="p">,</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">,</span><span class="n">G</span><span class="p">)</span> +<a name="ln-729"></a> +<a name="ln-730"></a> +<a name="ln-731"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-732"></a><span class="c">!! Calculate something that is roughly log10( maxval(field1)/g ) [PS] </span> +<a name="ln-733"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-734"></a> +<a name="ln-735"></a> +<a name="ln-736"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-737"></a> +<a name="ln-738"></a><span class="k"> </span><span class="kt">INTEGER</span> <span class="kd">::</span> <span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span> +<a name="ln-739"></a> <span class="kt">INTEGER</span><span class="p">,</span> <span class="k">INTENT</span><span class="p">(</span><span class="n">IN</span><span class="p">)</span> <span class="kd">::</span> <span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span> +<a name="ln-740"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">INTENT</span><span class="p">(</span><span class="n">IN</span><span class="p">)</span> <span class="kd">::</span> <span class="n">FIELD1</span><span class="p">(</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-741"></a> <span class="kt">REAL</span><span class="p">,</span> <span class="k">INTENT</span><span class="p">(</span><span class="n">IN</span><span class="p">)</span> <span class="kd">::</span> <span class="n">G</span> +<a name="ln-742"></a> <span class="kt">REAL</span> <span class="kd">::</span> <span class="n">RMIN</span><span class="p">,</span><span class="n">RMAX</span><span class="p">,</span><span class="n">XMAX</span><span class="p">,</span><span class="n">A</span><span class="p">,</span><span class="n">A1</span><span class="p">,</span><span class="n">A2</span> +<a name="ln-743"></a> +<a name="ln-744"></a> <span class="n">RMAX</span><span class="o">=</span><span class="n">FIELD1</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-745"></a> <span class="n">RMIN</span><span class="o">=</span><span class="n">FIELD1</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-746"></a> +<a name="ln-747"></a> <span class="k">DO </span><span class="mi">100</span> <span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">NK</span> +<a name="ln-748"></a> <span class="k">DO </span><span class="mi">100</span> <span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">NJ</span> +<a name="ln-749"></a> <span class="k">DO </span><span class="mi">100</span> <span class="n">I</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">NI</span> +<a name="ln-750"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">FIELD1</span><span class="p">(</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> <span class="p">.</span><span class="n">GT</span><span class="p">.</span> <span class="n">RMAX</span><span class="p">)</span> <span class="n">RMAX</span><span class="o">=</span><span class="n">FIELD1</span><span class="p">(</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-751"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">FIELD1</span><span class="p">(</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> <span class="p">.</span><span class="n">LT</span><span class="p">.</span> <span class="n">RMIN</span><span class="p">)</span> <span class="n">RMIN</span><span class="o">=</span><span class="n">FIELD1</span><span class="p">(</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-752"></a><span class="mi">100</span> <span class="k">CONTINUE</span> +<a name="ln-753"></a> +<a name="ln-754"></a><span class="k"> IF</span> <span class="p">(</span><span class="nb">ABS</span><span class="p">(</span><span class="n">RMIN</span><span class="p">)</span> <span class="p">.</span><span class="n">GT</span><span class="p">.</span> <span class="n">RMAX</span> <span class="p">.</span><span class="nb">OR</span><span class="p">.</span> <span class="nb">ABS</span><span class="p">(</span><span class="n">RMIN</span><span class="p">)</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="n">RMAX</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-755"></a><span class="k"> </span><span class="n">XMAX</span><span class="o">=</span><span class="nb">ABS</span><span class="p">(</span><span class="n">RMIN</span><span class="p">)</span> +<a name="ln-756"></a> <span class="k">ELSE</span> +<a name="ln-757"></a><span class="k"> </span><span class="n">XMAX</span><span class="o">=</span><span class="n">RMAX</span> +<a name="ln-758"></a> <span class="k">END IF</span> +<a name="ln-759"></a> +<a name="ln-760"></a><span class="k"> IF</span> <span class="p">(</span><span class="n">XMAX</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">0</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-761"></a><span class="k"> </span><span class="n">IA</span> <span class="o">=</span> <span class="mi">0</span> +<a name="ln-762"></a> <span class="k">RETURN</span> +<a name="ln-763"></a><span class="k"> END IF</span> +<a name="ln-764"></a> +<a name="ln-765"></a><span class="k"> </span><span class="n">A1</span><span class="o">=</span><span class="n">LOG10</span><span class="p">(</span> <span class="p">(</span><span class="n">G</span><span class="o">/</span><span class="mi">1</span><span class="mf">0.d0</span><span class="p">)</span><span class="o">/</span><span class="n">XMAX</span> <span class="p">)</span> +<a name="ln-766"></a> <span class="n">A2</span><span class="o">=</span><span class="n">LOG10</span><span class="p">(</span> <span class="n">G</span><span class="o">/</span><span class="n">XMAX</span> <span class="p">)</span> +<a name="ln-767"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">A1</span> <span class="p">.</span><span class="n">gt</span><span class="p">.</span> <span class="n">A2</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-768"></a><span class="k"> </span><span class="n">A</span><span class="o">=</span><span class="n">A2</span> +<a name="ln-769"></a> <span class="k">ELSE</span> +<a name="ln-770"></a><span class="k"> </span><span class="n">A</span><span class="o">=</span><span class="n">A1</span> +<a name="ln-771"></a> <span class="k">END IF</span> +<a name="ln-772"></a> +<a name="ln-773"></a><span class="k"> IF</span> <span class="p">(</span><span class="n">A</span> <span class="p">.</span><span class="n">GT</span><span class="p">.</span> <span class="mi">0</span><span class="p">)</span> <span class="n">IA</span><span class="o">=</span><span class="nb">INT</span><span class="p">(</span><span class="n">A</span><span class="p">)</span> +<a name="ln-774"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">A</span> <span class="p">.</span><span class="n">LT</span><span class="p">.</span> <span class="mi">0</span><span class="p">)</span> <span class="n">IA</span><span class="o">=</span><span class="nb">INT</span><span class="p">(</span><span class="n">A</span><span class="o">-</span><span class="mf">1.0</span><span class="p">)</span> +<a name="ln-775"></a> +<a name="ln-776"></a> <span class="k">RETURN</span> +<a name="ln-777"></a> +<a name="ln-778"></a><span class="k">END</span> +<a name="ln-779"></a> +<a name="ln-780"></a><span class="k">SUBROUTINE </span><span class="n">STATIS</span> <span class="p">(</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">,</span><span class="n">PHI</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">SIG</span><span class="p">)</span> +<a name="ln-781"></a> +<a name="ln-782"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-783"></a><span class="c">!! calculate mean, rms, stdev</span> +<a name="ln-784"></a><span class="c">!------------------------------------------------------------------</span> +<a name="ln-785"></a> +<a name="ln-786"></a> <span class="k">IMPLICIT </span><span class="kt">REAL</span> <span class="p">(</span><span class="n">A</span><span class="o">-</span><span class="n">H</span><span class="p">,</span><span class="n">O</span><span class="o">-</span><span class="n">Z</span><span class="p">)</span> +<a name="ln-787"></a> +<a name="ln-788"></a> <span class="kt">REAL </span><span class="n">PHI</span><span class="p">(</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">),</span><span class="n">SIG</span><span class="p">,</span><span class="n">MW</span><span class="p">,</span><span class="n">RMS</span><span class="p">,</span><span class="n">P</span> +<a name="ln-789"></a> +<a name="ln-790"></a> <span class="n">N</span><span class="o">=</span><span class="n">NI</span><span class="o">*</span><span class="n">NJ</span><span class="o">*</span><span class="n">NK</span> +<a name="ln-791"></a> +<a name="ln-792"></a> <span class="n">RMS</span><span class="o">=</span><span class="mf">0.</span> +<a name="ln-793"></a> <span class="n">MW</span><span class="o">=</span><span class="mf">0.</span> +<a name="ln-794"></a><span class="c">! 10.86 sinstead of 11.04 sec</span> +<a name="ln-795"></a> <span class="k">DO </span><span class="mi">10</span> <span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">NK</span> +<a name="ln-796"></a> <span class="k">DO </span><span class="mi">10</span> <span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">NJ</span> +<a name="ln-797"></a> <span class="k">DO </span><span class="mi">10</span> <span class="n">I</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">NI</span> +<a name="ln-798"></a> <span class="n">P</span><span class="o">=</span><span class="n">PHI</span><span class="p">(</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-799"></a> <span class="n">RMS</span><span class="o">=</span><span class="n">RMS</span><span class="o">+</span><span class="n">P</span><span class="o">*</span><span class="n">P</span> +<a name="ln-800"></a> <span class="n">MW</span><span class="o">=</span><span class="n">MW</span><span class="o">+</span><span class="n">P</span> +<a name="ln-801"></a><span class="mi">10</span> <span class="k">CONTINUE</span> +<a name="ln-802"></a> +<a name="ln-803"></a><span class="k"> </span><span class="n">RMS</span><span class="o">=</span><span class="nb">SQRT</span><span class="p">(</span><span class="n">RMS</span><span class="o">/</span><span class="n">N</span><span class="p">)</span> +<a name="ln-804"></a> <span class="n">MW</span><span class="o">=</span><span class="n">MW</span><span class="o">/</span><span class="n">N</span> +<a name="ln-805"></a> +<a name="ln-806"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">RMS</span><span class="o">*</span><span class="n">RMS</span><span class="o">-</span><span class="n">MW</span><span class="o">*</span><span class="n">MW</span> <span class="p">.</span><span class="n">LT</span><span class="p">.</span> <span class="mf">0.</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-807"></a><span class="k"> </span><span class="n">SIG</span><span class="o">=</span><span class="mf">0.0</span> +<a name="ln-808"></a> <span class="k">ELSE</span> +<a name="ln-809"></a><span class="k"> </span><span class="n">SIG</span><span class="o">=</span><span class="nb">SQRT</span><span class="p">(</span><span class="n">RMS</span><span class="o">*</span><span class="n">RMS</span><span class="o">-</span><span class="n">MW</span><span class="o">*</span><span class="n">MW</span><span class="p">)</span> +<a name="ln-810"></a> <span class="k">END IF</span> +<a name="ln-811"></a> +<a name="ln-812"></a><span class="k"> RETURN</span> +<a name="ln-813"></a> +<a name="ln-814"></a><span class="k">END</span> +</pre></div> + + </section> + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/sourcefile/ftrafo.f90.html b/Documentation/html/Documentation/Api/Fortran/sourcefile/ftrafo.f90.html new file mode 100644 index 0000000000000000000000000000000000000000..56779aa64d2282a0b032bceba792f1db63708193 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/sourcefile/ftrafo.f90.html @@ -0,0 +1,967 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>ftrafo.f90 – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>ftrafo.f90 + <small>Source File</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title="25.4% of total for source files.">359 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/ftrafo.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + + <li class="active">ftrafo.f90</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#mods-0">Modules</a></h3></div> + <div id="mods-0" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../module/ftrafo.html">FTRAFO</a> + + </div> + </div> +</div> + + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title">Source Code</h3></div> + <div class="list-group"> + <a class="list-group-item" href="../sourcefile/ftrafo.f90.html#src">ftrafo.f90</a> + </div> +</div> + + + +</div> + + </div> + <div class="col-md-9" id='text'> + + <br> + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">This file depends on</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: sourcefile~~ftrafo.f90~~EfferentGraph Pages: 1 --> +<svg id="sourcefileftrafof90EfferentGraph" width="169pt" height="32pt" + viewBox="0.00 0.00 169.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="sourcefile~~ftrafo.f90~~EfferentGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>sourcefile~~ftrafo.f90~~EfferentGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 165,-28 165,4 -4,4"/> +<!-- sourcefile~ftrafo.f90 --> +<g id="sourcefile~~ftrafo.f90~~EfferentGraph_node1" class="node"><title>sourcefile~ftrafo.f90</title> +<polygon fill="none" stroke="black" points="161,-24 106,-24 106,-0 161,-0 161,-24"/> +<text text-anchor="middle" x="133.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">ftrafo.f90</text> +</g> +<!-- sourcefile~phgrreal.f90 --> +<g id="sourcefile~~ftrafo.f90~~EfferentGraph_node2" class="node"><title>sourcefile~phgrreal.f90</title> +<g id="a_sourcefile~~ftrafo.f90~~EfferentGraph_node2"><a xlink:href=".././sourcefile/phgrreal.f90.html" xlink:title="phgrreal.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="70,-24 0,-24 0,-0 70,-0 70,-24"/> +<text text-anchor="middle" x="35" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">phgrreal.f90</text> +</a> +</g> +</g> +<!-- sourcefile~ftrafo.f90->sourcefile~phgrreal.f90 --> +<g id="sourcefile~~ftrafo.f90~~EfferentGraph_edge1" class="edge"><title>sourcefile~ftrafo.f90->sourcefile~phgrreal.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M105.876,-12C97.9362,-12 89.0119,-12 80.2636,-12"/> +<polygon fill="#000000" stroke="#000000" points="80.1443,-8.5001 70.1443,-12 80.1443,-15.5001 80.1443,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="190pt" height="32pt" + viewBox="0.00 0.00 190.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 186,-28 186,4 -4,4"/> +<!-- Source File --> +<g id="node1" class="node"><title>Source File</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Source File</text> +</g> +<!-- This Page's Entity --> +<g id="node2" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="182,-24 85,-24 85,-0 182,-0 182,-24"/> +<text text-anchor="middle" x="133.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a file to a file which it depends on. A file + is dependent upon another if the latter must be compiled before the former + can be. + </p> + </div></div></div></div> + </div> + </div> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Files dependent on this one</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: sourcefile~~ftrafo.f90~~AfferentGraph Pages: 1 --> +<svg id="sourcefileftrafof90AfferentGraph" width="184pt" height="32pt" + viewBox="0.00 0.00 184.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="sourcefile~~ftrafo.f90~~AfferentGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>sourcefile~~ftrafo.f90~~AfferentGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 180,-28 180,4 -4,4"/> +<!-- sourcefile~ftrafo.f90 --> +<g id="sourcefile~~ftrafo.f90~~AfferentGraph_node1" class="node"><title>sourcefile~ftrafo.f90</title> +<polygon fill="none" stroke="black" points="55,-24 0,-24 0,-0 55,-0 55,-24"/> +<text text-anchor="middle" x="27.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">ftrafo.f90</text> +</g> +<!-- sourcefile~calc_etadot.f90 --> +<g id="sourcefile~~ftrafo.f90~~AfferentGraph_node2" class="node"><title>sourcefile~calc_etadot.f90</title> +<g id="a_sourcefile~~ftrafo.f90~~AfferentGraph_node2"><a xlink:href=".././sourcefile/calc_etadot.f90.html" xlink:title="calc_etadot.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="176,-24 91,-24 91,-0 176,-0 176,-24"/> +<text text-anchor="middle" x="133.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot.f90</text> +</a> +</g> +</g> +<!-- sourcefile~calc_etadot.f90->sourcefile~ftrafo.f90 --> +<g id="sourcefile~~ftrafo.f90~~AfferentGraph_edge1" class="edge"><title>sourcefile~calc_etadot.f90->sourcefile~ftrafo.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M90.7985,-12C82.3748,-12 73.5755,-12 65.3334,-12"/> +<polygon fill="#000000" stroke="#000000" points="65.2615,-8.5001 55.2615,-12 65.2614,-15.5001 65.2615,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="190pt" height="32pt" + viewBox="0.00 0.00 190.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 186,-28 186,4 -4,4"/> +<!-- Source File --> +<g id="node1" class="node"><title>Source File</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Source File</text> +</g> +<!-- This Page's Entity --> +<g id="node2" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="182,-24 85,-24 85,-0 182,-0 182,-24"/> +<text text-anchor="middle" x="133.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a file to a file which it depends on. A file + is dependent upon another if the latter must be compiled before the former + can be. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#mods-1">Modules</a></h3></div> + <div id="mods-1" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../module/ftrafo.html">FTRAFO</a> + + </div> + </div> +</div> + + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title">Source Code</h3></div> + <div class="list-group"> + <a class="list-group-item" href="../sourcefile/ftrafo.f90.html#src">ftrafo.f90</a> + </div> +</div> + + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + <section> + <h2><span class="anchor" id="src"></span>Source Code</h2> + <div class="hl"><pre><span></span><a name="ln-1"></a><span class="k">MODULE </span><span class="n">FTRAFO</span> +<a name="ln-2"></a> +<a name="ln-3"></a><span class="c">!! Implementation of the spectral transformation using reduced the Gaussian grid</span> +<a name="ln-4"></a> +<a name="ln-5"></a><span class="k">CONTAINS</span> +<a name="ln-6"></a> +<a name="ln-7"></a><span class="c">! Implementierung der spektralen Transformationsmethode unter Verwendung</span> +<a name="ln-8"></a><span class="c">! des reduzierten Gauss'schen Gitters</span> +<a name="ln-9"></a> +<a name="ln-10"></a> +<a name="ln-11"></a> <span class="k">SUBROUTINE </span><span class="n">VDTOUV</span><span class="p">(</span><span class="n">XMN</span><span class="p">,</span><span class="n">XLAM</span><span class="p">,</span><span class="n">XPHI</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">P</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-12"></a> +<a name="ln-13"></a><span class="c">!! Berechnung der scale winds aus Vorticity und Divergenz</span> +<a name="ln-14"></a><span class="c">!! uebergibt man in XMN die Divergenz, so wird der divergente Anteil des</span> +<a name="ln-15"></a><span class="c">!! Windes (XPHI=Ud,XPHI=Vd) zurueckgegeben, uebergibt man die Vorticity, so</span> +<a name="ln-16"></a><span class="c">!! erhaelt man den rotationellen Wind (XLAM=Vrot,XPHI=-Urot).</span> +<a name="ln-17"></a><span class="c">!! Summiert man beide, erhaelt man den gesamten Scale wind</span> +<a name="ln-18"></a><span class="c">! GWSAVE ist ein Hilfsfeld fuer die FFT</span> +<a name="ln-19"></a><span class="c">! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung</span> +<a name="ln-20"></a><span class="c">! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis</span> +<a name="ln-21"></a><span class="c">! MNAUF gibt die spektrale Aufloesung an,</span> +<a name="ln-22"></a><span class="c">! NI = Anzahl der Gauss'schen Gitterpunkte pro Flaeche</span> +<a name="ln-23"></a><span class="c">! NJ = Anzahl der Gauss'schen Breiten,</span> +<a name="ln-24"></a><span class="c">! NK = Anzahl der Niveaus</span> +<a name="ln-25"></a> +<a name="ln-26"></a> <span class="k">USE </span><span class="n">PHTOGR</span> +<a name="ln-27"></a> +<a name="ln-28"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-29"></a><span class="k"> </span><span class="kt">INTEGER </span><span class="n">J</span><span class="p">,</span><span class="n">N</span><span class="p">,</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">GGIND</span><span class="p">(</span><span class="n">NJ</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-30"></a> <span class="kt">INTEGER </span><span class="n">MLAT</span><span class="p">(</span><span class="n">NJ</span><span class="p">),</span><span class="n">IFAX</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="n">NJ</span><span class="p">)</span> +<a name="ln-31"></a> <span class="kt">REAL </span><span class="n">XMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-32"></a> <span class="kt">REAL </span><span class="n">P</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">NJ</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-33"></a> <span class="kt">REAL </span><span class="n">H</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-34"></a> <span class="kt">REAL </span><span class="n">XLAM</span><span class="p">(</span><span class="n">NI</span><span class="p">,</span><span class="n">NK</span><span class="p">),</span><span class="n">XPHI</span><span class="p">(</span><span class="n">NI</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-35"></a> <span class="kt">REAL </span><span class="n">GWSAVE</span><span class="p">(</span><span class="mi">8</span><span class="o">*</span><span class="n">NJ</span><span class="o">+</span><span class="mi">15</span><span class="p">,</span><span class="n">NJ</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-36"></a> <span class="kt">REAL </span><span class="n">SCR</span><span class="p">,</span><span class="n">SCI</span><span class="p">,</span><span class="n">ACR</span><span class="p">,</span><span class="n">ACI</span><span class="p">,</span><span class="n">MUSCR</span><span class="p">,</span><span class="n">MUSCI</span><span class="p">,</span><span class="n">MUACR</span><span class="p">,</span><span class="n">MUACI</span> +<a name="ln-37"></a> <span class="kt">REAL </span><span class="n">RT</span><span class="p">,</span><span class="n">IT</span> +<a name="ln-38"></a> +<a name="ln-39"></a> <span class="n">GGIND</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-40"></a> <span class="k">DO </span><span class="mi">4</span> <span class="n">J</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span><span class="n">NJ</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-41"></a> <span class="n">GGIND</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">=</span><span class="n">GGIND</span><span class="p">(</span><span class="n">J</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-42"></a><span class="mi">4</span> <span class="k">CONTINUE</span> +<a name="ln-43"></a> +<a name="ln-44"></a><span class="c">!$OMP PARALLEL DO SCHEDULE(DYNAMIC)</span> +<a name="ln-45"></a> <span class="k">DO </span><span class="mi">5</span> <span class="n">J</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span><span class="n">NJ</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-46"></a> <span class="k">CALL </span><span class="n">VDUVSUB</span><span class="p">(</span><span class="n">J</span><span class="p">,</span><span class="n">XMN</span><span class="p">,</span><span class="n">XLAM</span><span class="p">,</span><span class="n">XPHI</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">P</span><span class="p">,</span><span class="n">GGIND</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-47"></a><span class="mi">5</span> <span class="k">CONTINUE</span> +<a name="ln-48"></a><span class="c">!$OMP END PARALLEL DO</span> +<a name="ln-49"></a> +<a name="ln-50"></a> <span class="k">RETURN</span> +<a name="ln-51"></a> +<a name="ln-52"></a><span class="k"> END SUBROUTINE </span><span class="n">VDTOUV</span> +<a name="ln-53"></a> +<a name="ln-54"></a> <span class="k">SUBROUTINE </span><span class="n">VDUVSUB</span><span class="p">(</span><span class="n">J</span><span class="p">,</span><span class="n">XMN</span><span class="p">,</span><span class="n">XLAM</span><span class="p">,</span><span class="n">XPHI</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">P</span><span class="p">,</span><span class="n">GGIND</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-55"></a> +<a name="ln-56"></a> <span class="k">USE </span><span class="n">PHTOGR</span> +<a name="ln-57"></a> +<a name="ln-58"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-59"></a> +<a name="ln-60"></a><span class="k"> </span><span class="kt">INTEGER </span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">,</span><span class="n">M</span><span class="p">,</span><span class="n">N</span><span class="p">,</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">GGIND</span><span class="p">,</span><span class="n">LL</span><span class="p">,</span><span class="n">LLP</span><span class="p">,</span><span class="n">LLH</span><span class="p">,</span><span class="n">LLS</span><span class="p">,</span><span class="n">LLPS</span><span class="p">,</span><span class="n">LLHS</span> +<a name="ln-61"></a> <span class="kt">INTEGER </span><span class="n">MLAT</span><span class="p">(</span><span class="n">NJ</span><span class="p">),</span><span class="n">IFAX</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="n">NJ</span><span class="p">)</span> +<a name="ln-62"></a> <span class="kt">REAL </span><span class="n">UFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="p">),</span><span class="n">MUFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="p">)</span> +<a name="ln-63"></a> <span class="kt">REAL </span><span class="n">VFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="p">),</span><span class="n">MVFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="p">)</span> +<a name="ln-64"></a> <span class="kt">REAL </span><span class="n">XMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-65"></a> <span class="kt">REAL </span><span class="n">P</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">NJ</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-66"></a> <span class="kt">REAL </span><span class="n">H</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-67"></a> <span class="kt">REAL </span><span class="n">XLAM</span><span class="p">(</span><span class="n">NI</span><span class="p">,</span><span class="n">NK</span><span class="p">),</span><span class="n">XPHI</span><span class="p">(</span><span class="n">NI</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-68"></a> <span class="kt">REAL </span><span class="n">GWSAVE</span><span class="p">(</span><span class="mi">8</span><span class="o">*</span><span class="n">NJ</span><span class="o">+</span><span class="mi">15</span><span class="p">,</span><span class="n">NJ</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-69"></a> <span class="kt">REAL </span><span class="n">ERAD</span><span class="p">,</span><span class="n">SCR</span><span class="p">,</span><span class="n">SCI</span><span class="p">,</span><span class="n">ACR</span><span class="p">,</span><span class="n">ACI</span><span class="p">,</span><span class="n">MUSCR</span><span class="p">,</span><span class="n">MUSCI</span><span class="p">,</span><span class="n">MUACR</span><span class="p">,</span><span class="n">MUACI</span> +<a name="ln-70"></a> <span class="kt">REAL </span><span class="n">FAC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MNAUF</span><span class="p">),</span><span class="n">RT</span><span class="p">,</span><span class="n">IT</span> +<a name="ln-71"></a> +<a name="ln-72"></a> <span class="n">ERAD</span> <span class="o">=</span> <span class="mi">636747</span><span class="mf">0.D0</span> +<a name="ln-73"></a> +<a name="ln-74"></a> <span class="n">FAC</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-75"></a> <span class="k">DO </span><span class="mi">12</span> <span class="n">N</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MNAUF</span> +<a name="ln-76"></a> <span class="n">FAC</span><span class="p">(</span><span class="n">N</span><span class="p">)</span><span class="o">=-</span><span class="n">ERAD</span><span class="o">/</span><span class="nb">DBLE</span><span class="p">(</span><span class="n">N</span><span class="p">)</span><span class="o">/</span><span class="nb">DBLE</span><span class="p">(</span><span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-77"></a><span class="mi">12</span> <span class="k">CONTINUE</span> +<a name="ln-78"></a> +<a name="ln-79"></a><span class="k"> CALL </span><span class="n">DPLGND</span><span class="p">(</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">P</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">J</span><span class="p">),</span><span class="n">H</span><span class="p">)</span> +<a name="ln-80"></a> <span class="k">DO </span><span class="mi">3</span> <span class="n">K</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span><span class="n">NK</span> +<a name="ln-81"></a> <span class="n">LL</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-82"></a> <span class="n">LLP</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-83"></a> <span class="n">LLH</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-84"></a> <span class="k">DO </span><span class="mi">2</span> <span class="n">M</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span><span class="n">MNAUF</span> +<a name="ln-85"></a> <span class="n">SCR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-86"></a> <span class="n">SCI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-87"></a> <span class="n">ACR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-88"></a> <span class="n">ACI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-89"></a> <span class="n">MUSCR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-90"></a> <span class="n">MUSCI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-91"></a> <span class="n">MUACR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-92"></a> <span class="n">MUACI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-93"></a> <span class="n">LLS</span><span class="o">=</span><span class="n">LL</span> +<a name="ln-94"></a> <span class="n">LLPS</span><span class="o">=</span><span class="n">LLP</span> +<a name="ln-95"></a> <span class="n">LLHS</span><span class="o">=</span><span class="n">LLH</span> +<a name="ln-96"></a> <span class="k">IF</span> <span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span> <span class="p">.</span><span class="n">LT</span><span class="p">.</span> <span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">))</span> <span class="k">THEN</span> +<a name="ln-97"></a><span class="k"> DO </span><span class="mi">1</span> <span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="mi">2</span> +<a name="ln-98"></a> <span class="n">RT</span><span class="o">=</span><span class="n">XMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">FAC</span><span class="p">(</span><span class="n">N</span><span class="p">)</span> +<a name="ln-99"></a> <span class="n">IT</span><span class="o">=</span><span class="n">XMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">FAC</span><span class="p">(</span><span class="n">N</span><span class="p">)</span> +<a name="ln-100"></a> <span class="n">SCR</span> <span class="o">=</span><span class="n">SCR</span><span class="o">+</span> <span class="n">RT</span><span class="o">*</span><span class="n">P</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span> +<a name="ln-101"></a> <span class="n">SCI</span> <span class="o">=</span><span class="n">SCI</span><span class="o">+</span> <span class="n">IT</span><span class="o">*</span><span class="n">P</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span> +<a name="ln-102"></a> <span class="n">MUACR</span> <span class="o">=</span><span class="n">MUACR</span><span class="o">+</span> <span class="n">RT</span><span class="o">*</span><span class="n">H</span><span class="p">(</span><span class="n">LLH</span><span class="p">)</span> +<a name="ln-103"></a> <span class="n">MUACI</span> <span class="o">=</span><span class="n">MUACI</span><span class="o">+</span> <span class="n">IT</span><span class="o">*</span><span class="n">H</span><span class="p">(</span><span class="n">LLH</span><span class="p">)</span> +<a name="ln-104"></a> <span class="n">LL</span><span class="o">=</span><span class="n">LL</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-105"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-106"></a> <span class="n">LLH</span><span class="o">=</span><span class="n">LLH</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-107"></a><span class="mi">1</span> <span class="k">CONTINUE</span> +<a name="ln-108"></a><span class="k"> </span><span class="n">LL</span><span class="o">=</span><span class="n">LLS</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-109"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLPS</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-110"></a> <span class="n">LLH</span><span class="o">=</span><span class="n">LLHS</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-111"></a> <span class="k">DO </span><span class="mi">11</span> <span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="mi">2</span> +<a name="ln-112"></a> <span class="n">RT</span><span class="o">=</span><span class="n">XMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">FAC</span><span class="p">(</span><span class="n">N</span><span class="p">)</span> +<a name="ln-113"></a> <span class="n">IT</span><span class="o">=</span><span class="n">XMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">FAC</span><span class="p">(</span><span class="n">N</span><span class="p">)</span> +<a name="ln-114"></a> <span class="n">ACR</span> <span class="o">=</span><span class="n">ACR</span><span class="o">+</span> <span class="n">RT</span><span class="o">*</span><span class="n">P</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span> +<a name="ln-115"></a> <span class="n">ACI</span> <span class="o">=</span><span class="n">ACI</span><span class="o">+</span> <span class="n">IT</span><span class="o">*</span><span class="n">P</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span> +<a name="ln-116"></a> <span class="n">MUSCR</span> <span class="o">=</span><span class="n">MUSCR</span><span class="o">+</span> <span class="n">RT</span><span class="o">*</span><span class="n">H</span><span class="p">(</span><span class="n">LLH</span><span class="p">)</span> +<a name="ln-117"></a> <span class="n">MUSCI</span> <span class="o">=</span><span class="n">MUSCI</span><span class="o">+</span> <span class="n">IT</span><span class="o">*</span><span class="n">H</span><span class="p">(</span><span class="n">LLH</span><span class="p">)</span> +<a name="ln-118"></a> <span class="n">LL</span><span class="o">=</span><span class="n">LL</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-119"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-120"></a> <span class="n">LLH</span><span class="o">=</span><span class="n">LLH</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-121"></a><span class="mi">11</span> <span class="k">CONTINUE</span> +<a name="ln-122"></a><span class="k"> END IF</span> +<a name="ln-123"></a><span class="k"> </span><span class="n">LL</span><span class="o">=</span><span class="n">LLS</span><span class="o">+</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">-</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-124"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLPS</span><span class="o">+</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">-</span><span class="n">M</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span> +<a name="ln-125"></a> <span class="n">LLH</span><span class="o">=</span><span class="n">LLHS</span><span class="o">+</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">-</span><span class="n">M</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-126"></a> +<a name="ln-127"></a> <span class="n">UFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="p">)</span><span class="o">=-</span><span class="n">M</span><span class="o">*</span><span class="p">(</span><span class="n">SCI</span><span class="o">-</span><span class="n">ACI</span><span class="p">)</span> +<a name="ln-128"></a> <span class="n">UFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">M</span><span class="o">*</span><span class="p">(</span><span class="n">SCR</span><span class="o">-</span><span class="n">ACR</span><span class="p">)</span> +<a name="ln-129"></a> <span class="n">VFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="p">)</span><span class="o">=-</span><span class="n">M</span><span class="o">*</span><span class="p">(</span><span class="n">SCI</span><span class="o">+</span><span class="n">ACI</span><span class="p">)</span> +<a name="ln-130"></a> <span class="n">VFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">M</span><span class="o">*</span><span class="p">(</span><span class="n">SCR</span><span class="o">+</span><span class="n">ACR</span><span class="p">)</span> +<a name="ln-131"></a> +<a name="ln-132"></a> <span class="n">MUFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="p">)</span><span class="o">=-</span><span class="p">(</span><span class="n">MUSCR</span><span class="o">-</span><span class="n">MUACR</span><span class="p">)</span> +<a name="ln-133"></a> <span class="n">MUFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=-</span><span class="p">(</span><span class="n">MUSCI</span><span class="o">-</span><span class="n">MUACI</span><span class="p">)</span> +<a name="ln-134"></a> <span class="n">MVFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="p">)</span><span class="o">=-</span><span class="p">(</span><span class="n">MUSCR</span><span class="o">+</span><span class="n">MUACR</span><span class="p">)</span> +<a name="ln-135"></a> <span class="n">MVFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=-</span><span class="p">(</span><span class="n">MUSCI</span><span class="o">+</span><span class="n">MUACI</span><span class="p">)</span> +<a name="ln-136"></a><span class="mi">2</span> <span class="k">CONTINUE</span> +<a name="ln-137"></a> +<a name="ln-138"></a><span class="k"> CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">VFOUC</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">IFAX</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-139"></a> <span class="n">XLAM</span><span class="p">(</span><span class="n">GGIND</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">GGIND</span><span class="o">+</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">VFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-140"></a> <span class="k">CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">UFOUC</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">IFAX</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-141"></a> <span class="n">XLAM</span><span class="p">(</span><span class="n">NI</span><span class="o">-</span><span class="n">GGIND</span><span class="o">-</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">NI</span><span class="o">-</span><span class="n">GGIND</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">UFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-142"></a> +<a name="ln-143"></a> <span class="k">CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">MVFOUC</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">IFAX</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-144"></a> <span class="n">XPHI</span><span class="p">(</span><span class="n">GGIND</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">GGIND</span><span class="o">+</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">MVFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-145"></a> <span class="k">CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">MUFOUC</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">IFAX</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-146"></a> <span class="n">XPHI</span><span class="p">(</span><span class="n">NI</span><span class="o">-</span><span class="n">GGIND</span><span class="o">-</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">NI</span><span class="o">-</span><span class="n">GGIND</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">MUFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-147"></a> +<a name="ln-148"></a><span class="mi">3</span> <span class="k">CONTINUE</span> +<a name="ln-149"></a> +<a name="ln-150"></a><span class="k"> RETURN</span> +<a name="ln-151"></a> +<a name="ln-152"></a><span class="k"> END SUBROUTINE </span><span class="n">VDUVSUB</span> +<a name="ln-153"></a> +<a name="ln-154"></a> +<a name="ln-155"></a> <span class="k">SUBROUTINE </span><span class="n">PHGRAD</span><span class="p">(</span><span class="n">XMN</span><span class="p">,</span><span class="n">XLAM</span><span class="p">,</span><span class="n">XPHI</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">P</span><span class="p">,</span><span class="n">H</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-156"></a> +<a name="ln-157"></a><span class="c">!! Berechnung des Gradienten eines Skalars aus dem Feld des</span> +<a name="ln-158"></a><span class="c">!! Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der</span> +<a name="ln-159"></a><span class="c">!! Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter.</span> +<a name="ln-160"></a><span class="c">! GWSAVE ist ein Hilfsfeld fuer die FFT</span> +<a name="ln-161"></a><span class="c">! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung</span> +<a name="ln-162"></a><span class="c">! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis</span> +<a name="ln-163"></a><span class="c">! MNAUF gibt die spektrale Aufloesung an,</span> +<a name="ln-164"></a><span class="c">! NI = Anzahl der Gauss'schen Gitterpunkte,</span> +<a name="ln-165"></a><span class="c">! NJ = Anzahl der Gauss'schen Breiten,</span> +<a name="ln-166"></a><span class="c">! NK = Anzahl der Niveaus</span> +<a name="ln-167"></a> +<a name="ln-168"></a> <span class="k">USE </span><span class="n">PHTOGR</span> +<a name="ln-169"></a> +<a name="ln-170"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-171"></a> +<a name="ln-172"></a><span class="k"> </span><span class="kt">INTEGER </span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">,</span><span class="n">M</span><span class="p">,</span><span class="n">N</span><span class="p">,</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">GGIND</span><span class="p">,</span><span class="n">LL</span><span class="p">,</span><span class="n">LLP</span><span class="p">,</span><span class="n">LLH</span><span class="p">,</span><span class="n">LLS</span><span class="p">,</span><span class="n">LLPS</span><span class="p">,</span><span class="n">LLHS</span> +<a name="ln-173"></a> <span class="kt">INTEGER </span><span class="n">MLAT</span><span class="p">(</span><span class="n">NJ</span><span class="p">),</span><span class="n">IFAX</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="n">NJ</span><span class="p">)</span> +<a name="ln-174"></a> <span class="kt">REAL </span><span class="n">UFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="p">),</span><span class="n">MUFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="p">)</span> +<a name="ln-175"></a> <span class="kt">REAL </span><span class="n">VFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="p">),</span><span class="n">MVFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="p">)</span> +<a name="ln-176"></a> <span class="kt">REAL </span><span class="n">XMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-177"></a> <span class="kt">REAL </span><span class="n">P</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">NJ</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-178"></a> <span class="kt">REAL </span><span class="n">H</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-179"></a> <span class="kt">REAL </span><span class="n">XLAM</span><span class="p">(</span><span class="n">NI</span><span class="p">,</span><span class="n">NK</span><span class="p">),</span><span class="n">XPHI</span><span class="p">(</span><span class="n">NI</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-180"></a> <span class="kt">REAL </span><span class="n">GWSAVE</span><span class="p">(</span><span class="mi">8</span><span class="o">*</span><span class="n">NJ</span><span class="o">+</span><span class="mi">15</span><span class="p">,</span><span class="n">NJ</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-181"></a> <span class="kt">REAL </span><span class="n">ERAD</span> +<a name="ln-182"></a> <span class="kt">REAL </span><span class="n">SCR</span><span class="p">,</span><span class="n">SCI</span><span class="p">,</span><span class="n">ACR</span><span class="p">,</span><span class="n">ACI</span><span class="p">,</span><span class="n">MUSCR</span><span class="p">,</span><span class="n">MUSCI</span><span class="p">,</span><span class="n">MUACR</span><span class="p">,</span><span class="n">MUACI</span><span class="p">,</span><span class="n">RT</span><span class="p">,</span><span class="n">IT</span> +<a name="ln-183"></a> +<a name="ln-184"></a> <span class="n">ERAD</span> <span class="o">=</span> <span class="mi">636747</span><span class="mf">0.0</span> +<a name="ln-185"></a> +<a name="ln-186"></a> <span class="n">GGIND</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-187"></a> <span class="k">DO </span><span class="mi">4</span> <span class="n">J</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span><span class="n">NJ</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-188"></a> <span class="k">CALL </span><span class="n">DPLGND</span><span class="p">(</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">P</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">J</span><span class="p">),</span><span class="n">H</span><span class="p">)</span> +<a name="ln-189"></a> <span class="k">DO </span><span class="mi">3</span> <span class="n">K</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span><span class="n">NK</span> +<a name="ln-190"></a> <span class="n">LL</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-191"></a> <span class="n">LLP</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-192"></a> <span class="n">LLH</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-193"></a> <span class="k">DO </span><span class="mi">2</span> <span class="n">M</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span><span class="n">MNAUF</span> +<a name="ln-194"></a> <span class="n">SCR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-195"></a> <span class="n">SCI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-196"></a> <span class="n">ACR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-197"></a> <span class="n">ACI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-198"></a> <span class="n">MUSCR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-199"></a> <span class="n">MUSCI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-200"></a> <span class="n">MUACR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-201"></a> <span class="n">MUACI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-202"></a> <span class="n">LLS</span><span class="o">=</span><span class="n">LL</span> +<a name="ln-203"></a> <span class="n">LLPS</span><span class="o">=</span><span class="n">LLP</span> +<a name="ln-204"></a> <span class="n">LLHS</span><span class="o">=</span><span class="n">LLH</span> +<a name="ln-205"></a> <span class="k">IF</span> <span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span> <span class="p">.</span><span class="n">LT</span><span class="p">.</span> <span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">))</span> <span class="k">THEN</span> +<a name="ln-206"></a><span class="k"> DO </span><span class="mi">1</span> <span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="mi">2</span> +<a name="ln-207"></a> <span class="n">RT</span><span class="o">=</span><span class="n">XMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-208"></a> <span class="n">IT</span><span class="o">=</span><span class="n">XMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-209"></a> <span class="n">SCR</span> <span class="o">=</span><span class="n">SCR</span><span class="o">+</span> <span class="n">RT</span><span class="o">*</span><span class="n">P</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span> +<a name="ln-210"></a> <span class="n">SCI</span> <span class="o">=</span><span class="n">SCI</span><span class="o">+</span> <span class="n">IT</span><span class="o">*</span><span class="n">P</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span> +<a name="ln-211"></a> <span class="n">MUACR</span> <span class="o">=</span><span class="n">MUACR</span><span class="o">+</span><span class="n">RT</span><span class="o">*</span><span class="n">H</span><span class="p">(</span><span class="n">LLH</span><span class="p">)</span> +<a name="ln-212"></a> <span class="n">MUACI</span> <span class="o">=</span><span class="n">MUACI</span><span class="o">+</span> <span class="n">IT</span><span class="o">*</span><span class="n">H</span><span class="p">(</span><span class="n">LLH</span><span class="p">)</span> +<a name="ln-213"></a> <span class="n">LL</span><span class="o">=</span><span class="n">LL</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-214"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-215"></a> <span class="n">LLH</span><span class="o">=</span><span class="n">LLH</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-216"></a><span class="mi">1</span> <span class="k">CONTINUE</span> +<a name="ln-217"></a><span class="k"> </span><span class="n">LL</span><span class="o">=</span><span class="n">LLS</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-218"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLPS</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-219"></a> <span class="n">LLH</span><span class="o">=</span><span class="n">LLHS</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-220"></a> <span class="k">DO </span><span class="mi">11</span> <span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="mi">2</span> +<a name="ln-221"></a> <span class="n">RT</span><span class="o">=</span><span class="n">XMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-222"></a> <span class="n">IT</span><span class="o">=</span><span class="n">XMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-223"></a> <span class="n">ACR</span> <span class="o">=</span><span class="n">ACR</span><span class="o">+</span> <span class="n">RT</span><span class="o">*</span><span class="n">P</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span> +<a name="ln-224"></a> <span class="n">ACI</span> <span class="o">=</span><span class="n">ACI</span><span class="o">+</span> <span class="n">IT</span><span class="o">*</span><span class="n">P</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span> +<a name="ln-225"></a> <span class="n">MUSCR</span> <span class="o">=</span><span class="n">MUSCR</span><span class="o">+</span> <span class="n">RT</span><span class="o">*</span><span class="n">H</span><span class="p">(</span><span class="n">LLH</span><span class="p">)</span> +<a name="ln-226"></a> <span class="n">MUSCI</span> <span class="o">=</span><span class="n">MUSCI</span><span class="o">+</span> <span class="n">IT</span><span class="o">*</span><span class="n">H</span><span class="p">(</span><span class="n">LLH</span><span class="p">)</span> +<a name="ln-227"></a> <span class="n">LL</span><span class="o">=</span><span class="n">LL</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-228"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-229"></a> <span class="n">LLH</span><span class="o">=</span><span class="n">LLH</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-230"></a><span class="mi">11</span> <span class="k">CONTINUE</span> +<a name="ln-231"></a><span class="k"> END IF</span> +<a name="ln-232"></a><span class="k"> </span><span class="n">LL</span><span class="o">=</span><span class="n">LLS</span><span class="o">+</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">-</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-233"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLPS</span><span class="o">+</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">-</span><span class="n">M</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span> +<a name="ln-234"></a> <span class="n">LLH</span><span class="o">=</span><span class="n">LLHS</span><span class="o">+</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">-</span><span class="n">M</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-235"></a> +<a name="ln-236"></a> <span class="n">UFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="p">)</span><span class="o">=-</span><span class="n">M</span><span class="o">*</span><span class="p">(</span><span class="n">SCI</span><span class="o">-</span><span class="n">ACI</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-237"></a> <span class="n">UFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">M</span><span class="o">*</span><span class="p">(</span><span class="n">SCR</span><span class="o">-</span><span class="n">ACR</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-238"></a> <span class="n">VFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="p">)</span><span class="o">=-</span><span class="n">M</span><span class="o">*</span><span class="p">(</span><span class="n">SCI</span><span class="o">+</span><span class="n">ACI</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-239"></a> <span class="n">VFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">M</span><span class="o">*</span><span class="p">(</span><span class="n">SCR</span><span class="o">+</span><span class="n">ACR</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-240"></a> +<a name="ln-241"></a> <span class="n">MUFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="p">)</span><span class="o">=-</span><span class="p">(</span><span class="n">MUSCR</span><span class="o">-</span><span class="n">MUACR</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-242"></a> <span class="n">MUFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=-</span><span class="p">(</span><span class="n">MUSCI</span><span class="o">-</span><span class="n">MUACI</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-243"></a> <span class="n">MVFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="p">)</span><span class="o">=-</span><span class="p">(</span><span class="n">MUSCR</span><span class="o">+</span><span class="n">MUACR</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-244"></a> <span class="n">MVFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=-</span><span class="p">(</span><span class="n">MUSCI</span><span class="o">+</span><span class="n">MUACI</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-245"></a><span class="mi">2</span> <span class="k">CONTINUE</span> +<a name="ln-246"></a> +<a name="ln-247"></a><span class="k"> CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">VFOUC</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">IFAX</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-248"></a> <span class="n">XLAM</span><span class="p">(</span><span class="n">GGIND</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">GGIND</span><span class="o">+</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">VFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-249"></a> <span class="k">CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">UFOUC</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">IFAX</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-250"></a> <span class="n">XLAM</span><span class="p">(</span><span class="n">NI</span><span class="o">-</span><span class="n">GGIND</span><span class="o">-</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">NI</span><span class="o">-</span><span class="n">GGIND</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">UFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-251"></a> +<a name="ln-252"></a> <span class="k">CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">MVFOUC</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">IFAX</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-253"></a> <span class="n">XPHI</span><span class="p">(</span><span class="n">GGIND</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">GGIND</span><span class="o">+</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">MVFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-254"></a> <span class="k">CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">MUFOUC</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">IFAX</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-255"></a> <span class="n">XPHI</span><span class="p">(</span><span class="n">NI</span><span class="o">-</span><span class="n">GGIND</span><span class="o">-</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">NI</span><span class="o">-</span><span class="n">GGIND</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">MUFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-256"></a> +<a name="ln-257"></a><span class="mi">3</span> <span class="k">CONTINUE</span> +<a name="ln-258"></a><span class="k"> </span><span class="n">GGIND</span><span class="o">=</span><span class="n">GGIND</span><span class="o">+</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span> +<a name="ln-259"></a><span class="mi">4</span> <span class="k">CONTINUE</span> +<a name="ln-260"></a> +<a name="ln-261"></a> +<a name="ln-262"></a><span class="k"> RETURN</span> +<a name="ln-263"></a> +<a name="ln-264"></a><span class="k"> END SUBROUTINE </span><span class="n">PHGRAD</span> +<a name="ln-265"></a> +<a name="ln-266"></a> +<a name="ln-267"></a> <span class="k">SUBROUTINE </span><span class="n">PHGRACUT</span><span class="p">(</span><span class="n">XMN</span><span class="p">,</span><span class="n">XLAM</span><span class="p">,</span><span class="n">XPHI</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">P</span><span class="p">,</span><span class="n">H</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">MANF</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-268"></a> +<a name="ln-269"></a><span class="c">!! Berechnung des Gradienten eines Skalars aus dem Feld des</span> +<a name="ln-270"></a><span class="c">!! Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der</span> +<a name="ln-271"></a><span class="c">!! Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter.</span> +<a name="ln-272"></a><span class="c">! GWSAVE ist ein Hilfsfeld fuer die FFT</span> +<a name="ln-273"></a><span class="c">! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung</span> +<a name="ln-274"></a><span class="c">! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis</span> +<a name="ln-275"></a><span class="c">! MNAUF gibt die spektrale Aufloesung an,</span> +<a name="ln-276"></a><span class="c">! NI = Anzahl der Gauss'schen Gitterpunkte,</span> +<a name="ln-277"></a><span class="c">! NJ = Anzahl der Gauss'schen Breiten,</span> +<a name="ln-278"></a><span class="c">! NK = Anzahl der Niveaus</span> +<a name="ln-279"></a> +<a name="ln-280"></a> <span class="k">USE </span><span class="n">PHTOGR</span> +<a name="ln-281"></a> +<a name="ln-282"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-283"></a> +<a name="ln-284"></a><span class="k"> </span><span class="kt">INTEGER </span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">,</span><span class="n">M</span><span class="p">,</span><span class="n">N</span><span class="p">,</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">GGIND</span><span class="p">,</span><span class="n">LL</span><span class="p">,</span><span class="n">LLP</span><span class="p">,</span><span class="n">LLH</span><span class="p">,</span><span class="n">LLS</span><span class="p">,</span><span class="n">LLPS</span><span class="p">,</span><span class="n">LLHS</span> +<a name="ln-285"></a> <span class="kt">INTEGER </span><span class="n">MAUF</span><span class="p">,</span><span class="n">MANF</span><span class="p">,</span><span class="n">I</span><span class="p">,</span><span class="n">IFAX</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> +<a name="ln-286"></a> <span class="kt">REAL </span><span class="n">UFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="p">),</span><span class="n">MUFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="p">)</span> +<a name="ln-287"></a> <span class="kt">REAL </span><span class="n">VFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="p">),</span><span class="n">MVFOUC</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="p">)</span> +<a name="ln-288"></a> <span class="kt">REAL </span><span class="n">XMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-289"></a> <span class="kt">REAL </span><span class="n">P</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">NJ</span><span class="p">)</span> +<a name="ln-290"></a> <span class="kt">REAL </span><span class="n">H</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-291"></a> <span class="kt">REAL </span><span class="n">XLAM</span><span class="p">(</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">),</span><span class="n">XPHI</span><span class="p">(</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-292"></a> <span class="kt">REAL </span><span class="n">HLAM</span><span class="p">(</span><span class="n">MAXAUF</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span><span class="n">HPHI</span><span class="p">(</span><span class="n">MAXAUF</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-293"></a> <span class="kt">REAL </span><span class="n">GWSAVE</span><span class="p">(</span><span class="mi">4</span><span class="o">*</span><span class="n">MAUF</span><span class="o">+</span><span class="mi">15</span><span class="p">)</span> +<a name="ln-294"></a> <span class="kt">REAL </span><span class="n">ERAD</span> +<a name="ln-295"></a> <span class="kt">REAL </span><span class="n">SCR</span><span class="p">,</span><span class="n">SCI</span><span class="p">,</span><span class="n">ACR</span><span class="p">,</span><span class="n">ACI</span><span class="p">,</span><span class="n">MUSCR</span><span class="p">,</span><span class="n">MUSCI</span><span class="p">,</span><span class="n">MUACR</span><span class="p">,</span><span class="n">MUACI</span><span class="p">,</span><span class="n">RT</span><span class="p">,</span><span class="n">IT</span> +<a name="ln-296"></a> +<a name="ln-297"></a> <span class="n">ERAD</span> <span class="o">=</span> <span class="mi">636747</span><span class="mf">0.0</span> +<a name="ln-298"></a> +<a name="ln-299"></a> <span class="n">GGIND</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-300"></a> <span class="k">DO </span><span class="mi">4</span> <span class="n">J</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span><span class="n">NJ</span> +<a name="ln-301"></a> <span class="k">CALL </span><span class="n">DPLGND</span><span class="p">(</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">P</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">J</span><span class="p">),</span><span class="n">H</span><span class="p">)</span> +<a name="ln-302"></a> <span class="k">DO </span><span class="mi">3</span> <span class="n">K</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span><span class="n">NK</span> +<a name="ln-303"></a> <span class="n">LL</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-304"></a> <span class="n">LLP</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-305"></a> <span class="n">LLH</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-306"></a> <span class="k">DO </span><span class="mi">2</span> <span class="n">M</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span><span class="n">MNAUF</span> +<a name="ln-307"></a> <span class="n">SCR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-308"></a> <span class="n">SCI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-309"></a> <span class="n">ACR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-310"></a> <span class="n">ACI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-311"></a> <span class="n">MUSCR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-312"></a> <span class="n">MUSCI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-313"></a> <span class="n">MUACR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-314"></a> <span class="n">MUACI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-315"></a> <span class="n">LLS</span><span class="o">=</span><span class="n">LL</span> +<a name="ln-316"></a> <span class="n">LLPS</span><span class="o">=</span><span class="n">LLP</span> +<a name="ln-317"></a> <span class="n">LLHS</span><span class="o">=</span><span class="n">LLH</span> +<a name="ln-318"></a> <span class="k">IF</span> <span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span> <span class="p">.</span><span class="n">LT</span><span class="p">.</span> <span class="n">MAUF</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-319"></a><span class="k"> DO </span><span class="mi">1</span> <span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="mi">2</span> +<a name="ln-320"></a> <span class="n">RT</span><span class="o">=</span><span class="n">XMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-321"></a> <span class="n">IT</span><span class="o">=</span><span class="n">XMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-322"></a> <span class="n">SCR</span> <span class="o">=</span><span class="n">SCR</span><span class="o">+</span> <span class="n">RT</span><span class="o">*</span><span class="n">P</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span> +<a name="ln-323"></a> <span class="n">SCI</span> <span class="o">=</span><span class="n">SCI</span><span class="o">+</span> <span class="n">IT</span><span class="o">*</span><span class="n">P</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span> +<a name="ln-324"></a> <span class="n">MUACR</span> <span class="o">=</span><span class="n">MUACR</span><span class="o">+</span><span class="n">RT</span><span class="o">*</span><span class="n">H</span><span class="p">(</span><span class="n">LLH</span><span class="p">)</span> +<a name="ln-325"></a> <span class="n">MUACI</span> <span class="o">=</span><span class="n">MUACI</span><span class="o">+</span> <span class="n">IT</span><span class="o">*</span><span class="n">H</span><span class="p">(</span><span class="n">LLH</span><span class="p">)</span> +<a name="ln-326"></a> <span class="n">LL</span><span class="o">=</span><span class="n">LL</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-327"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-328"></a> <span class="n">LLH</span><span class="o">=</span><span class="n">LLH</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-329"></a><span class="mi">1</span> <span class="k">CONTINUE</span> +<a name="ln-330"></a><span class="k"> </span><span class="n">LL</span><span class="o">=</span><span class="n">LLS</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-331"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLPS</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-332"></a> <span class="n">LLH</span><span class="o">=</span><span class="n">LLHS</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-333"></a> <span class="k">DO </span><span class="mi">11</span> <span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="mi">2</span> +<a name="ln-334"></a> <span class="n">RT</span><span class="o">=</span><span class="n">XMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-335"></a> <span class="n">IT</span><span class="o">=</span><span class="n">XMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> +<a name="ln-336"></a> <span class="n">ACR</span> <span class="o">=</span><span class="n">ACR</span><span class="o">+</span> <span class="n">RT</span><span class="o">*</span><span class="n">P</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span> +<a name="ln-337"></a> <span class="n">ACI</span> <span class="o">=</span><span class="n">ACI</span><span class="o">+</span> <span class="n">IT</span><span class="o">*</span><span class="n">P</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span> +<a name="ln-338"></a> <span class="n">MUSCR</span> <span class="o">=</span><span class="n">MUSCR</span><span class="o">+</span> <span class="n">RT</span><span class="o">*</span><span class="n">H</span><span class="p">(</span><span class="n">LLH</span><span class="p">)</span> +<a name="ln-339"></a> <span class="n">MUSCI</span> <span class="o">=</span><span class="n">MUSCI</span><span class="o">+</span> <span class="n">IT</span><span class="o">*</span><span class="n">H</span><span class="p">(</span><span class="n">LLH</span><span class="p">)</span> +<a name="ln-340"></a> <span class="n">LL</span><span class="o">=</span><span class="n">LL</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-341"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-342"></a> <span class="n">LLH</span><span class="o">=</span><span class="n">LLH</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-343"></a><span class="mi">11</span> <span class="k">CONTINUE</span> +<a name="ln-344"></a><span class="k"> END IF</span> +<a name="ln-345"></a><span class="k"> </span><span class="n">LL</span><span class="o">=</span><span class="n">LLS</span><span class="o">+</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">-</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-346"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLPS</span><span class="o">+</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">-</span><span class="n">M</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span> +<a name="ln-347"></a> <span class="n">LLH</span><span class="o">=</span><span class="n">LLHS</span><span class="o">+</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">-</span><span class="n">M</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-348"></a> +<a name="ln-349"></a> <span class="n">UFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="p">)</span><span class="o">=-</span><span class="n">M</span><span class="o">*</span><span class="p">(</span><span class="n">SCI</span><span class="o">-</span><span class="n">ACI</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-350"></a> <span class="n">UFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">M</span><span class="o">*</span><span class="p">(</span><span class="n">SCR</span><span class="o">-</span><span class="n">ACR</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-351"></a> <span class="n">VFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="p">)</span><span class="o">=-</span><span class="n">M</span><span class="o">*</span><span class="p">(</span><span class="n">SCI</span><span class="o">+</span><span class="n">ACI</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-352"></a> <span class="n">VFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">M</span><span class="o">*</span><span class="p">(</span><span class="n">SCR</span><span class="o">+</span><span class="n">ACR</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-353"></a> +<a name="ln-354"></a> <span class="n">MUFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="p">)</span><span class="o">=-</span><span class="p">(</span><span class="n">MUSCR</span><span class="o">-</span><span class="n">MUACR</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-355"></a> <span class="n">MUFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=-</span><span class="p">(</span><span class="n">MUSCI</span><span class="o">-</span><span class="n">MUACI</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-356"></a> <span class="n">MVFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="p">)</span><span class="o">=-</span><span class="p">(</span><span class="n">MUSCR</span><span class="o">+</span><span class="n">MUACR</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-357"></a> <span class="n">MVFOUC</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">M</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=-</span><span class="p">(</span><span class="n">MUSCI</span><span class="o">+</span><span class="n">MUACI</span><span class="p">)</span><span class="o">/</span><span class="n">ERAD</span> +<a name="ln-358"></a><span class="mi">2</span> <span class="k">CONTINUE</span> +<a name="ln-359"></a> +<a name="ln-360"></a><span class="k"> CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">VFOUC</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-361"></a> +<a name="ln-362"></a> <span class="k">CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">MVFOUC</span><span class="p">,</span><span class="n">GWSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-363"></a> +<a name="ln-364"></a> <span class="k">DO </span><span class="mi">6</span> <span class="n">I</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">NI</span><span class="o">-</span><span class="mi">1</span> +<a name="ln-365"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MANF</span><span class="o">+</span><span class="n">I</span> <span class="p">.</span><span class="n">LE</span><span class="p">.</span> <span class="n">MAUF</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-366"></a><span class="k"> </span><span class="n">XLAM</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">VFOUC</span><span class="p">(</span><span class="n">MANF</span><span class="o">+</span><span class="n">I</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-367"></a> <span class="n">XPHI</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">MVFOUC</span><span class="p">(</span><span class="n">MANF</span><span class="o">+</span><span class="n">I</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-368"></a> <span class="k">ELSE</span> +<a name="ln-369"></a><span class="k"> </span><span class="n">XLAM</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">VFOUC</span><span class="p">(</span><span class="n">MANF</span><span class="o">-</span><span class="n">MAUF</span><span class="o">+</span><span class="n">I</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-370"></a> <span class="n">XPHI</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">MVFOUC</span><span class="p">(</span><span class="n">MANF</span><span class="o">-</span><span class="n">MAUF</span><span class="o">+</span><span class="n">I</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-371"></a> <span class="k">END IF</span> +<a name="ln-372"></a><span class="mi">6</span> <span class="k">CONTINUE</span> +<a name="ln-373"></a><span class="mi">3</span> <span class="k">CONTINUE</span> +<a name="ln-374"></a><span class="k"> </span><span class="n">GGIND</span><span class="o">=</span><span class="n">GGIND</span><span class="o">+</span><span class="n">MAUF</span> +<a name="ln-375"></a><span class="mi">4</span> <span class="k">CONTINUE</span> +<a name="ln-376"></a> +<a name="ln-377"></a><span class="k"> RETURN</span> +<a name="ln-378"></a> +<a name="ln-379"></a><span class="k"> END SUBROUTINE </span><span class="n">PHGRACUT</span> +<a name="ln-380"></a> +<a name="ln-381"></a> <span class="k">SUBROUTINE </span><span class="n">CONTGL</span><span class="p">(</span><span class="n">PS</span><span class="p">,</span><span class="n">DPSDL</span><span class="p">,</span><span class="n">DPSDM</span><span class="p">,</span><span class="n">DIV</span><span class="p">,</span><span class="n">U</span><span class="p">,</span><span class="n">V</span><span class="p">,</span><span class="n">BREITE</span><span class="p">,</span><span class="n">ETA</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">A</span><span class="p">,</span><span class="n">B</span><span class="p">,</span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-382"></a> +<a name="ln-383"></a><span class="c">!! Berechnung der Divergenz aus dem Windfeld (U,V)</span> +<a name="ln-384"></a><span class="c">!! im Phasenraum. Zurueckgegeben werden die Felder der</span> +<a name="ln-385"></a><span class="c">!! Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter.</span> +<a name="ln-386"></a><span class="c">! GWSAVE ist ein Hilfsfeld fuer die FFT</span> +<a name="ln-387"></a><span class="c">! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung</span> +<a name="ln-388"></a><span class="c">! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis</span> +<a name="ln-389"></a><span class="c">! MNAUF gibt die spektrale Aufloesung an,</span> +<a name="ln-390"></a><span class="c">! NI = Anzahl der Gauss'schen Gitterpunkte,</span> +<a name="ln-391"></a><span class="c">! NJ = Anzahl der Gauss'schen Breiten,</span> +<a name="ln-392"></a><span class="c">! NK = Anzahl der Niveaus</span> +<a name="ln-393"></a><span class="c">! Beachte, dass das Windfeld eine um 1 erhoehte Aufloesung in mu-Richtung hat.</span> +<a name="ln-394"></a> +<a name="ln-395"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-396"></a> +<a name="ln-397"></a><span class="k"> </span><span class="kt">INTEGER </span><span class="n">NI</span><span class="p">,</span><span class="n">NJ</span><span class="p">,</span><span class="n">NK</span><span class="p">,</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">NJ</span><span class="p">),</span><span class="n">L</span> +<a name="ln-398"></a> +<a name="ln-399"></a> <span class="kt">REAL </span><span class="n">A</span><span class="p">(</span><span class="n">NK</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span><span class="n">B</span><span class="p">(</span><span class="n">NK</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-400"></a> <span class="kt">REAL </span><span class="n">PS</span><span class="p">(</span><span class="n">NI</span><span class="p">),</span><span class="n">DPSDL</span><span class="p">(</span><span class="n">NI</span><span class="p">),</span><span class="n">DPSDM</span><span class="p">(</span><span class="n">NI</span><span class="p">)</span> +<a name="ln-401"></a> <span class="kt">REAL </span><span class="n">DIV</span><span class="p">(</span><span class="n">NI</span><span class="p">,</span><span class="n">NK</span><span class="p">),</span><span class="n">U</span><span class="p">(</span><span class="n">NI</span><span class="p">,</span><span class="n">NK</span><span class="p">),</span><span class="n">V</span><span class="p">(</span><span class="n">NI</span><span class="p">,</span><span class="n">NK</span><span class="p">),</span><span class="n">ETA</span><span class="p">(</span><span class="n">NI</span><span class="p">,</span><span class="n">NK</span><span class="p">)</span> +<a name="ln-402"></a> <span class="kt">REAL </span><span class="n">BREITE</span><span class="p">(</span><span class="n">NJ</span><span class="p">)</span> +<a name="ln-403"></a> +<a name="ln-404"></a> <span class="kt">REAL </span><span class="n">DIVT1</span><span class="p">,</span><span class="n">DIVT2</span><span class="p">,</span><span class="n">POB</span><span class="p">,</span><span class="n">PUN</span><span class="p">,</span><span class="n">DPSDT</span><span class="p">,</span><span class="n">COSB</span> +<a name="ln-405"></a> +<a name="ln-406"></a> <span class="n">L</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-407"></a> <span class="k">DO </span><span class="mi">4</span> <span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">NJ</span> +<a name="ln-408"></a> <span class="n">COSB</span><span class="o">=</span><span class="p">(</span><span class="mf">1.0</span><span class="o">-</span><span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">*</span><span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">))</span> +<a name="ln-409"></a> <span class="k">DO </span><span class="mi">3</span> <span class="n">I</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span> +<a name="ln-410"></a> <span class="n">L</span><span class="o">=</span><span class="n">L</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-411"></a> <span class="n">DIVT1</span><span class="o">=</span><span class="mf">0.0</span> +<a name="ln-412"></a> <span class="n">DIVT2</span><span class="o">=</span><span class="mf">0.0</span> +<a name="ln-413"></a> <span class="k">DO </span><span class="mi">1</span> <span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">NK</span> +<a name="ln-414"></a> <span class="n">POB</span><span class="o">=</span><span class="n">A</span><span class="p">(</span><span class="n">K</span><span class="p">)</span><span class="o">+</span><span class="n">B</span><span class="p">(</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">PS</span><span class="p">(</span><span class="n">L</span><span class="p">)</span> +<a name="ln-415"></a> <span class="n">PUN</span><span class="o">=</span><span class="n">A</span><span class="p">(</span><span class="n">K</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="n">B</span><span class="p">(</span><span class="n">K</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="n">PS</span><span class="p">(</span><span class="n">L</span><span class="p">)</span> +<a name="ln-416"></a> +<a name="ln-417"></a> <span class="n">DIVT1</span><span class="o">=</span><span class="n">DIVT1</span><span class="o">+</span><span class="n">DIV</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">PUN</span><span class="o">-</span><span class="n">POB</span><span class="p">)</span> +<a name="ln-418"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">COSB</span> <span class="p">.</span><span class="n">GT</span><span class="p">.</span> <span class="mf">0.</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-419"></a><span class="k"> </span><span class="n">DIVT2</span><span class="o">=</span><span class="n">DIVT2</span><span class="o">+</span><span class="p">(</span><span class="n">B</span><span class="p">(</span><span class="n">K</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">-</span><span class="n">B</span><span class="p">(</span><span class="n">K</span><span class="p">))</span><span class="o">*</span><span class="n">PS</span><span class="p">(</span><span class="n">L</span><span class="p">)</span><span class="o">*</span> <span class="p">&</span> +<a name="ln-420"></a> <span class="p">(</span><span class="n">U</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">DPSDL</span><span class="p">(</span><span class="n">L</span><span class="p">)</span><span class="o">+</span><span class="n">V</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">DPSDM</span><span class="p">(</span><span class="n">L</span><span class="p">))</span><span class="o">/</span><span class="n">COSB</span> +<a name="ln-421"></a> <span class="k">END IF</span> +<a name="ln-422"></a> +<a name="ln-423"></a><span class="k"> </span><span class="n">ETA</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=-</span><span class="n">DIVT1</span><span class="o">-</span><span class="n">DIVT2</span> +<a name="ln-424"></a><span class="mi">1</span> <span class="k">CONTINUE</span> +<a name="ln-425"></a> +<a name="ln-426"></a><span class="k"> </span><span class="n">DPSDT</span><span class="o">=</span><span class="p">(</span><span class="o">-</span><span class="n">DIVT1</span><span class="o">-</span><span class="n">DIVT2</span><span class="p">)</span><span class="o">/</span><span class="n">PS</span><span class="p">(</span><span class="n">L</span><span class="p">)</span> +<a name="ln-427"></a> +<a name="ln-428"></a> <span class="k">DO </span><span class="mi">2</span> <span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">NK</span> +<a name="ln-429"></a> <span class="n">ETA</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">ETA</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">-</span><span class="n">DPSDT</span><span class="o">*</span><span class="n">B</span><span class="p">(</span><span class="n">K</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="n">PS</span><span class="p">(</span><span class="n">L</span><span class="p">)</span> +<a name="ln-430"></a><span class="mi">2</span> <span class="k">CONTINUE</span> +<a name="ln-431"></a><span class="k"> </span><span class="n">PS</span><span class="p">(</span><span class="n">L</span><span class="p">)</span><span class="o">=</span><span class="n">DPSDT</span><span class="o">*</span><span class="n">PS</span><span class="p">(</span><span class="n">L</span><span class="p">)</span> +<a name="ln-432"></a><span class="mi">3</span> <span class="k">CONTINUE</span> +<a name="ln-433"></a><span class="mi">4</span> <span class="k">CONTINUE</span> +<a name="ln-434"></a> +<a name="ln-435"></a><span class="k"> RETURN</span> +<a name="ln-436"></a> +<a name="ln-437"></a><span class="k"> END SUBROUTINE </span><span class="n">CONTGL</span> +<a name="ln-438"></a> +<a name="ln-439"></a> <span class="k">SUBROUTINE </span><span class="n">OMEGA</span><span class="p">(</span><span class="n">PS</span><span class="p">,</span><span class="n">DPSDL</span><span class="p">,</span><span class="n">DPSDM</span><span class="p">,</span><span class="n">DIV</span><span class="p">,</span><span class="n">U</span><span class="p">,</span><span class="n">V</span><span class="p">,</span><span class="n">BREITE</span><span class="p">,</span><span class="n">E</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">A</span><span class="p">,</span><span class="n">B</span><span class="p">,</span><span class="n">NGI</span><span class="p">,</span><span class="n">NGJ</span><span class="p">,</span><span class="n">MKK</span><span class="p">)</span> +<a name="ln-440"></a> +<a name="ln-441"></a><span class="c">!! calculates $\omega$ in the hybrid ($\eta$-) coordinate system</span> +<a name="ln-442"></a> +<a name="ln-443"></a><span class="c">! OMEGA berechnet omega im Hybridkoordinatensystem</span> +<a name="ln-444"></a><span class="c">! PS ist der Bodendruck,</span> +<a name="ln-445"></a><span class="c">! DPSDL,DPSDM sind die Komponenten des Gradienten des Logarithmus des</span> +<a name="ln-446"></a><span class="c">! Bodendrucks</span> +<a name="ln-447"></a><span class="c">! DIV,U,V sind die horizontale Divergenz und das horizontale Windfeld</span> +<a name="ln-448"></a><span class="c">! BREITE ist das Feld der Gauss'schen Breiten</span> +<a name="ln-449"></a><span class="c">! E ist omega,</span> +<a name="ln-450"></a> +<a name="ln-451"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-452"></a> +<a name="ln-453"></a><span class="k"> </span><span class="kt">INTEGER </span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">,</span><span class="n">L</span><span class="p">,</span><span class="n">NGI</span><span class="p">,</span><span class="n">NGJ</span><span class="p">,</span><span class="n">MKK</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">NGJ</span><span class="p">)</span> +<a name="ln-454"></a> +<a name="ln-455"></a> <span class="kt">REAL </span><span class="n">PS</span><span class="p">(</span><span class="n">NGI</span><span class="p">),</span><span class="n">DPSDL</span><span class="p">(</span><span class="n">NGI</span><span class="p">),</span><span class="n">DPSDM</span><span class="p">(</span><span class="n">NGI</span><span class="p">),</span><span class="n">A</span><span class="p">(</span><span class="n">MKK</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span><span class="n">B</span><span class="p">(</span><span class="n">MKK</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-456"></a> <span class="kt">REAL </span><span class="n">DIV</span><span class="p">(</span><span class="n">NGI</span><span class="p">,</span><span class="n">MKK</span><span class="p">),</span><span class="n">U</span><span class="p">(</span><span class="n">NGI</span><span class="p">,</span><span class="n">MKK</span><span class="p">),</span><span class="n">V</span><span class="p">(</span><span class="n">NGI</span><span class="p">,</span><span class="n">MKK</span><span class="p">),</span><span class="n">E</span><span class="p">(</span><span class="n">NGI</span><span class="p">,</span><span class="n">MKK</span><span class="p">)</span> +<a name="ln-457"></a> <span class="kt">REAL </span><span class="n">BREITE</span><span class="p">(</span><span class="n">NGJ</span><span class="p">)</span> +<a name="ln-458"></a> +<a name="ln-459"></a> <span class="kt">REAL </span><span class="n">DIVT1</span><span class="p">,</span><span class="n">DIVT2</span><span class="p">,</span><span class="n">POB</span><span class="p">,</span><span class="n">PUN</span><span class="p">,</span><span class="n">DP</span><span class="p">,</span><span class="n">X</span><span class="p">,</span><span class="n">Y</span><span class="p">,</span><span class="n">COSB</span> +<a name="ln-460"></a> <span class="kt">REAL </span><span class="n">DIVT3</span><span class="p">(</span><span class="n">MKK</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-461"></a> +<a name="ln-462"></a> <span class="n">L</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-463"></a> <span class="k">DO </span><span class="mi">4</span> <span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">NGJ</span> +<a name="ln-464"></a> <span class="n">COSB</span><span class="o">=</span><span class="p">(</span><span class="mf">1.0</span><span class="o">-</span><span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">*</span><span class="n">BREITE</span><span class="p">(</span><span class="n">J</span><span class="p">))</span> +<a name="ln-465"></a> <span class="k">DO </span><span class="mi">3</span> <span class="n">I</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span> +<a name="ln-466"></a> <span class="n">L</span><span class="o">=</span><span class="n">L</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-467"></a> <span class="n">DIVT1</span><span class="o">=</span><span class="mf">0.0</span> +<a name="ln-468"></a> <span class="n">DIVT2</span><span class="o">=</span><span class="mf">0.0</span> +<a name="ln-469"></a> <span class="n">DIVT3</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="mf">0.0</span> +<a name="ln-470"></a> <span class="k">DO </span><span class="mi">1</span> <span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MKK</span> +<a name="ln-471"></a> <span class="n">POB</span><span class="o">=</span><span class="n">A</span><span class="p">(</span><span class="n">K</span><span class="p">)</span><span class="o">+</span><span class="n">B</span><span class="p">(</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">PS</span><span class="p">(</span><span class="n">L</span><span class="p">)</span> +<a name="ln-472"></a> <span class="n">PUN</span><span class="o">=</span><span class="n">A</span><span class="p">(</span><span class="n">K</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="n">B</span><span class="p">(</span><span class="n">K</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="n">PS</span><span class="p">(</span><span class="n">L</span><span class="p">)</span> +<a name="ln-473"></a> <span class="n">DP</span><span class="o">=</span><span class="n">PUN</span><span class="o">-</span><span class="n">POB</span> +<a name="ln-474"></a> +<a name="ln-475"></a> <span class="n">Y</span><span class="o">=</span><span class="n">PS</span><span class="p">(</span><span class="n">L</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">U</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">DPSDL</span><span class="p">(</span><span class="n">L</span><span class="p">)</span><span class="o">+</span><span class="n">V</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">DPSDM</span><span class="p">(</span><span class="n">L</span><span class="p">))</span><span class="o">/</span><span class="n">COSB</span> +<a name="ln-476"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">K</span> <span class="p">.</span><span class="n">LT</span><span class="p">.</span> <span class="mi">3</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-477"></a><span class="k"> </span><span class="n">X</span><span class="o">=</span><span class="mf">0.0</span> +<a name="ln-478"></a> <span class="k">ELSE</span> +<a name="ln-479"></a><span class="k"> </span><span class="n">X</span><span class="o">=</span><span class="p">(</span><span class="n">B</span><span class="p">(</span><span class="n">K</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">-</span><span class="n">B</span><span class="p">(</span><span class="n">K</span><span class="p">))</span><span class="o">*</span><span class="n">Y</span> +<a name="ln-480"></a> <span class="k">END IF</span> +<a name="ln-481"></a> +<a name="ln-482"></a><span class="k"> </span><span class="n">DIVT1</span><span class="o">=</span><span class="n">DIVT1</span><span class="o">+</span><span class="n">DIV</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">DP</span> +<a name="ln-483"></a> <span class="n">DIVT2</span><span class="o">=</span><span class="n">DIVT2</span><span class="o">+</span><span class="n">X</span> +<a name="ln-484"></a> +<a name="ln-485"></a> <span class="n">DIVT3</span><span class="p">(</span><span class="n">K</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=-</span><span class="n">DIVT1</span><span class="o">-</span><span class="n">DIVT2</span> +<a name="ln-486"></a> +<a name="ln-487"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">K</span> <span class="p">.</span><span class="n">GT</span><span class="p">.</span> <span class="mi">1</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-488"></a><span class="k"> </span><span class="n">E</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> <span class="o">=</span> <span class="mf">0.5</span><span class="o">*</span><span class="p">(</span><span class="n">POB</span><span class="o">+</span><span class="n">PUN</span><span class="p">)</span><span class="o">/</span> <span class="p">&</span> +<a name="ln-489"></a> <span class="n">DP</span><span class="o">*</span><span class="n">Y</span><span class="o">*</span><span class="p">((</span><span class="n">B</span><span class="p">(</span><span class="n">K</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">-</span><span class="n">B</span><span class="p">(</span><span class="n">K</span><span class="p">))</span><span class="o">+</span><span class="p">(</span><span class="n">A</span><span class="p">(</span><span class="n">K</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="n">B</span><span class="p">(</span><span class="n">K</span><span class="p">)</span><span class="o">-</span><span class="n">A</span><span class="p">(</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">B</span><span class="p">(</span><span class="n">K</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span><span class="o">/</span><span class="n">DP</span><span class="o">*</span><span class="nb">LOG</span><span class="p">(</span><span class="n">PUN</span><span class="o">/</span><span class="n">POB</span><span class="p">))</span> +<a name="ln-490"></a> <span class="k">ELSE</span> +<a name="ln-491"></a><span class="k"> </span><span class="n">E</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> <span class="o">=</span> <span class="mf">0.0</span> +<a name="ln-492"></a> <span class="k">END IF</span> +<a name="ln-493"></a> +<a name="ln-494"></a><span class="k"> </span><span class="n">E</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">K</span><span class="p">)</span> <span class="o">=</span> <span class="n">E</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">+</span><span class="mf">0.5</span><span class="o">*</span><span class="p">(</span><span class="n">DIVT3</span><span class="p">(</span><span class="n">K</span><span class="p">)</span><span class="o">+</span><span class="n">DIVT3</span><span class="p">(</span><span class="n">K</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span> +<a name="ln-495"></a> +<a name="ln-496"></a><span class="mi">1</span> <span class="k">CONTINUE</span> +<a name="ln-497"></a><span class="mi">3</span> <span class="k">CONTINUE</span> +<a name="ln-498"></a><span class="mi">4</span> <span class="k">CONTINUE</span> +<a name="ln-499"></a> +<a name="ln-500"></a><span class="k"> RETURN</span> +<a name="ln-501"></a> +<a name="ln-502"></a><span class="k"> END SUBROUTINE </span><span class="n">OMEGA</span> +<a name="ln-503"></a> +<a name="ln-504"></a><span class="k">END MODULE </span><span class="n">FTRAFO</span> +</pre></div> + + </section> + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/sourcefile/grphreal.f90.html b/Documentation/html/Documentation/Api/Fortran/sourcefile/grphreal.f90.html new file mode 100644 index 0000000000000000000000000000000000000000..9acdffade7e911d0e3968c714ce33d0cc4ca0a63 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/sourcefile/grphreal.f90.html @@ -0,0 +1,648 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>grphreal.f90 – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>grphreal.f90 + <small>Source File</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 7.4% of total for source files.">104 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/grphreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + + <li class="active">grphreal.f90</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#mods-0">Modules</a></h3></div> + <div id="mods-0" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../module/grtoph.html">GRTOPH</a> + + </div> + </div> +</div> + + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title">Source Code</h3></div> + <div class="list-group"> + <a class="list-group-item" href="../sourcefile/grphreal.f90.html#src">grphreal.f90</a> + </div> +</div> + + + +</div> + + </div> + <div class="col-md-9" id='text'> + + <br> + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">This file depends on</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: sourcefile~~grphreal.f90~~EfferentGraph Pages: 1 --> +<svg id="sourcefilegrphrealf90EfferentGraph" width="184pt" height="32pt" + viewBox="0.00 0.00 184.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="sourcefile~~grphreal.f90~~EfferentGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>sourcefile~~grphreal.f90~~EfferentGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 180,-28 180,4 -4,4"/> +<!-- sourcefile~grphreal.f90 --> +<g id="sourcefile~~grphreal.f90~~EfferentGraph_node1" class="node"><title>sourcefile~grphreal.f90</title> +<polygon fill="none" stroke="black" points="176,-24 106,-24 106,-0 176,-0 176,-24"/> +<text text-anchor="middle" x="141" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">grphreal.f90</text> +</g> +<!-- sourcefile~phgrreal.f90 --> +<g id="sourcefile~~grphreal.f90~~EfferentGraph_node2" class="node"><title>sourcefile~phgrreal.f90</title> +<g id="a_sourcefile~~grphreal.f90~~EfferentGraph_node2"><a xlink:href=".././sourcefile/phgrreal.f90.html" xlink:title="phgrreal.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="70,-24 0,-24 0,-0 70,-0 70,-24"/> +<text text-anchor="middle" x="35" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">phgrreal.f90</text> +</a> +</g> +</g> +<!-- sourcefile~grphreal.f90->sourcefile~phgrreal.f90 --> +<g id="sourcefile~~grphreal.f90~~EfferentGraph_edge1" class="edge"><title>sourcefile~grphreal.f90->sourcefile~phgrreal.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M105.947,-12C97.776,-12 88.9318,-12 80.3697,-12"/> +<polygon fill="#000000" stroke="#000000" points="80.13,-8.5001 70.13,-12 80.13,-15.5001 80.13,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="190pt" height="32pt" + viewBox="0.00 0.00 190.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 186,-28 186,4 -4,4"/> +<!-- Source File --> +<g id="node1" class="node"><title>Source File</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Source File</text> +</g> +<!-- This Page's Entity --> +<g id="node2" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="182,-24 85,-24 85,-0 182,-0 182,-24"/> +<text text-anchor="middle" x="133.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a file to a file which it depends on. A file + is dependent upon another if the latter must be compiled before the former + can be. + </p> + </div></div></div></div> + </div> + </div> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Files dependent on this one</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: sourcefile~~grphreal.f90~~AfferentGraph Pages: 1 --> +<svg id="sourcefilegrphrealf90AfferentGraph" width="199pt" height="32pt" + viewBox="0.00 0.00 199.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="sourcefile~~grphreal.f90~~AfferentGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>sourcefile~~grphreal.f90~~AfferentGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 195,-28 195,4 -4,4"/> +<!-- sourcefile~grphreal.f90 --> +<g id="sourcefile~~grphreal.f90~~AfferentGraph_node1" class="node"><title>sourcefile~grphreal.f90</title> +<polygon fill="none" stroke="black" points="70,-24 0,-24 0,-0 70,-0 70,-24"/> +<text text-anchor="middle" x="35" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">grphreal.f90</text> +</g> +<!-- sourcefile~calc_etadot.f90 --> +<g id="sourcefile~~grphreal.f90~~AfferentGraph_node2" class="node"><title>sourcefile~calc_etadot.f90</title> +<g id="a_sourcefile~~grphreal.f90~~AfferentGraph_node2"><a xlink:href=".././sourcefile/calc_etadot.f90.html" xlink:title="calc_etadot.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="191,-24 106,-24 106,-0 191,-0 191,-24"/> +<text text-anchor="middle" x="148.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot.f90</text> +</a> +</g> +</g> +<!-- sourcefile~calc_etadot.f90->sourcefile~grphreal.f90 --> +<g id="sourcefile~~grphreal.f90~~AfferentGraph_edge1" class="edge"><title>sourcefile~calc_etadot.f90->sourcefile~grphreal.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M105.982,-12C97.618,-12 88.7965,-12 80.3409,-12"/> +<polygon fill="#000000" stroke="#000000" points="80.2637,-8.5001 70.2637,-12 80.2636,-15.5001 80.2637,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="190pt" height="32pt" + viewBox="0.00 0.00 190.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 186,-28 186,4 -4,4"/> +<!-- Source File --> +<g id="node1" class="node"><title>Source File</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Source File</text> +</g> +<!-- This Page's Entity --> +<g id="node2" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="182,-24 85,-24 85,-0 182,-0 182,-24"/> +<text text-anchor="middle" x="133.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a file to a file which it depends on. A file + is dependent upon another if the latter must be compiled before the former + can be. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#mods-1">Modules</a></h3></div> + <div id="mods-1" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../module/grtoph.html">GRTOPH</a> + + </div> + </div> +</div> + + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title">Source Code</h3></div> + <div class="list-group"> + <a class="list-group-item" href="../sourcefile/grphreal.f90.html#src">grphreal.f90</a> + </div> +</div> + + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + <section> + <h2><span class="anchor" id="src"></span>Source Code</h2> + <div class="hl"><pre><span></span><a name="ln-1"></a><span class="k">MODULE </span><span class="n">GRTOPH</span> +<a name="ln-2"></a> +<a name="ln-3"></a> <span class="k">USE </span><span class="n">PHTOGR</span> +<a name="ln-4"></a> +<a name="ln-5"></a><span class="k">CONTAINS</span> +<a name="ln-6"></a> +<a name="ln-7"></a><span class="k"> SUBROUTINE </span><span class="n">GRPH213</span><span class="p">(</span><span class="n">CXMN</span><span class="p">,</span><span class="n">FELD</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">W</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-8"></a> +<a name="ln-9"></a><span class="c">!! WRONG>>> DIE ROUTINE F]HRT EINE TRANSFORMATION EINER</span> +<a name="ln-10"></a><span class="c">!! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN</span> +<a name="ln-11"></a><span class="c">!! RAUM AUF KUGELKOORDINATEN DURCH</span> +<a name="ln-12"></a> +<a name="ln-13"></a><span class="c">! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE</span> +<a name="ln-14"></a><span class="c">! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF</span> +<a name="ln-15"></a><span class="c">! CXM = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld</span> +<a name="ln-16"></a><span class="c">! FELD = FELD DER METEOROLOGISCHEN VARIABLEN</span> +<a name="ln-17"></a><span class="c">! WSAVE = Working Array fuer Fouriertransformation</span> +<a name="ln-18"></a><span class="c">! Z = LEGENDREFUNKTIONSWERTE</span> +<a name="ln-19"></a><span class="c">!</span> +<a name="ln-20"></a><span class="c">! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN</span> +<a name="ln-21"></a><span class="c">! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN</span> +<a name="ln-22"></a><span class="c">! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN</span> +<a name="ln-23"></a><span class="c">! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN</span> +<a name="ln-24"></a> +<a name="ln-25"></a> <span class="k">IMPLICIT </span><span class="kt">REAL</span> <span class="p">(</span><span class="n">A</span><span class="o">-</span><span class="n">H</span><span class="p">,</span><span class="n">O</span><span class="o">-</span><span class="n">Z</span><span class="p">)</span> +<a name="ln-26"></a> +<a name="ln-27"></a><span class="c">! Anzahl der Gitterpunkte pro Breitenkreis des reduzierten</span> +<a name="ln-28"></a><span class="c">! Gauss'schen Gitters</span> +<a name="ln-29"></a> <span class="kt">INTEGER </span><span class="n">MLAT</span><span class="p">(</span><span class="n">MAXB</span><span class="p">),</span><span class="n">ISIZE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-30"></a> +<a name="ln-31"></a><span class="c">! FELD DER LEGENDREPOLYNOME FUER EINE BREITE</span> +<a name="ln-32"></a> <span class="kt">REAL </span><span class="n">Z</span><span class="p">(</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">:((</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-33"></a> +<a name="ln-34"></a><span class="c">! LOGICAL*1 USED(((216*217)/2+1)*160)</span> +<a name="ln-35"></a> +<a name="ln-36"></a> <span class="k">DIMENSION </span><span class="n">CXMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-37"></a> <span class="kt">REAL </span><span class="n">FELD</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-38"></a> <span class="k">DIMENSION </span><span class="n">WSAVE</span><span class="p">(</span><span class="mi">8</span><span class="o">*</span><span class="n">MAXB</span><span class="o">+</span><span class="mi">15</span><span class="p">,</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-39"></a> <span class="kt">REAL </span><span class="n">W</span><span class="p">(</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-40"></a> <span class="k">DIMENSION </span><span class="n">IND</span><span class="p">(</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-41"></a> +<a name="ln-42"></a> <span class="n">IND</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-43"></a> <span class="k">DO </span><span class="mi">6</span> <span class="n">J</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-44"></a> <span class="n">IND</span><span class="p">(</span><span class="n">j</span><span class="p">)</span><span class="o">=</span><span class="n">IND</span><span class="p">(</span><span class="n">J</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-45"></a><span class="mi">6</span> <span class="k">CONTINUE</span> +<a name="ln-46"></a><span class="c">!$OMP PARALLEL DO SCHEDULE(DYNAMIC)</span> +<a name="ln-47"></a> <span class="k">DO </span><span class="mi">16</span> <span class="n">L</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span> +<a name="ln-48"></a> <span class="k">CALL </span><span class="n">GRPHSUB</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">IND</span><span class="p">,</span><span class="n">CXMN</span><span class="p">,</span><span class="n">FELD</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">W</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-49"></a><span class="mi">16</span> <span class="k">CONTINUE</span> +<a name="ln-50"></a><span class="c">!$omp end parallel do</span> +<a name="ln-51"></a> +<a name="ln-52"></a> <span class="k">RETURN</span> +<a name="ln-53"></a> +<a name="ln-54"></a><span class="k"> END SUBROUTINE </span><span class="n">GRPH213</span> +<a name="ln-55"></a> +<a name="ln-56"></a> <span class="k">SUBROUTINE </span><span class="n">GRPHSUB</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">IND</span><span class="p">,</span><span class="n">CXMN</span><span class="p">,</span><span class="n">FELD</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">W</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-57"></a> +<a name="ln-58"></a><span class="c">!! DIE ROUTINE F]HRT EINE TRANSFORMATION EINER</span> +<a name="ln-59"></a><span class="c">!! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN</span> +<a name="ln-60"></a><span class="c">!! RAUM AUF KUGELKOORDINATEN DURCH</span> +<a name="ln-61"></a><span class="c">!</span> +<a name="ln-62"></a><span class="c">! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE</span> +<a name="ln-63"></a><span class="c">! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF</span> +<a name="ln-64"></a><span class="c">! CXM = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld</span> +<a name="ln-65"></a><span class="c">! FELD = FELD DER METEOROLOGISCHEN VARIABLEN</span> +<a name="ln-66"></a><span class="c">! WSAVE = Working Array fuer Fouriertransformation</span> +<a name="ln-67"></a><span class="c">! Z = LEGENDREFUNKTIONSWERTE</span> +<a name="ln-68"></a><span class="c">!</span> +<a name="ln-69"></a><span class="c">! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN</span> +<a name="ln-70"></a><span class="c">! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN</span> +<a name="ln-71"></a><span class="c">! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN</span> +<a name="ln-72"></a><span class="c">! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN</span> +<a name="ln-73"></a> +<a name="ln-74"></a> <span class="k">IMPLICIT </span><span class="kt">REAL</span> <span class="p">(</span><span class="n">A</span><span class="o">-</span><span class="n">H</span><span class="p">,</span><span class="n">O</span><span class="o">-</span><span class="n">Z</span><span class="p">)</span> +<a name="ln-75"></a> +<a name="ln-76"></a><span class="c">! FELD DER FOURIERKOEFFIZIENTEN</span> +<a name="ln-77"></a> <span class="kt">REAL </span><span class="n">CXMS</span><span class="p">(</span><span class="mi">4</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span> +<a name="ln-78"></a> <span class="kt">REAL </span><span class="n">CXMA</span><span class="p">(</span><span class="mi">4</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span> +<a name="ln-79"></a> <span class="kt">REAL</span><span class="p">,</span><span class="k">ALLOCATABLE</span> <span class="kd">::</span> <span class="n">CXM</span><span class="p">(:,:)</span> +<a name="ln-80"></a> +<a name="ln-81"></a><span class="c">! Anzahl der Gitterpunkte pro Breitenkreis des reduzierten</span> +<a name="ln-82"></a><span class="c">! Gauss'schen Gitters</span> +<a name="ln-83"></a> <span class="kt">INTEGER </span><span class="n">MLAT</span><span class="p">(</span><span class="n">MAXB</span><span class="p">),</span><span class="n">ISIZE</span> +<a name="ln-84"></a> +<a name="ln-85"></a><span class="c">! FELD DER LEGENDREPOLYNOME FUER EINE BREITE</span> +<a name="ln-86"></a> <span class="kt">REAL </span><span class="n">Z</span><span class="p">(</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">:((</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-87"></a> +<a name="ln-88"></a><span class="c">! LOGICAL*1 USED(((216*217)/2+1)*160)</span> +<a name="ln-89"></a> +<a name="ln-90"></a> <span class="kt">REAL </span><span class="n">CXMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-91"></a> <span class="kt">REAL </span><span class="n">FELD</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-92"></a> <span class="kt">REAL </span><span class="n">WSAVE</span><span class="p">(</span><span class="mi">8</span><span class="o">*</span><span class="n">MAXB</span><span class="o">+</span><span class="mi">15</span><span class="p">,</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-93"></a> <span class="kt">INTEGER </span><span class="n">IFAX</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-94"></a> <span class="kt">REAL </span><span class="n">W</span><span class="p">(</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-95"></a> <span class="kt">INTEGER </span><span class="n">IND</span><span class="p">(</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-96"></a> +<a name="ln-97"></a> <span class="k">ALLOCATE</span><span class="p">(</span><span class="n">CXM</span><span class="p">(</span> <span class="mi">4</span><span class="o">*</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MAXB</span><span class="p">))</span> +<a name="ln-98"></a> <span class="k">DO </span><span class="mi">5</span> <span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-99"></a> <span class="n">CXMS</span><span class="p">(</span><span class="mi">1</span><span class="p">:</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">))</span><span class="o">=</span><span class="n">FELD</span><span class="p">(</span><span class="n">IND</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">IND</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">+</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="n">L</span><span class="p">)</span> +<a name="ln-100"></a> <span class="k">CALL </span><span class="n">RFOUFTR</span><span class="p">(</span><span class="n">CXMS</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">),</span><span class="n">IFAX</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-101"></a> <span class="n">CXMA</span><span class="p">(</span><span class="mi">1</span><span class="p">:</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">))</span><span class="o">=</span><span class="n">FELD</span><span class="p">(</span><span class="n">MAXL</span><span class="o">-</span><span class="n">IND</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">-</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">MAXL</span><span class="o">-</span><span class="n">IND</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="n">L</span><span class="p">)</span> +<a name="ln-102"></a> <span class="k">CALL </span><span class="n">RFOUFTR</span><span class="p">(</span><span class="n">CXMA</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">),</span><span class="n">IFAX</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">J</span><span class="p">),</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-103"></a> <span class="k">DO </span><span class="mi">4</span> <span class="n">I</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-104"></a> <span class="n">CXM</span><span class="p">(</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">)</span><span class="o">=</span><span class="n">CXMS</span><span class="p">(</span><span class="n">I</span><span class="p">)</span><span class="o">+</span><span class="n">CXMA</span><span class="p">(</span><span class="n">I</span><span class="p">)</span> +<a name="ln-105"></a> <span class="n">CXM</span><span class="p">(</span><span class="n">I</span><span class="p">,</span><span class="n">MAXB</span><span class="o">+</span><span class="mi">1</span><span class="o">-</span><span class="n">J</span><span class="p">)</span><span class="o">=</span><span class="n">CXMS</span><span class="p">(</span><span class="n">I</span><span class="p">)</span><span class="o">-</span><span class="n">CXMA</span><span class="p">(</span><span class="n">I</span><span class="p">)</span> +<a name="ln-106"></a><span class="mi">4</span> <span class="k">CONTINUE</span> +<a name="ln-107"></a><span class="mi">5</span> <span class="k">CONTINUE</span> +<a name="ln-108"></a><span class="k"> CALL </span><span class="n">LGTR213</span><span class="p">(</span><span class="n">CXMN</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">L</span><span class="p">),</span><span class="n">CXM</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">W</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-109"></a> +<a name="ln-110"></a> <span class="k">DEALLOCATE</span><span class="p">(</span><span class="n">CXM</span><span class="p">)</span> +<a name="ln-111"></a> +<a name="ln-112"></a> <span class="k">RETURN</span> +<a name="ln-113"></a><span class="k"> </span> +<a name="ln-114"></a><span class="k"> END SUBROUTINE </span><span class="n">GRPHSUB</span> +<a name="ln-115"></a><span class="c">!</span> +<a name="ln-116"></a> <span class="k">SUBROUTINE </span><span class="n">LGTR213</span><span class="p">(</span><span class="n">CXMN</span><span class="p">,</span><span class="n">CXM</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">W</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-117"></a> +<a name="ln-118"></a><span class="c">!! DIESE ROUTINE BERECHNET DIE KFFKs CXMN</span> +<a name="ln-119"></a> +<a name="ln-120"></a> <span class="k">IMPLICIT </span><span class="kt">REAL</span> <span class="p">(</span><span class="n">A</span><span class="o">-</span><span class="n">H</span><span class="p">,</span><span class="n">O</span><span class="o">-</span><span class="n">Z</span><span class="p">)</span> +<a name="ln-121"></a> <span class="kt">INTEGER </span><span class="n">MLAT</span><span class="p">(</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-122"></a> <span class="k">DIMENSION </span><span class="n">CXM</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="mi">4</span><span class="o">*</span><span class="n">MAXB</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-123"></a> <span class="k">DIMENSION </span><span class="n">CXMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="o">*</span><span class="p">(((</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="n">MNAUF</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="o">+</span><span class="n">MNAUF</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-124"></a> <span class="kt">REAL</span><span class="o">*</span><span class="mi">8</span> <span class="n">Z</span><span class="p">(</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">:((</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-125"></a> <span class="kt">REAL</span><span class="o">*</span><span class="mi">8</span> <span class="n">W</span><span class="p">(</span><span class="n">MAXB</span><span class="p">),</span><span class="n">CR</span><span class="p">,</span><span class="n">CI</span><span class="p">,</span><span class="n">HILF</span> +<a name="ln-126"></a> <span class="kt">LOGICAL </span><span class="n">EVEN</span> +<a name="ln-127"></a> +<a name="ln-128"></a> +<a name="ln-129"></a> <span class="n">LL</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-130"></a> <span class="n">LLP</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-131"></a> <span class="k">DO </span><span class="mi">1</span> <span class="n">I</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">MNAUF</span> +<a name="ln-132"></a> <span class="n">KM</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-133"></a><span class="mi">9</span> <span class="n">KM</span><span class="o">=</span><span class="n">KM</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-134"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MLAT</span><span class="p">(</span><span class="n">KM</span><span class="p">)</span> <span class="p">.</span><span class="n">LE</span><span class="p">.</span> <span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-135"></a><span class="k"> GOTO </span><span class="mi">9</span> +<a name="ln-136"></a> <span class="k">END IF</span> +<a name="ln-137"></a><span class="k"> DO </span><span class="mi">2</span> <span class="n">J</span><span class="o">=</span><span class="n">I</span><span class="p">,</span><span class="n">MNAUF</span> +<a name="ln-138"></a> <span class="n">CR</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-139"></a> <span class="n">CI</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-140"></a> <span class="n">EVEN</span><span class="o">=</span><span class="nb">MOD</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="n">J</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">0</span> +<a name="ln-141"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">EVEN</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-142"></a><span class="k"> DO </span><span class="mi">3</span> <span class="n">K</span><span class="o">=</span><span class="n">KM</span><span class="p">,</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-143"></a> <span class="n">HILF</span><span class="o">=</span><span class="n">W</span><span class="p">(</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">Z</span><span class="p">(</span><span class="n">K</span><span class="p">,</span><span class="n">LLP</span><span class="p">)</span> +<a name="ln-144"></a> <span class="n">CR</span><span class="o">=</span><span class="n">CR</span><span class="o">+</span><span class="n">CXM</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">HILF</span> +<a name="ln-145"></a> <span class="n">CI</span><span class="o">=</span><span class="n">CI</span><span class="o">+</span><span class="n">CXM</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">HILF</span> +<a name="ln-146"></a><span class="mi">3</span> <span class="k">CONTINUE</span> +<a name="ln-147"></a><span class="k"> ELSE</span> +<a name="ln-148"></a><span class="k"> DO </span><span class="mi">4</span> <span class="n">K</span><span class="o">=</span><span class="n">KM</span><span class="p">,</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-149"></a> <span class="n">HILF</span><span class="o">=</span><span class="n">W</span><span class="p">(</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">Z</span><span class="p">(</span><span class="n">K</span><span class="p">,</span><span class="n">LLP</span><span class="p">)</span> +<a name="ln-150"></a> <span class="n">CR</span><span class="o">=</span><span class="n">CR</span><span class="o">+</span><span class="n">CXM</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="p">,</span><span class="n">MAXB</span><span class="o">+</span><span class="mi">1</span><span class="o">-</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">HILF</span> +<a name="ln-151"></a> <span class="n">CI</span><span class="o">=</span><span class="n">CI</span><span class="o">+</span><span class="n">CXM</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXB</span><span class="o">+</span><span class="mi">1</span><span class="o">-</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">HILF</span> +<a name="ln-152"></a><span class="mi">4</span> <span class="k">CONTINUE</span> +<a name="ln-153"></a><span class="k"> END IF</span> +<a name="ln-154"></a><span class="mi">5</span> <span class="n">CXMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="p">)</span><span class="o">=</span><span class="n">CR</span> +<a name="ln-155"></a> <span class="n">CXMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">CI</span> +<a name="ln-156"></a> <span class="n">LL</span><span class="o">=</span><span class="n">LL</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-157"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-158"></a><span class="mi">2</span> <span class="k">CONTINUE</span> +<a name="ln-159"></a><span class="k"> </span><span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-160"></a><span class="mi">1</span> <span class="k">CONTINUE</span> +<a name="ln-161"></a><span class="k"> RETURN</span> +<a name="ln-162"></a><span class="k"> </span> +<a name="ln-163"></a><span class="k"> END SUBROUTINE </span><span class="n">LGTR213</span> +<a name="ln-164"></a> +<a name="ln-165"></a> <span class="k">SUBROUTINE </span><span class="n">RFOUFTR</span><span class="p">(</span><span class="n">CXM</span><span class="p">,</span><span class="n">TRIGS</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="nb">ISIGN</span><span class="p">)</span> +<a name="ln-166"></a><span class="c">!</span> +<a name="ln-167"></a><span class="c">! BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS</span> +<a name="ln-168"></a> +<a name="ln-169"></a> <span class="k">IMPLICIT </span><span class="kt">REAL</span> <span class="p">(</span><span class="n">A</span><span class="o">-</span><span class="n">H</span><span class="p">,</span><span class="n">O</span><span class="o">-</span><span class="n">Z</span><span class="p">)</span> +<a name="ln-170"></a> <span class="k">DIMENSION </span><span class="n">CXM</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="o">*</span><span class="n">MAXL</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-171"></a> <span class="k">DIMENSION </span><span class="n">FELD</span><span class="p">(</span><span class="n">MAXL</span><span class="p">),</span><span class="n">TRIGS</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">MAXL</span><span class="p">)</span> +<a name="ln-172"></a> <span class="k">DIMENSION </span><span class="n">WSAVE</span><span class="p">(</span><span class="n">MAXAUF</span><span class="p">)</span> +<a name="ln-173"></a> <span class="kt">INTEGER </span><span class="n">IFAX</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> +<a name="ln-174"></a> +<a name="ln-175"></a><span class="c">! NORMIERUNG...</span> +<a name="ln-176"></a> <span class="n">WSAVE</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">CXM</span><span class="p">(</span><span class="n">MAXL</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-177"></a> +<a name="ln-178"></a> <span class="n">CXM</span><span class="p">(</span><span class="mi">1</span><span class="p">:</span><span class="n">MAXL</span><span class="p">)</span><span class="o">=</span><span class="n">CXM</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXL</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-179"></a> <span class="n">CXM</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">=</span><span class="n">WSAVE</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-180"></a><span class="c">! CALL CFFTF(MAXL,CXM,WSAVE)</span> +<a name="ln-181"></a> <span class="k">CALL </span><span class="n">FFT99</span><span class="p">(</span><span class="n">CXM</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">TRIGS</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-182"></a> <span class="k">RETURN</span> +<a name="ln-183"></a><span class="k"> END SUBROUTINE </span><span class="n">RFOUFTR</span> +<a name="ln-184"></a> +<a name="ln-185"></a><span class="k">END MODULE </span><span class="n">GRTOPH</span> +</pre></div> + + </section> + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/sourcefile/phgrreal.f90.html b/Documentation/html/Documentation/Api/Fortran/sourcefile/phgrreal.f90.html new file mode 100644 index 0000000000000000000000000000000000000000..b679c3c6493c3d676d2b312884244e940a6de6a3 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/sourcefile/phgrreal.f90.html @@ -0,0 +1,944 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>phgrreal.f90 – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>phgrreal.f90 + <small>Source File</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title="23.6% of total for source files.">333 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/phgrreal.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + + <li class="active">phgrreal.f90</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#mods-0">Modules</a></h3></div> + <div id="mods-0" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../module/phtogr.html">PHTOGR</a> + + </div> + </div> +</div> + + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title">Source Code</h3></div> + <div class="list-group"> + <a class="list-group-item" href="../sourcefile/phgrreal.f90.html#src">phgrreal.f90</a> + </div> +</div> + + + +</div> + + </div> + <div class="col-md-9" id='text'> + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Files dependent on this one</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: sourcefile~~phgrreal.f90~~AfferentGraph Pages: 1 --> +<svg id="sourcefilephgrrealf90AfferentGraph" width="305pt" height="86pt" + viewBox="0.00 0.00 305.00 86.28" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="sourcefile~~phgrreal.f90~~AfferentGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 82.2849)"> +<title>sourcefile~~phgrreal.f90~~AfferentGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-82.2849 301,-82.2849 301,4 -4,4"/> +<!-- sourcefile~phgrreal.f90 --> +<g id="sourcefile~~phgrreal.f90~~AfferentGraph_node1" class="node"><title>sourcefile~phgrreal.f90</title> +<polygon fill="none" stroke="black" points="70,-66 0,-66 0,-42 70,-42 70,-66"/> +<text text-anchor="middle" x="35" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50">phgrreal.f90</text> +</g> +<!-- sourcefile~calc_etadot.f90 --> +<g id="sourcefile~~phgrreal.f90~~AfferentGraph_node2" class="node"><title>sourcefile~calc_etadot.f90</title> +<g id="a_sourcefile~~phgrreal.f90~~AfferentGraph_node2"><a xlink:href=".././sourcefile/calc_etadot.f90.html" xlink:title="calc_etadot.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="297,-66 212,-66 212,-42 297,-42 297,-66"/> +<text text-anchor="middle" x="254.5" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot.f90</text> +</a> +</g> +</g> +<!-- sourcefile~calc_etadot.f90->sourcefile~phgrreal.f90 --> +<g id="sourcefile~~phgrreal.f90~~AfferentGraph_edge1" class="edge"><title>sourcefile~calc_etadot.f90->sourcefile~phgrreal.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M216.852,-66.0643C204.073,-69.6979 189.542,-73.1978 176,-75 145.161,-79.1042 136.781,-79.5177 106,-75 97.0616,-73.6881 87.6802,-71.4814 78.7937,-68.9792"/> +<polygon fill="#000000" stroke="#000000" points="79.6042,-65.5686 69.0208,-66.0604 77.601,-72.2758 79.6042,-65.5686"/> +</g> +<!-- sourcefile~ftrafo.f90 --> +<g id="sourcefile~~phgrreal.f90~~AfferentGraph_node3" class="node"><title>sourcefile~ftrafo.f90</title> +<g id="a_sourcefile~~phgrreal.f90~~AfferentGraph_node3"><a xlink:href=".././sourcefile/ftrafo.f90.html" xlink:title="ftrafo.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="168.5,-66 113.5,-66 113.5,-42 168.5,-42 168.5,-66"/> +<text text-anchor="middle" x="141" y="-51.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">ftrafo.f90</text> +</a> +</g> +</g> +<!-- sourcefile~calc_etadot.f90->sourcefile~ftrafo.f90 --> +<g id="sourcefile~~phgrreal.f90~~AfferentGraph_edge4" class="edge"><title>sourcefile~calc_etadot.f90->sourcefile~ftrafo.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M211.982,-54C201.115,-54 189.476,-54 178.87,-54"/> +<polygon fill="#000000" stroke="#000000" points="178.676,-50.5001 168.676,-54 178.676,-57.5001 178.676,-50.5001"/> +</g> +<!-- sourcefile~grphreal.f90 --> +<g id="sourcefile~~phgrreal.f90~~AfferentGraph_node4" class="node"><title>sourcefile~grphreal.f90</title> +<g id="a_sourcefile~~phgrreal.f90~~AfferentGraph_node4"><a xlink:href=".././sourcefile/grphreal.f90.html" xlink:title="grphreal.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="176,-24 106,-24 106,-0 176,-0 176,-24"/> +<text text-anchor="middle" x="141" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">grphreal.f90</text> +</a> +</g> +</g> +<!-- sourcefile~calc_etadot.f90->sourcefile~grphreal.f90 --> +<g id="sourcefile~~phgrreal.f90~~AfferentGraph_edge5" class="edge"><title>sourcefile~calc_etadot.f90->sourcefile~grphreal.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M221.549,-41.9645C209.652,-37.4831 195.975,-32.3312 183.354,-27.5773"/> +<polygon fill="#000000" stroke="#000000" points="184.548,-24.287 173.956,-24.0373 182.08,-30.8377 184.548,-24.287"/> +</g> +<!-- sourcefile~ftrafo.f90->sourcefile~phgrreal.f90 --> +<g id="sourcefile~~phgrreal.f90~~AfferentGraph_edge2" class="edge"><title>sourcefile~ftrafo.f90->sourcefile~phgrreal.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M113.487,-54C103.443,-54 91.7125,-54 80.4631,-54"/> +<polygon fill="#000000" stroke="#000000" points="80.3294,-50.5001 70.3293,-54 80.3293,-57.5001 80.3294,-50.5001"/> +</g> +<!-- sourcefile~grphreal.f90->sourcefile~phgrreal.f90 --> +<g id="sourcefile~~phgrreal.f90~~AfferentGraph_edge3" class="edge"><title>sourcefile~grphreal.f90->sourcefile~phgrreal.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M110.198,-24.0355C99.3186,-28.429 86.8436,-33.467 75.266,-38.1426"/> +<polygon fill="#000000" stroke="#000000" points="73.7684,-34.9727 65.8066,-41.9627 76.3896,-41.4634 73.7684,-34.9727"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="190pt" height="32pt" + viewBox="0.00 0.00 190.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 186,-28 186,4 -4,4"/> +<!-- Source File --> +<g id="node1" class="node"><title>Source File</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Source File</text> +</g> +<!-- This Page's Entity --> +<g id="node2" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="182,-24 85,-24 85,-0 182,-0 182,-24"/> +<text text-anchor="middle" x="133.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a file to a file which it depends on. A file + is dependent upon another if the latter must be compiled before the former + can be. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#mods-1">Modules</a></h3></div> + <div id="mods-1" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../module/phtogr.html">PHTOGR</a> + + </div> + </div> +</div> + + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title">Source Code</h3></div> + <div class="list-group"> + <a class="list-group-item" href="../sourcefile/phgrreal.f90.html#src">phgrreal.f90</a> + </div> +</div> + + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + <section> + <h2><span class="anchor" id="src"></span>Source Code</h2> + <div class="hl"><pre><span></span><a name="ln-1"></a><span class="k">MODULE </span><span class="n">PHTOGR</span> +<a name="ln-2"></a> +<a name="ln-3"></a> <span class="kt">INTEGER</span><span class="p">,</span> <span class="k">PARAMETER</span> <span class="kd">::</span> <span class="n">MAXAUF</span><span class="o">=</span><span class="mi">36000</span> +<a name="ln-4"></a> +<a name="ln-5"></a><span class="k">CONTAINS</span> +<a name="ln-6"></a> +<a name="ln-7"></a><span class="k"> SUBROUTINE </span><span class="n">PHGR213</span><span class="p">(</span><span class="n">CXMN</span><span class="p">,</span><span class="n">FELD</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-8"></a> +<a name="ln-9"></a><span class="c">!! DIE ROUTINE F]HRT EINE TRANSFORMATION EINER</span> +<a name="ln-10"></a><span class="c">!! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN</span> +<a name="ln-11"></a><span class="c">!! RAUM AUF DAS REDUZIERTE GAUSS'SCHE GITTER DURCH</span> +<a name="ln-12"></a><span class="c">!</span> +<a name="ln-13"></a><span class="c">! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE</span> +<a name="ln-14"></a><span class="c">! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF</span> +<a name="ln-15"></a><span class="c">! FELD = FELD DER METEOROLOGISCHEN VARIABLEN</span> +<a name="ln-16"></a><span class="c">! WSAVE = Working Array fuer Fouriertransformation</span> +<a name="ln-17"></a><span class="c">! Z = LEGENDREFUNKTIONSWERTE</span> +<a name="ln-18"></a><span class="c">!</span> +<a name="ln-19"></a><span class="c">! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN</span> +<a name="ln-20"></a><span class="c">! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN</span> +<a name="ln-21"></a><span class="c">! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN</span> +<a name="ln-22"></a><span class="c">! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN</span> +<a name="ln-23"></a> +<a name="ln-24"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-25"></a> +<a name="ln-26"></a><span class="c">! Anzahl der Gitterpunkte auf jedem Breitenkreis</span> +<a name="ln-27"></a> <span class="kt">INTEGER </span><span class="n">MLAT</span><span class="p">(</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-28"></a> <span class="kt">INTEGER </span><span class="n">K</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MNAUF</span> +<a name="ln-29"></a> <span class="kt">INTEGER </span><span class="n">IND</span><span class="p">(</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-30"></a> +<a name="ln-31"></a><span class="c">! FELD DER LEGENDREPOLYNOME FUER EINE BREITE</span> +<a name="ln-32"></a> <span class="kt">REAL </span><span class="n">Z</span><span class="p">(</span><span class="mi">0</span><span class="p">:((</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-33"></a> +<a name="ln-34"></a> <span class="kt">REAL </span><span class="n">CXMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-35"></a> <span class="kt">REAL </span><span class="n">FELD</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-36"></a> <span class="kt">REAL </span><span class="n">WSAVE</span><span class="p">(</span><span class="mi">8</span><span class="o">*</span><span class="n">MAXB</span><span class="o">+</span><span class="mi">15</span><span class="p">,</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-37"></a> <span class="kt">INTEGER</span> <span class="kd">::</span> <span class="n">IFAX</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-38"></a> +<a name="ln-39"></a> <span class="n">IND</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-40"></a> <span class="k">DO </span><span class="mi">7</span> <span class="n">K</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-41"></a> <span class="n">IND</span><span class="p">(</span><span class="n">K</span><span class="p">)</span><span class="o">=</span><span class="n">IND</span><span class="p">(</span><span class="n">K</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="n">MLAT</span><span class="p">(</span><span class="n">K</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-42"></a><span class="mi">7</span> <span class="k">CONTINUE</span> +<a name="ln-43"></a> +<a name="ln-44"></a><span class="c">!$OMP PARALLEL DO SCHEDULE(DYNAMIC)</span> +<a name="ln-45"></a> <span class="k">DO </span><span class="mi">17</span> <span class="n">K</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-46"></a> <span class="k">CALL </span><span class="n">PHSYM</span><span class="p">(</span><span class="n">K</span><span class="p">,</span><span class="n">IND</span><span class="p">,</span><span class="n">CXMN</span><span class="p">,</span><span class="n">FELD</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-47"></a><span class="mi">17</span> <span class="k">CONTINUE</span> +<a name="ln-48"></a><span class="c">!$OMP END PARALLEL DO</span> +<a name="ln-49"></a> +<a name="ln-50"></a> <span class="k">RETURN</span> +<a name="ln-51"></a> +<a name="ln-52"></a><span class="k"> END SUBROUTINE </span><span class="n">PHGR213</span> +<a name="ln-53"></a> +<a name="ln-54"></a> <span class="k">SUBROUTINE </span><span class="n">PHSYM</span><span class="p">(</span><span class="n">K</span><span class="p">,</span><span class="n">IND</span><span class="p">,</span><span class="n">CXMN</span><span class="p">,</span><span class="n">FELD</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">MLAT</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-55"></a> +<a name="ln-56"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-57"></a> +<a name="ln-58"></a><span class="k"> </span><span class="kt">INTEGER </span><span class="n">MLAT</span><span class="p">(</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-59"></a> <span class="kt">INTEGER </span><span class="n">K</span><span class="p">,</span><span class="n">L</span><span class="p">,</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">LLS</span><span class="p">,</span><span class="n">LLPS</span><span class="p">,</span><span class="n">LL</span><span class="p">,</span><span class="n">LLP</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MNAUF</span> +<a name="ln-60"></a> <span class="kt">INTEGER </span><span class="n">IND</span><span class="p">(</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-61"></a> <span class="kt">INTEGER</span> <span class="kd">::</span> <span class="n">IFAX</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-62"></a> +<a name="ln-63"></a> +<a name="ln-64"></a><span class="c">! FELD DER FOURIERKOEFFIZIENTEN</span> +<a name="ln-65"></a> <span class="kt">REAL</span> <span class="kd">::</span> <span class="n">CXMS</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span><span class="n">CXMA</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-66"></a> +<a name="ln-67"></a><span class="c">! FELD DER LEGENDREPOLYNOME FUER EINE BREITE</span> +<a name="ln-68"></a> <span class="kt">REAL </span><span class="n">Z</span><span class="p">(</span><span class="mi">0</span><span class="p">:((</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-69"></a> <span class="kt">REAL </span><span class="n">ACR</span><span class="p">,</span><span class="n">ACI</span><span class="p">,</span><span class="n">SCR</span><span class="p">,</span><span class="n">SCI</span> +<a name="ln-70"></a> +<a name="ln-71"></a> <span class="kt">REAL </span><span class="n">CXMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-72"></a> <span class="kt">REAL </span><span class="n">FELD</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-73"></a> <span class="kt">REAL </span><span class="n">WSAVE</span><span class="p">(</span><span class="mi">8</span><span class="o">*</span><span class="n">MAXB</span><span class="o">+</span><span class="mi">15</span><span class="p">,</span><span class="n">MAXB</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-74"></a> +<a name="ln-75"></a> <span class="k">DO </span><span class="mi">6</span> <span class="n">L</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span> +<a name="ln-76"></a> <span class="n">LL</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-77"></a> <span class="n">LLP</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-78"></a> <span class="k">DO </span><span class="mi">1</span> <span class="n">I</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">MNAUF</span> +<a name="ln-79"></a> <span class="n">SCR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-80"></a> <span class="n">SCI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-81"></a> <span class="n">ACR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-82"></a> <span class="n">ACI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-83"></a> <span class="n">LLS</span><span class="o">=</span><span class="n">LL</span> +<a name="ln-84"></a> <span class="n">LLPS</span><span class="o">=</span><span class="n">LLP</span> +<a name="ln-85"></a> <span class="k">IF</span> <span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span> <span class="p">.</span><span class="n">LT</span><span class="p">.</span> <span class="n">MLAT</span><span class="p">(</span><span class="n">K</span><span class="p">))</span> <span class="k">THEN</span> +<a name="ln-86"></a><span class="c">! Innerste Schleife aufgespalten um if-Abfrage zu sparen</span> +<a name="ln-87"></a> <span class="k">DO </span><span class="mi">18</span> <span class="n">J</span><span class="o">=</span><span class="n">I</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="mi">2</span> +<a name="ln-88"></a> <span class="n">SCR</span><span class="o">=</span><span class="n">SCR</span><span class="o">+</span><span class="n">Z</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">CXMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="p">,</span><span class="n">L</span><span class="p">)</span> +<a name="ln-89"></a> <span class="n">SCI</span><span class="o">=</span><span class="n">SCI</span><span class="o">+</span><span class="n">Z</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">CXMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">L</span><span class="p">)</span> +<a name="ln-90"></a> <span class="n">LL</span><span class="o">=</span><span class="n">LL</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-91"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-92"></a><span class="mi">18</span> <span class="k">CONTINUE</span> +<a name="ln-93"></a><span class="k"> </span><span class="n">LL</span><span class="o">=</span><span class="n">LLS</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-94"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLPS</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-95"></a> <span class="k">DO </span><span class="mi">19</span> <span class="n">J</span><span class="o">=</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="mi">2</span> +<a name="ln-96"></a> <span class="n">ACR</span><span class="o">=</span><span class="n">ACR</span><span class="o">+</span><span class="n">Z</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">CXMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="p">,</span><span class="n">L</span><span class="p">)</span> +<a name="ln-97"></a> <span class="n">ACI</span><span class="o">=</span><span class="n">ACI</span><span class="o">+</span><span class="n">Z</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">K</span><span class="p">)</span><span class="o">*</span><span class="n">CXMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">L</span><span class="p">)</span> +<a name="ln-98"></a> <span class="n">LL</span><span class="o">=</span><span class="n">LL</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-99"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-100"></a><span class="mi">19</span> <span class="k">CONTINUE</span> +<a name="ln-101"></a><span class="k"> END IF</span> +<a name="ln-102"></a><span class="k"> </span><span class="n">LL</span><span class="o">=</span><span class="n">LLS</span><span class="o">+</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">-</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-103"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLPS</span><span class="o">+</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">-</span><span class="n">I</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span> +<a name="ln-104"></a> <span class="n">CXMS</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="p">)</span><span class="o">=</span><span class="n">SCR</span><span class="o">+</span><span class="n">ACR</span> +<a name="ln-105"></a> <span class="n">CXMS</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">SCI</span><span class="o">+</span><span class="n">ACI</span> +<a name="ln-106"></a> <span class="n">CXMA</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="p">)</span><span class="o">=</span><span class="n">SCR</span><span class="o">-</span><span class="n">ACR</span> +<a name="ln-107"></a> <span class="n">CXMA</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">SCI</span><span class="o">-</span><span class="n">ACI</span> +<a name="ln-108"></a><span class="mi">1</span> <span class="k">CONTINUE</span> +<a name="ln-109"></a><span class="c">! CALL FOURTR(CXMS,FELD(IND(k)+1,L),WSAVE(:,K),MNAUF,*MLAT(K),1)</span> +<a name="ln-110"></a><span class="c">! CALL FOURTR(CXMA,FELD(MAXL-IND(k)-MLAT(K)+1,L),WSAVE(:,K),MNAUF,MLAT(K),1)</span> +<a name="ln-111"></a> <span class="k">CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">CXMS</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">(:,</span><span class="n">K</span><span class="p">),</span><span class="n">IFAX</span><span class="p">(:,</span><span class="n">K</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">K</span><span class="p">),</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-112"></a> <span class="n">FELD</span><span class="p">(</span><span class="n">IND</span><span class="p">(</span><span class="n">k</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">IND</span><span class="p">(</span><span class="n">K</span><span class="p">)</span><span class="o">+</span><span class="n">MLAT</span><span class="p">(</span><span class="n">K</span><span class="p">),</span><span class="n">L</span><span class="p">)</span><span class="o">=</span><span class="n">CXMS</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MLAT</span><span class="p">(</span><span class="n">K</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-113"></a> <span class="k">CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">CXMA</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">(:,</span><span class="n">K</span><span class="p">),</span><span class="n">IFAX</span><span class="p">(:,</span><span class="n">K</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MLAT</span><span class="p">(</span><span class="n">K</span><span class="p">),</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-114"></a> <span class="n">FELD</span><span class="p">(</span><span class="n">MAXL</span><span class="o">-</span><span class="n">IND</span><span class="p">(</span><span class="n">k</span><span class="p">)</span><span class="o">-</span><span class="n">MLAT</span><span class="p">(</span><span class="n">K</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">MAXL</span><span class="o">-</span><span class="n">IND</span><span class="p">(</span><span class="n">k</span><span class="p">),</span><span class="n">L</span><span class="p">)</span><span class="o">=</span><span class="n">CXMA</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MLAT</span><span class="p">(</span><span class="n">K</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-115"></a><span class="c">! WRITE(*,*) IND+1,FELD(IND+1,L)</span> +<a name="ln-116"></a><span class="mi">6</span> <span class="k">CONTINUE</span> +<a name="ln-117"></a> +<a name="ln-118"></a><span class="k"> END SUBROUTINE </span><span class="n">PHSYM</span> +<a name="ln-119"></a> +<a name="ln-120"></a> <span class="k">SUBROUTINE </span><span class="n">PHGCUT</span><span class="p">(</span><span class="n">CXMN</span><span class="p">,</span><span class="n">FELD</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span> <span class="p">&</span> +<a name="ln-121"></a> <span class="n">MNAUF</span><span class="p">,</span><span class="n">MMAX</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="n">MANF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-122"></a> +<a name="ln-123"></a><span class="c">!! DIE ROUTINE FUEHRT EINE TRANSFORMATION EINER</span> +<a name="ln-124"></a><span class="c">!! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN</span> +<a name="ln-125"></a><span class="c">!! RAUM AUF KUGELKOORDINATEN DURCH. Es kann ein Teilausschnitt</span> +<a name="ln-126"></a><span class="c">!! Der Erde angegeben werden. Diese Routine ist langsamer als phgrph</span> +<a name="ln-127"></a> +<a name="ln-128"></a><span class="c">! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE</span> +<a name="ln-129"></a><span class="c">! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF</span> +<a name="ln-130"></a><span class="c">! FELD = FELD DER METEOROLOGISCHEN VARIABLEN</span> +<a name="ln-131"></a><span class="c">! BREITE = SINUS DER GEOGRAFISCHEN BREITEN</span> +<a name="ln-132"></a><span class="c">!</span> +<a name="ln-133"></a><span class="c">! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN</span> +<a name="ln-134"></a><span class="c">! MAUF ANZAHL DER LAENGEN UND DER FOURIERKOEFFIZIENTEN</span> +<a name="ln-135"></a><span class="c">! MANF ANFANG DES LAENGENBEREICHS FUER DAS GITTER,</span> +<a name="ln-136"></a><span class="c">! AUF DAS INTERPOLIERT WERDEN SOLL</span> +<a name="ln-137"></a><span class="c">! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN</span> +<a name="ln-138"></a><span class="c">! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN</span> +<a name="ln-139"></a><span class="c">! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN</span> +<a name="ln-140"></a> +<a name="ln-141"></a> <span class="k">IMPLICIT </span><span class="kt">REAL</span> <span class="p">(</span><span class="n">A</span><span class="o">-</span><span class="n">H</span><span class="p">,</span><span class="n">O</span><span class="o">-</span><span class="n">Z</span><span class="p">)</span> +<a name="ln-142"></a> +<a name="ln-143"></a><span class="c">! FELD DER FOURIERKOEFFIZIENTEN</span> +<a name="ln-144"></a> +<a name="ln-145"></a><span class="c">! FELD DER LEGENDREPOLYNOME FUER EINE BREITE</span> +<a name="ln-146"></a> <span class="kt">REAL </span><span class="n">Z</span><span class="p">(</span><span class="mi">0</span><span class="p">:((</span><span class="n">MMAX</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MMAX</span><span class="o">+</span><span class="mi">4</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-147"></a> +<a name="ln-148"></a> <span class="k">DIMENSION </span><span class="n">CXMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MMAX</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MMAX</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-149"></a> <span class="kt">REAL </span><span class="n">FELD</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-150"></a> <span class="k">DIMENSION </span><span class="n">WSAVE</span><span class="p">(</span><span class="mi">4</span><span class="o">*</span><span class="n">MAUF</span><span class="o">+</span><span class="mi">15</span><span class="p">)</span> +<a name="ln-151"></a> <span class="kt">INTEGER</span><span class="kd">::</span> <span class="n">IFAX</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> +<a name="ln-152"></a> +<a name="ln-153"></a> <span class="kt">LOGICAL </span><span class="n">SYM</span> +<a name="ln-154"></a> +<a name="ln-155"></a><span class="c">! write(*,*)mauf,mnauf,manf,maxl</span> +<a name="ln-156"></a> +<a name="ln-157"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MAUF</span> <span class="p">.</span><span class="n">LE</span><span class="p">.</span> <span class="n">MNAUF</span><span class="p">)</span> <span class="k">WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="o">*</span><span class="p">)</span> <span class="s1">'TOO COARSE LONGITUDE RESOLUTION'</span> +<a name="ln-158"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MANF</span> <span class="p">.</span><span class="n">LT</span><span class="p">.</span> <span class="mi">1</span> <span class="p">.</span><span class="nb">OR</span><span class="p">.</span> <span class="n">MAXL</span> <span class="p">.</span><span class="n">LT</span><span class="p">.</span> <span class="mi">1</span> <span class="p">.</span><span class="nb">OR</span><span class="p">.</span> <span class="p">&</span> +<a name="ln-159"></a> <span class="n">MANF</span> <span class="p">.</span><span class="n">GT</span><span class="p">.</span> <span class="n">MAUF</span> <span class="p">.</span><span class="nb">OR</span><span class="p">.</span> <span class="n">MAXL</span> <span class="p">.</span><span class="n">GT</span><span class="p">.</span> <span class="n">MAUF</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-160"></a><span class="k"> WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="o">*</span><span class="p">)</span> <span class="s1">'WRONG LONGITUDE RANGE'</span><span class="p">,</span><span class="n">MANF</span><span class="p">,</span><span class="n">MAXL</span> +<a name="ln-161"></a> <span class="k">STOP</span> +<a name="ln-162"></a><span class="k"> END IF</span> +<a name="ln-163"></a> +<a name="ln-164"></a><span class="c">! Pruefe, ob Ausgabegitter symmetrisch zum Aequator ist</span> +<a name="ln-165"></a><span class="c">! Wenn ja soll Symmetrie der Legendrepolynome ausgenutzt werden</span> +<a name="ln-166"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MAXB</span> <span class="p">.</span><span class="n">GT</span><span class="p">.</span> <span class="mi">4</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-167"></a><span class="k"> </span><span class="n">SYM</span><span class="o">=</span><span class="p">.</span><span class="n">TRUE</span><span class="p">.</span> +<a name="ln-168"></a> <span class="k">DO </span><span class="mi">11</span> <span class="n">J</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span> +<a name="ln-169"></a> <span class="k">IF</span> <span class="p">(</span><span class="nb">ABS</span><span class="p">(</span><span class="nb">ABS</span><span class="p">(</span><span class="n">Z</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span><span class="n">J</span><span class="p">))</span><span class="o">-</span><span class="nb">ABS</span><span class="p">(</span><span class="n">Z</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span><span class="n">MAXB</span><span class="o">+</span><span class="mi">1</span><span class="o">-</span><span class="n">J</span><span class="p">)))</span> <span class="p">.</span><span class="n">GT</span><span class="p">.</span> <span class="mf">1E-11</span><span class="p">)</span> <span class="n">SYM</span><span class="o">=</span><span class="p">.</span><span class="n">FALSE</span><span class="p">.</span> +<a name="ln-170"></a><span class="c">! WRITE(*,*) ABS(Z(100,J)),ABS(Z(100,MAXB+1-J))</span> +<a name="ln-171"></a><span class="mi">11</span> <span class="k">CONTINUE</span> +<a name="ln-172"></a><span class="c">!! WRITE(*,*) 'Symmetrisch: ',SYM</span> +<a name="ln-173"></a> <span class="k">ELSE</span> +<a name="ln-174"></a><span class="k"> </span><span class="n">SYM</span><span class="o">=</span><span class="p">.</span><span class="n">FALSE</span><span class="p">.</span> +<a name="ln-175"></a> <span class="k">END IF</span> +<a name="ln-176"></a> +<a name="ln-177"></a> +<a name="ln-178"></a><span class="k"> IF</span> <span class="p">(</span><span class="n">SYM</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-179"></a> +<a name="ln-180"></a><span class="c">!$OMP PARALLEL DO</span> +<a name="ln-181"></a> <span class="k">DO </span><span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,(</span><span class="n">MAXB</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-182"></a> <span class="k">CALL </span><span class="n">PHSYMCUT</span><span class="p">(</span><span class="n">J</span><span class="p">,</span><span class="n">CXMN</span><span class="p">,</span><span class="n">FELD</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MANF</span><span class="p">)</span> +<a name="ln-183"></a> <span class="k">END DO</span> +<a name="ln-184"></a><span class="c">!$OMP END PARALLEL DO</span> +<a name="ln-185"></a> +<a name="ln-186"></a> <span class="k">ELSE</span> +<a name="ln-187"></a> +<a name="ln-188"></a><span class="c">!$OMP PARALLEL DO</span> +<a name="ln-189"></a> <span class="k">DO </span><span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXB</span> +<a name="ln-190"></a> <span class="k">CALL </span><span class="n">PHGPNS</span><span class="p">(</span><span class="n">CXMN</span><span class="p">,</span><span class="n">FELD</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="n">MANF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-191"></a> <span class="k">END DO</span> +<a name="ln-192"></a><span class="c">!$OMP END PARALLEL DO</span> +<a name="ln-193"></a> +<a name="ln-194"></a> <span class="k">END IF</span> +<a name="ln-195"></a> +<a name="ln-196"></a><span class="k"> RETURN</span> +<a name="ln-197"></a> +<a name="ln-198"></a><span class="k"> END SUBROUTINE </span><span class="n">PHGCUT</span> +<a name="ln-199"></a> +<a name="ln-200"></a> <span class="k">SUBROUTINE </span><span class="n">PHSYMCUT</span><span class="p">(</span><span class="n">J</span><span class="p">,</span><span class="n">CXMN</span><span class="p">,</span><span class="n">FELD</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MANF</span><span class="p">)</span> +<a name="ln-201"></a> +<a name="ln-202"></a> <span class="k">IMPLICIT </span><span class="kt">REAL</span> <span class="p">(</span><span class="n">A</span><span class="o">-</span><span class="n">H</span><span class="p">,</span><span class="n">O</span><span class="o">-</span><span class="n">Z</span><span class="p">)</span> +<a name="ln-203"></a> +<a name="ln-204"></a><span class="c">! FELD DER FOURIERKOEFFIZIENTEN</span> +<a name="ln-205"></a> +<a name="ln-206"></a> <span class="kt">REAL</span> <span class="kd">::</span> <span class="n">CXM</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span><span class="n">CXMA</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-207"></a> +<a name="ln-208"></a><span class="c">! FELD DER LEGENDREPOLYNOME FUER EINE BREITE</span> +<a name="ln-209"></a> <span class="kt">REAL </span><span class="n">Z</span><span class="p">(</span><span class="mi">0</span><span class="p">:((</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-210"></a> <span class="kt">REAL </span><span class="n">SCR</span><span class="p">,</span><span class="n">SCI</span><span class="p">,</span><span class="n">ACR</span><span class="p">,</span><span class="n">ACI</span> +<a name="ln-211"></a> +<a name="ln-212"></a> <span class="k">DIMENSION </span><span class="n">CXMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-213"></a> <span class="kt">REAL </span><span class="n">FELD</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-214"></a> <span class="k">DIMENSION </span><span class="n">WSAVE</span><span class="p">(</span><span class="mi">4</span><span class="o">*</span><span class="n">MAUF</span><span class="o">+</span><span class="mi">15</span><span class="p">)</span> +<a name="ln-215"></a> <span class="kt">INTEGER</span> <span class="kd">::</span> <span class="n">IFAX</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> +<a name="ln-216"></a> +<a name="ln-217"></a> <span class="k">DO </span><span class="mi">16</span> <span class="n">L</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span> +<a name="ln-218"></a> <span class="n">LL</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-219"></a> <span class="n">LLP</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-220"></a> <span class="k">DO </span><span class="mi">17</span> <span class="n">I</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">MNAUF</span> +<a name="ln-221"></a> <span class="n">SCR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-222"></a> <span class="n">SCI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-223"></a> <span class="n">ACR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-224"></a> <span class="n">ACI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-225"></a> <span class="n">LLS</span><span class="o">=</span><span class="n">LL</span> +<a name="ln-226"></a> <span class="n">LLPS</span><span class="o">=</span><span class="n">LLP</span> +<a name="ln-227"></a><span class="c">! Innerste Schleife aufgespalten um if-Abfrage zu sparen</span> +<a name="ln-228"></a> <span class="k">DO </span><span class="mi">18</span> <span class="n">K</span><span class="o">=</span><span class="n">I</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="mi">2</span> +<a name="ln-229"></a> <span class="n">SCR</span><span class="o">=</span><span class="n">SCR</span><span class="o">+</span><span class="n">Z</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span><span class="o">*</span><span class="n">CXMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="p">,</span><span class="n">L</span><span class="p">)</span> +<a name="ln-230"></a> <span class="n">SCI</span><span class="o">=</span><span class="n">SCI</span><span class="o">+</span><span class="n">Z</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span><span class="o">*</span><span class="n">CXMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">L</span><span class="p">)</span> +<a name="ln-231"></a> <span class="n">LL</span><span class="o">=</span><span class="n">LL</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-232"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-233"></a><span class="mi">18</span> <span class="k">CONTINUE</span> +<a name="ln-234"></a><span class="k"> </span><span class="n">LL</span><span class="o">=</span><span class="n">LLS</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-235"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLPS</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-236"></a> <span class="k">DO </span><span class="mi">19</span> <span class="n">K</span><span class="o">=</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="mi">2</span> +<a name="ln-237"></a> <span class="n">ACR</span><span class="o">=</span><span class="n">ACR</span><span class="o">+</span><span class="n">Z</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span><span class="o">*</span><span class="n">CXMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="p">,</span><span class="n">L</span><span class="p">)</span> +<a name="ln-238"></a> <span class="n">ACI</span><span class="o">=</span><span class="n">ACI</span> <span class="o">+</span><span class="n">Z</span><span class="p">(</span><span class="n">LLP</span><span class="p">,</span><span class="n">J</span><span class="p">)</span><span class="o">*</span><span class="n">CXMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">L</span><span class="p">)</span> +<a name="ln-239"></a> <span class="n">LL</span><span class="o">=</span><span class="n">LL</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-240"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-241"></a><span class="mi">19</span> <span class="k">CONTINUE</span> +<a name="ln-242"></a><span class="k"> </span><span class="n">LL</span><span class="o">=</span><span class="n">LLS</span><span class="o">+</span><span class="n">MNAUF</span><span class="o">-</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-243"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLPS</span><span class="o">+</span><span class="n">MNAUF</span><span class="o">-</span><span class="n">I</span><span class="o">+</span><span class="mi">3</span> +<a name="ln-244"></a> <span class="n">CXM</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="p">)</span><span class="o">=</span><span class="n">SCR</span><span class="o">+</span><span class="n">ACR</span> +<a name="ln-245"></a> <span class="n">CXM</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">SCI</span><span class="o">+</span><span class="n">ACI</span> +<a name="ln-246"></a> <span class="n">CXMA</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="p">)</span><span class="o">=</span><span class="n">SCR</span><span class="o">-</span><span class="n">ACR</span> +<a name="ln-247"></a> <span class="n">CXMA</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">SCI</span><span class="o">-</span><span class="n">ACI</span> +<a name="ln-248"></a><span class="mi">17</span> <span class="k">CONTINUE</span> +<a name="ln-249"></a> +<a name="ln-250"></a><span class="k"> CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">CXM</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-251"></a> <span class="k">DO </span><span class="mi">26</span> <span class="n">I</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">MAXL</span><span class="o">-</span><span class="mi">1</span> +<a name="ln-252"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MANF</span><span class="o">+</span><span class="n">I</span> <span class="p">.</span><span class="n">LE</span><span class="p">.</span> <span class="n">MAUF</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-253"></a><span class="k"> </span><span class="n">FELD</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">L</span><span class="p">)</span><span class="o">=</span><span class="n">CXM</span><span class="p">(</span><span class="n">MANF</span><span class="o">+</span><span class="n">I</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-254"></a> <span class="k">ELSE</span> +<a name="ln-255"></a><span class="k"> </span><span class="n">FELD</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">L</span><span class="p">)</span><span class="o">=</span><span class="n">CXM</span><span class="p">(</span><span class="n">MANF</span><span class="o">-</span><span class="n">MAUF</span><span class="o">+</span><span class="n">I</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-256"></a> <span class="k">END IF</span> +<a name="ln-257"></a><span class="mi">26</span> <span class="k">CONTINUE</span> +<a name="ln-258"></a><span class="k"> CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">CXMA</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-259"></a> <span class="k">DO </span><span class="mi">36</span> <span class="n">I</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">MAXL</span><span class="o">-</span><span class="mi">1</span> +<a name="ln-260"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MANF</span><span class="o">+</span><span class="n">I</span> <span class="p">.</span><span class="n">LE</span><span class="p">.</span> <span class="n">MAUF</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-261"></a><span class="k"> </span><span class="n">FELD</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXB</span><span class="o">+</span><span class="mi">1</span><span class="o">-</span><span class="n">J</span><span class="p">,</span><span class="n">L</span><span class="p">)</span><span class="o">=</span><span class="n">CXMA</span><span class="p">(</span><span class="n">MANF</span><span class="o">+</span><span class="n">I</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-262"></a> <span class="k">ELSE</span> +<a name="ln-263"></a><span class="k"> </span><span class="n">FELD</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXB</span><span class="o">+</span><span class="mi">1</span><span class="o">-</span><span class="n">J</span><span class="p">,</span><span class="n">L</span><span class="p">)</span><span class="o">=</span><span class="n">CXMA</span><span class="p">(</span><span class="n">MANF</span><span class="o">-</span><span class="n">MAUF</span><span class="o">+</span><span class="n">I</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-264"></a> <span class="k">END IF</span> +<a name="ln-265"></a><span class="mi">36</span> <span class="k">CONTINUE</span> +<a name="ln-266"></a><span class="mi">16</span> <span class="k">CONTINUE</span> +<a name="ln-267"></a> +<a name="ln-268"></a><span class="k"> END SUBROUTINE </span><span class="n">PHSYMCUT</span> +<a name="ln-269"></a> +<a name="ln-270"></a> <span class="k">SUBROUTINE </span><span class="n">PHGPNS</span><span class="p">(</span><span class="n">CXMN</span><span class="p">,</span><span class="n">FELD</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="n">MANF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-271"></a> +<a name="ln-272"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-273"></a><span class="k"> </span> +<a name="ln-274"></a><span class="k"> </span><span class="kt">INTEGER</span><span class="p">,</span><span class="k">INTENT</span><span class="p">(</span><span class="n">IN</span><span class="p">)</span> <span class="kd">::</span> <span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="n">MANF</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span> +<a name="ln-275"></a> +<a name="ln-276"></a> <span class="kt">REAL</span> <span class="kd">::</span> <span class="n">CXM</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-277"></a> <span class="kt">REAL</span><span class="p">,</span><span class="k">INTENT</span><span class="p">(</span><span class="n">IN</span><span class="p">)</span> <span class="kd">::</span> <span class="n">Z</span><span class="p">(</span><span class="mi">0</span><span class="p">:((</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-278"></a> <span class="kt">REAL</span><span class="p">,</span><span class="k">INTENT</span><span class="p">(</span><span class="n">IN</span><span class="p">)</span> <span class="kd">::</span> <span class="n">CXMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-279"></a> <span class="kt">REAL</span><span class="p">,</span><span class="k">INTENT</span><span class="p">(</span><span class="n">IN</span><span class="p">)</span> <span class="kd">::</span> <span class="n">WSAVE</span><span class="p">(</span><span class="mi">4</span><span class="o">*</span><span class="n">MAUF</span><span class="o">+</span><span class="mi">15</span><span class="p">)</span> +<a name="ln-280"></a> <span class="kt">REAL</span> <span class="kd">::</span> <span class="n">FELD</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-281"></a> +<a name="ln-282"></a> <span class="kt">INTEGER</span> <span class="kd">::</span> <span class="n">IFAX</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> +<a name="ln-283"></a> <span class="kt">INTEGER </span><span class="n">I</span><span class="p">,</span><span class="n">L</span> +<a name="ln-284"></a> +<a name="ln-285"></a> <span class="k">DO </span><span class="n">L</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span> +<a name="ln-286"></a> <span class="k">CALL </span><span class="n">LEGTR</span><span class="p">(</span><span class="n">CXMN</span><span class="p">(:,</span><span class="n">L</span><span class="p">),</span><span class="n">CXM</span><span class="p">,</span><span class="n">Z</span><span class="p">(:,</span><span class="n">J</span><span class="p">),</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">)</span> +<a name="ln-287"></a> <span class="k">CALL </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">CXM</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-288"></a> +<a name="ln-289"></a> <span class="k">DO </span><span class="n">I</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">MAXL</span><span class="o">-</span><span class="mi">1</span> +<a name="ln-290"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">MANF</span><span class="o">+</span><span class="n">I</span> <span class="p">.</span><span class="n">LE</span><span class="p">.</span> <span class="n">MAUF</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-291"></a><span class="k"> </span><span class="n">FELD</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">L</span><span class="p">)</span><span class="o">=</span><span class="n">CXM</span><span class="p">(</span><span class="n">MANF</span><span class="o">+</span><span class="n">I</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-292"></a> <span class="k">ELSE</span> +<a name="ln-293"></a><span class="k"> </span><span class="n">FELD</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">L</span><span class="p">)</span><span class="o">=</span><span class="n">CXM</span><span class="p">(</span><span class="n">MANF</span><span class="o">-</span><span class="n">MAUF</span><span class="o">+</span><span class="n">I</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-294"></a> <span class="k">END IF</span> +<a name="ln-295"></a><span class="k"> END DO</span> +<a name="ln-296"></a><span class="k"> END DO</span> +<a name="ln-297"></a><span class="k"> END SUBROUTINE </span><span class="n">PHGPNS</span> +<a name="ln-298"></a> +<a name="ln-299"></a> <span class="k">SUBROUTINE </span><span class="n">LEGTR</span><span class="p">(</span><span class="n">CXMN</span><span class="p">,</span><span class="n">CXM</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">)</span> +<a name="ln-300"></a> +<a name="ln-301"></a><span class="c">!! DIESE ROUTINE BERECHNET DIE FOURIERKOEFFIZIENTEN CXM</span> +<a name="ln-302"></a> +<a name="ln-303"></a> +<a name="ln-304"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-305"></a> +<a name="ln-306"></a><span class="k"> </span><span class="kt">INTEGER </span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAUF</span><span class="p">,</span><span class="n">LL</span><span class="p">,</span><span class="n">LLP</span><span class="p">,</span><span class="n">I</span><span class="p">,</span><span class="n">J</span> +<a name="ln-307"></a> <span class="kt">REAL </span><span class="n">CXM</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-308"></a> <span class="kt">REAL </span><span class="n">CXMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-309"></a> <span class="kt">REAL </span><span class="n">Z</span><span class="p">(</span><span class="mi">0</span><span class="p">:((</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-310"></a> <span class="kt">REAL </span><span class="n">CI</span><span class="p">,</span><span class="n">CR</span> +<a name="ln-311"></a> +<a name="ln-312"></a> <span class="n">LL</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-313"></a> <span class="n">LLP</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-314"></a> <span class="k">DO </span><span class="mi">1</span> <span class="n">I</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">MNAUF</span> +<a name="ln-315"></a> <span class="n">CR</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-316"></a> <span class="n">CI</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-317"></a> <span class="k">DO </span><span class="mi">2</span> <span class="n">J</span><span class="o">=</span><span class="n">I</span><span class="p">,</span><span class="n">MNAUF</span> +<a name="ln-318"></a> <span class="n">CR</span><span class="o">=</span><span class="n">CR</span><span class="o">+</span><span class="n">Z</span><span class="p">(</span><span class="n">LLP</span><span class="p">)</span><span class="o">*</span><span class="n">CXMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="p">)</span> +<a name="ln-319"></a> <span class="n">CI</span><span class="o">=</span><span class="n">CI</span><span class="o">+</span><span class="n">Z</span><span class="p">(</span><span class="n">LLP</span><span class="p">)</span><span class="o">*</span><span class="n">CXMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">LL</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-320"></a> <span class="n">LL</span><span class="o">=</span><span class="n">LL</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-321"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-322"></a><span class="mi">2</span> <span class="k">CONTINUE</span> +<a name="ln-323"></a><span class="k"> </span><span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-324"></a> <span class="n">CXM</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="p">)</span><span class="o">=</span><span class="n">CR</span> +<a name="ln-325"></a> <span class="n">CXM</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">CI</span> +<a name="ln-326"></a><span class="mi">1</span> <span class="k">CONTINUE</span> +<a name="ln-327"></a><span class="k"> RETURN</span> +<a name="ln-328"></a><span class="k"> </span> +<a name="ln-329"></a><span class="k"> END SUBROUTINE </span><span class="n">LEGTR</span> +<a name="ln-330"></a> +<a name="ln-331"></a> <span class="k">SUBROUTINE </span><span class="n">RFOURTR</span><span class="p">(</span><span class="n">CXM</span><span class="p">,</span><span class="n">TRIGS</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="nb">ISIGN</span><span class="p">)</span> +<a name="ln-332"></a> +<a name="ln-333"></a><span class="c">!! BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS</span> +<a name="ln-334"></a> +<a name="ln-335"></a> <span class="k">IMPLICIT </span><span class="kt">REAL</span> <span class="p">(</span><span class="n">A</span><span class="o">-</span><span class="n">H</span><span class="p">,</span><span class="n">O</span><span class="o">-</span><span class="n">Z</span><span class="p">)</span> +<a name="ln-336"></a> +<a name="ln-337"></a> <span class="k">DIMENSION </span><span class="n">CXM</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">MAXAUF</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-338"></a> <span class="kt">REAL</span> <span class="kd">::</span> <span class="n">WSAVE</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">MAXL</span><span class="p">),</span><span class="n">TRIGS</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">MAXL</span><span class="p">)</span> +<a name="ln-339"></a> <span class="kt">INTEGER </span><span class="n">IFAX</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> +<a name="ln-340"></a> +<a name="ln-341"></a> <span class="k">DO </span><span class="n">I</span><span class="o">=</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXL</span><span class="o">-</span><span class="mi">1</span> +<a name="ln-342"></a> <span class="n">CXM</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="p">)</span><span class="o">=</span><span class="mf">0.0</span> +<a name="ln-343"></a> <span class="n">CXM</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="mf">0.0</span> +<a name="ln-344"></a> <span class="k">END DO</span> +<a name="ln-345"></a> +<a name="ln-346"></a><span class="k"> CALL </span><span class="n">FFT99</span><span class="p">(</span><span class="n">CXM</span><span class="p">,</span><span class="n">WSAVE</span><span class="p">,</span><span class="n">TRIGS</span><span class="p">,</span><span class="n">IFAX</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-347"></a> +<a name="ln-348"></a> <span class="k">DO </span><span class="n">I</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">MAXL</span><span class="o">-</span><span class="mi">1</span> +<a name="ln-349"></a> <span class="n">CXM</span><span class="p">(</span><span class="n">I</span><span class="p">)</span><span class="o">=</span><span class="n">CXM</span><span class="p">(</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-350"></a> <span class="k">END DO</span> +<a name="ln-351"></a> +<a name="ln-352"></a><span class="k"> RETURN</span> +<a name="ln-353"></a> +<a name="ln-354"></a><span class="k"> END SUBROUTINE </span><span class="n">RFOURTR</span> +<a name="ln-355"></a> +<a name="ln-356"></a> <span class="k">SUBROUTINE </span><span class="n">GAULEG</span><span class="p">(</span><span class="n">X1</span><span class="p">,</span><span class="n">X2</span><span class="p">,</span><span class="n">X</span><span class="p">,</span><span class="n">W</span><span class="p">,</span><span class="n">N</span><span class="p">)</span> +<a name="ln-357"></a> +<a name="ln-358"></a><span class="c">!! BERECHNET DIE GAUSS+SCHEN BREITEN</span> +<a name="ln-359"></a> +<a name="ln-360"></a> <span class="k">IMPLICIT </span><span class="kt">REAL</span> <span class="p">(</span><span class="n">A</span><span class="o">-</span><span class="n">H</span><span class="p">,</span><span class="n">O</span><span class="o">-</span><span class="n">Z</span><span class="p">)</span> +<a name="ln-361"></a> +<a name="ln-362"></a> <span class="k">DIMENSION </span><span class="n">X</span><span class="p">(</span><span class="n">N</span><span class="p">),</span><span class="n">W</span><span class="p">(</span><span class="n">N</span><span class="p">)</span> +<a name="ln-363"></a> <span class="k">PARAMETER</span> <span class="p">(</span><span class="n">EPS</span><span class="o">=</span><span class="mf">3.D-14</span><span class="p">)</span> +<a name="ln-364"></a> +<a name="ln-365"></a> <span class="n">M</span><span class="o">=</span><span class="p">(</span><span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span> +<a name="ln-366"></a> <span class="n">XM</span><span class="o">=</span><span class="mf">0.5D0</span><span class="o">*</span><span class="p">(</span><span class="n">X2</span><span class="o">+</span><span class="n">X1</span><span class="p">)</span> +<a name="ln-367"></a> <span class="n">XL</span><span class="o">=</span><span class="mf">0.5D0</span><span class="o">*</span><span class="p">(</span><span class="n">X2</span><span class="o">-</span><span class="n">X1</span><span class="p">)</span> +<a name="ln-368"></a> <span class="k">DO </span><span class="mi">12</span> <span class="n">I</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">M</span> +<a name="ln-369"></a> <span class="n">Z</span><span class="o">=</span><span class="nb">DCOS</span><span class="p">(</span><span class="mf">3.141592654D0</span><span class="o">*</span><span class="p">(</span><span class="n">I</span><span class="o">-</span><span class="p">.</span><span class="mi">25</span><span class="n">D0</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">N</span><span class="o">+</span><span class="p">.</span><span class="mi">5</span><span class="n">D0</span><span class="p">))</span> +<a name="ln-370"></a><span class="mi">1</span> <span class="k">CONTINUE</span> +<a name="ln-371"></a><span class="k"> </span><span class="n">P1</span><span class="o">=</span><span class="mf">1.D0</span> +<a name="ln-372"></a> <span class="n">P2</span><span class="o">=</span><span class="mf">0.D0</span> +<a name="ln-373"></a> <span class="k">DO </span><span class="mi">11</span> <span class="n">J</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">N</span> +<a name="ln-374"></a> <span class="n">P3</span><span class="o">=</span><span class="n">P2</span> +<a name="ln-375"></a> <span class="n">P2</span><span class="o">=</span><span class="n">P1</span> +<a name="ln-376"></a> <span class="n">P1</span><span class="o">=</span><span class="p">((</span><span class="mf">2.D0</span><span class="o">*</span><span class="n">J</span><span class="o">-</span><span class="mf">1.D0</span><span class="p">)</span><span class="o">*</span><span class="n">Z</span><span class="o">*</span><span class="n">P2</span><span class="o">-</span><span class="p">(</span><span class="n">J</span><span class="o">-</span><span class="mf">1.D0</span><span class="p">)</span><span class="o">*</span><span class="n">P3</span><span class="p">)</span><span class="o">/</span><span class="n">J</span> +<a name="ln-377"></a><span class="mi">11</span> <span class="k">CONTINUE</span> +<a name="ln-378"></a><span class="k"> </span><span class="n">PP</span><span class="o">=</span><span class="n">N</span><span class="o">*</span><span class="p">(</span><span class="n">Z</span><span class="o">*</span><span class="n">P1</span><span class="o">-</span><span class="n">P2</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">Z</span><span class="o">*</span><span class="n">Z</span><span class="o">-</span><span class="mf">1.D0</span><span class="p">)</span> +<a name="ln-379"></a> <span class="n">Z1</span><span class="o">=</span><span class="n">Z</span> +<a name="ln-380"></a> <span class="n">Z</span><span class="o">=</span><span class="n">Z1</span><span class="o">-</span><span class="n">P1</span><span class="o">/</span><span class="n">PP</span> +<a name="ln-381"></a> <span class="k">IF</span> <span class="p">(</span><span class="nb">ABS</span><span class="p">(</span><span class="n">Z</span><span class="o">-</span><span class="n">Z1</span><span class="p">)</span> <span class="p">.</span><span class="n">GT</span><span class="p">.</span> <span class="n">EPS</span><span class="p">)</span><span class="n">GO</span> <span class="n">TO</span> <span class="mi">1</span> +<a name="ln-382"></a> <span class="n">X</span><span class="p">(</span><span class="n">I</span><span class="p">)</span><span class="o">=</span><span class="n">XM</span><span class="o">-</span><span class="n">XL</span><span class="o">*</span><span class="n">Z</span> +<a name="ln-383"></a> <span class="n">X</span><span class="p">(</span><span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="o">-</span><span class="n">I</span><span class="p">)</span><span class="o">=</span><span class="n">XM</span><span class="o">+</span><span class="n">XL</span><span class="o">*</span><span class="n">Z</span> +<a name="ln-384"></a> <span class="n">W</span><span class="p">(</span><span class="n">I</span><span class="p">)</span><span class="o">=</span><span class="mf">2.D0</span><span class="o">*</span><span class="n">XL</span><span class="o">/</span><span class="p">((</span><span class="mf">1.D0</span><span class="o">-</span><span class="n">Z</span><span class="o">*</span><span class="n">Z</span><span class="p">)</span><span class="o">*</span><span class="n">PP</span><span class="o">*</span><span class="n">PP</span><span class="p">)</span> +<a name="ln-385"></a> <span class="n">W</span><span class="p">(</span><span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="o">-</span><span class="n">I</span><span class="p">)</span><span class="o">=</span><span class="n">W</span><span class="p">(</span><span class="n">I</span><span class="p">)</span> +<a name="ln-386"></a><span class="mi">12</span> <span class="k">CONTINUE</span> +<a name="ln-387"></a> +<a name="ln-388"></a><span class="k"> RETURN</span> +<a name="ln-389"></a> +<a name="ln-390"></a><span class="k"> END SUBROUTINE </span><span class="n">GAULEG</span> +<a name="ln-391"></a> +<a name="ln-392"></a> +<a name="ln-393"></a> <span class="k">SUBROUTINE </span><span class="n">PLGNFA</span><span class="p">(</span><span class="n">LL</span><span class="p">,</span><span class="n">X</span><span class="p">,</span><span class="n">Z</span><span class="p">)</span> +<a name="ln-394"></a> +<a name="ln-395"></a><span class="c">!! PLGNDN BERECHNET ALLE NORMIERTEN ASSOZIIERTEN</span> +<a name="ln-396"></a><span class="c">!! LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X)</span> +<a name="ln-397"></a><span class="c">!! UND SCHREIBT SIE IN DAS FELD Z</span> +<a name="ln-398"></a><span class="c">! Die Polynome sind wie im ECMWF indiziert, d.h.</span> +<a name="ln-399"></a><span class="c">! P00,P10,P11,P20,P21,P22,...</span> +<a name="ln-400"></a><span class="c">! Ansonsten ist die Routine analog zu PLGNDN</span> +<a name="ln-401"></a><span class="c">! X IST DER COSINUS DES ZENITWINKELS ODER</span> +<a name="ln-402"></a><span class="c">! DER SINUS DER GEOGRAFISCHEN BREITE</span> +<a name="ln-403"></a> +<a name="ln-404"></a> <span class="k">IMPLICIT </span><span class="kt">REAL</span> <span class="p">(</span><span class="n">A</span><span class="o">-</span><span class="n">H</span><span class="p">,</span><span class="n">O</span><span class="o">-</span><span class="n">Z</span><span class="p">)</span> +<a name="ln-405"></a> +<a name="ln-406"></a> <span class="k">DIMENSION </span><span class="n">Z</span><span class="p">(</span><span class="mi">0</span><span class="p">:((</span><span class="n">LL</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">LL</span><span class="o">+</span><span class="mi">4</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-407"></a> +<a name="ln-408"></a> <span class="n">L</span><span class="o">=</span><span class="n">LL</span><span class="o">+</span><span class="mi">2</span> +<a name="ln-409"></a> <span class="n">I</span><span class="o">=</span><span class="mi">1</span> +<a name="ln-410"></a> <span class="n">Z</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">=</span><span class="mf">1.D0</span> +<a name="ln-411"></a> <span class="n">FACT</span><span class="o">=</span><span class="mf">1.D0</span> +<a name="ln-412"></a> <span class="n">POT</span><span class="o">=</span><span class="mf">1.D0</span> +<a name="ln-413"></a> <span class="n">SOMX2</span><span class="o">=</span><span class="nb">DSQRT</span><span class="p">(</span><span class="mf">1.D0</span><span class="o">-</span><span class="n">X</span><span class="o">*</span><span class="n">X</span><span class="p">)</span> +<a name="ln-414"></a> <span class="k">DO </span><span class="mi">14</span> <span class="n">J</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">L</span> +<a name="ln-415"></a> <span class="n">DJ</span><span class="o">=</span><span class="nb">DBLE</span><span class="p">(</span><span class="n">J</span><span class="p">)</span> +<a name="ln-416"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">J</span> <span class="p">.</span><span class="n">GT</span><span class="p">.</span> <span class="mi">0</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-417"></a><span class="k"> </span><span class="n">FACT</span><span class="o">=</span><span class="n">FACT</span><span class="o">*</span><span class="p">(</span><span class="mf">2.D0</span><span class="o">*</span><span class="n">DJ</span><span class="o">-</span><span class="mf">1.D0</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="mf">2.D0</span><span class="o">*</span><span class="n">DJ</span><span class="p">)</span> +<a name="ln-418"></a> <span class="n">POT</span><span class="o">=</span><span class="n">POT</span><span class="o">*</span><span class="n">SOMX2</span> +<a name="ln-419"></a> <span class="n">Z</span><span class="p">(</span><span class="n">I</span><span class="p">)</span><span class="o">=</span><span class="nb">DSQRT</span><span class="p">((</span><span class="mf">2.D0</span><span class="o">*</span><span class="n">DJ</span><span class="o">+</span><span class="mf">1.D0</span><span class="p">)</span><span class="o">*</span><span class="n">FACT</span><span class="p">)</span><span class="o">*</span><span class="n">POT</span> +<a name="ln-420"></a> <span class="n">I</span><span class="o">=</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-421"></a> <span class="k">END IF</span> +<a name="ln-422"></a><span class="k"> IF</span> <span class="p">(</span><span class="n">J</span> <span class="p">.</span><span class="n">LT</span><span class="p">.</span> <span class="n">L</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-423"></a><span class="k"> </span><span class="n">Z</span><span class="p">(</span><span class="n">I</span><span class="p">)</span><span class="o">=</span><span class="n">X</span><span class="o">*</span><span class="nb">DSQRT</span><span class="p">((</span><span class="mf">4.D0</span><span class="o">*</span><span class="n">DJ</span><span class="o">*</span><span class="n">DJ</span><span class="o">+</span><span class="mf">8.D0</span><span class="o">*</span><span class="n">DJ</span><span class="o">+</span><span class="mf">3.D0</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="mf">2.D0</span><span class="o">*</span><span class="n">DJ</span><span class="o">+</span><span class="mf">1.D0</span><span class="p">))</span><span class="o">*</span><span class="n">Z</span><span class="p">(</span><span class="n">I</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-424"></a> <span class="n">I</span><span class="o">=</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-425"></a> <span class="k">END IF</span> +<a name="ln-426"></a><span class="k"> </span><span class="n">DK</span><span class="o">=</span><span class="n">DJ</span><span class="o">+</span><span class="mf">2.D0</span> +<a name="ln-427"></a> <span class="k">DO </span><span class="mi">14</span> <span class="n">K</span><span class="o">=</span><span class="n">J</span><span class="o">+</span><span class="mi">2</span><span class="p">,</span><span class="n">L</span> +<a name="ln-428"></a> <span class="n">DDK</span><span class="o">=</span><span class="p">(</span><span class="n">DK</span><span class="o">*</span><span class="n">DK</span><span class="o">-</span><span class="n">DJ</span><span class="o">*</span><span class="n">DJ</span><span class="p">)</span> +<a name="ln-429"></a> <span class="n">Z</span><span class="p">(</span><span class="n">I</span><span class="p">)</span><span class="o">=</span><span class="n">X</span><span class="o">*</span><span class="nb">DSQRT</span><span class="p">((</span><span class="mf">4.D0</span><span class="o">*</span><span class="n">DK</span><span class="o">*</span><span class="n">DK</span><span class="o">-</span><span class="mf">1.D0</span><span class="p">)</span><span class="o">/</span><span class="n">DDK</span><span class="p">)</span><span class="o">*</span><span class="n">Z</span><span class="p">(</span><span class="n">I</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">-</span> <span class="p">&</span> +<a name="ln-430"></a> <span class="nb">DSQRT</span><span class="p">(((</span><span class="mf">2.D0</span><span class="o">*</span><span class="n">DK</span><span class="o">+</span><span class="mf">1.D0</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">DK</span><span class="o">-</span><span class="n">DJ</span><span class="o">-</span><span class="mf">1.D0</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">DK</span><span class="o">+</span><span class="n">DJ</span><span class="o">-</span><span class="mf">1.D0</span><span class="p">))</span><span class="o">/</span> <span class="p">&</span> +<a name="ln-431"></a> <span class="p">((</span><span class="mf">2.D0</span><span class="o">*</span><span class="n">DK</span><span class="o">-</span><span class="mf">3.D0</span><span class="p">)</span><span class="o">*</span><span class="n">DDK</span><span class="p">))</span><span class="o">*</span><span class="n">Z</span><span class="p">(</span><span class="n">I</span><span class="o">-</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-432"></a> <span class="n">DK</span><span class="o">=</span><span class="n">DK</span><span class="o">+</span><span class="mf">1.D0</span> +<a name="ln-433"></a> <span class="n">I</span><span class="o">=</span><span class="n">I</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-434"></a><span class="mi">14</span> <span class="k">CONTINUE</span> +<a name="ln-435"></a> +<a name="ln-436"></a><span class="k"> RETURN</span> +<a name="ln-437"></a> +<a name="ln-438"></a><span class="k"> END SUBROUTINE </span><span class="n">PLGNFA</span> +<a name="ln-439"></a> +<a name="ln-440"></a> <span class="k">SUBROUTINE </span><span class="n">DPLGND</span><span class="p">(</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">DZ</span><span class="p">)</span> +<a name="ln-441"></a> +<a name="ln-442"></a><span class="c">!! DPLGND BERECHNET DIE ABLEITUNG DER NORMIERTEN ASSOZIIERTEN</span> +<a name="ln-443"></a><span class="c">!! LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X)</span> +<a name="ln-444"></a><span class="c">!! UND SCHREIBT SIE IN DAS FELD DZ</span> +<a name="ln-445"></a><span class="c">! DIE REIHENFOLGE IST</span> +<a name="ln-446"></a><span class="c">! P00(X),P01(X),P11(X),P02(X),P12(X),P22(X),..PLL(X)</span> +<a name="ln-447"></a> +<a name="ln-448"></a> <span class="k">IMPLICIT </span><span class="kt">REAL</span> <span class="p">(</span><span class="n">A</span><span class="o">-</span><span class="n">H</span><span class="p">,</span><span class="n">O</span><span class="o">-</span><span class="n">Z</span><span class="p">)</span> +<a name="ln-449"></a> +<a name="ln-450"></a> <span class="k">DIMENSION </span><span class="n">Z</span><span class="p">(</span><span class="mi">0</span><span class="p">:((</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">4</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-451"></a> <span class="k">DIMENSION </span><span class="n">DZ</span><span class="p">(</span><span class="mi">0</span><span class="p">:((</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">3</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-452"></a> +<a name="ln-453"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">Z</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="p">.</span><span class="n">NE</span><span class="p">.</span> <span class="mf">1.D0</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-454"></a><span class="k"> WRITE</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="o">*</span><span class="p">)</span> <span class="s1">'DPLGND: Z(0) must be 1.0'</span> +<a name="ln-455"></a> <span class="k">STOP</span> +<a name="ln-456"></a><span class="k"> END IF</span> +<a name="ln-457"></a> +<a name="ln-458"></a><span class="k"> </span><span class="n">LLP</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-459"></a> <span class="n">LLH</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-460"></a> <span class="k">DO </span><span class="mi">1</span> <span class="n">I</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-461"></a> <span class="k">DO </span><span class="mi">2</span> <span class="n">J</span><span class="o">=</span><span class="n">I</span><span class="p">,</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-462"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">I</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="n">J</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-463"></a><span class="k"> </span><span class="n">WURZELA</span><span class="o">=</span><span class="nb">DSQRT</span><span class="p">(</span><span class="nb">DBLE</span><span class="p">((</span><span class="n">J</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">J</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">-</span><span class="n">I</span><span class="o">*</span><span class="n">I</span><span class="p">)</span><span class="o">/</span><span class="nb">DBLE</span><span class="p">(</span><span class="mi">4</span><span class="o">*</span><span class="p">(</span><span class="n">J</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">J</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span> +<a name="ln-464"></a> <span class="n">DZ</span><span class="p">(</span><span class="n">LLH</span><span class="p">)</span><span class="o">=</span><span class="nb">DBLE</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">*</span><span class="n">WURZELA</span><span class="o">*</span><span class="n">Z</span><span class="p">(</span><span class="n">LLP</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-465"></a> <span class="k">ELSE</span> +<a name="ln-466"></a><span class="k"> </span><span class="n">WURZELB</span><span class="o">=</span><span class="nb">DSQRT</span><span class="p">(</span><span class="nb">DBLE</span><span class="p">((</span><span class="n">J</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">J</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">-</span><span class="n">I</span><span class="o">*</span><span class="n">I</span><span class="p">)</span><span class="o">/</span><span class="nb">DBLE</span><span class="p">(</span><span class="mi">4</span><span class="o">*</span><span class="p">(</span><span class="n">J</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">J</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span> +<a name="ln-467"></a> <span class="n">DZ</span><span class="p">(</span><span class="n">LLH</span><span class="p">)</span><span class="o">=</span><span class="nb">DBLE</span><span class="p">(</span><span class="n">J</span><span class="p">)</span><span class="o">*</span><span class="n">WURZELB</span><span class="o">*</span><span class="n">Z</span><span class="p">(</span><span class="n">LLP</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">-</span><span class="nb">DBLE</span><span class="p">(</span><span class="n">J</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="n">WURZELA</span><span class="o">*</span><span class="n">Z</span><span class="p">(</span><span class="n">LLP</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-468"></a> <span class="n">WURZELA</span><span class="o">=</span><span class="n">WURZELB</span> +<a name="ln-469"></a> <span class="k">END IF</span> +<a name="ln-470"></a><span class="k"> </span><span class="n">LLH</span><span class="o">=</span><span class="n">LLH</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-471"></a> <span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-472"></a><span class="mi">2</span> <span class="k">CONTINUE</span> +<a name="ln-473"></a><span class="k"> </span><span class="n">LLP</span><span class="o">=</span><span class="n">LLP</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-474"></a><span class="mi">1</span> <span class="k">CONTINUE</span> +<a name="ln-475"></a> +<a name="ln-476"></a><span class="k"> RETURN</span> +<a name="ln-477"></a> +<a name="ln-478"></a><span class="k"> END SUBROUTINE </span><span class="n">DPLGND</span> +<a name="ln-479"></a> +<a name="ln-480"></a> +<a name="ln-481"></a> <span class="k">SUBROUTINE </span><span class="n">SPFILTER</span><span class="p">(</span><span class="n">FELDMN</span><span class="p">,</span><span class="n">MM</span><span class="p">,</span><span class="n">MMAX</span><span class="p">)</span> +<a name="ln-482"></a> +<a name="ln-483"></a><span class="c">!! Spectral Filter of Sardeshmukh and Hoskins (1984, MWR)</span> +<a name="ln-484"></a><span class="c">! MM=Spectral truncation of field</span> +<a name="ln-485"></a><span class="c">! MMAX= Spectral truncation of filter</span> +<a name="ln-486"></a> +<a name="ln-487"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-488"></a> +<a name="ln-489"></a><span class="k"> </span><span class="kt">INTEGER </span><span class="n">MM</span><span class="p">,</span><span class="n">MMAX</span><span class="p">,</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">,</span><span class="n">L</span> +<a name="ln-490"></a> <span class="kt">REAL </span><span class="n">FELDMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MM</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MM</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-491"></a> <span class="kt">REAL </span><span class="n">KMAX</span><span class="p">,</span><span class="n">SMAX</span><span class="p">,</span><span class="n">FAK</span> +<a name="ln-492"></a> +<a name="ln-493"></a> <span class="n">SMAX</span><span class="o">=</span><span class="mf">0.1</span> +<a name="ln-494"></a> <span class="n">KMAX</span><span class="o">=-</span><span class="nb">ALOG</span><span class="p">(</span><span class="n">SMAX</span><span class="p">)</span> +<a name="ln-495"></a> <span class="n">KMAX</span><span class="o">=</span><span class="n">KMAX</span><span class="o">/</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">MMAX</span><span class="p">)</span><span class="o">*</span><span class="nb">float</span><span class="p">(</span><span class="n">MMAX</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span><span class="o">**</span><span class="mi">2</span> +<a name="ln-496"></a><span class="c">! WRITE(*,*)'alogsmax',alog(smax),'KMAX:',KMAX</span> +<a name="ln-497"></a> <span class="n">L</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-498"></a> <span class="k">DO </span><span class="n">I</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">MM</span> +<a name="ln-499"></a> <span class="k">DO </span><span class="n">J</span><span class="o">=</span><span class="n">I</span><span class="p">,</span><span class="n">MM</span> +<a name="ln-500"></a><span class="c">! WRITE(*,*) I,J,FELD(K),FELD(K)*EXP(-KMAX*(J*(J+1))**2)</span> +<a name="ln-501"></a> <span class="k">IF</span><span class="p">(</span><span class="n">J</span> <span class="p">.</span><span class="n">LE</span><span class="p">.</span> <span class="n">MMAX</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-502"></a><span class="c">! FAK=EXP(-KMAX*(J*(J+1))**2)</span> +<a name="ln-503"></a> <span class="n">FAK</span><span class="o">=</span><span class="mf">1.0</span> +<a name="ln-504"></a> <span class="n">FELDMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">L</span><span class="p">)</span><span class="o">=</span><span class="n">FELDMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">L</span><span class="p">)</span><span class="o">*</span><span class="n">FAK</span> +<a name="ln-505"></a> <span class="n">FELDMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">L</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">FELDMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">L</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="n">FAK</span> +<a name="ln-506"></a> <span class="k">ELSE</span> +<a name="ln-507"></a><span class="k"> </span><span class="n">FELDMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">L</span><span class="p">)</span><span class="o">=</span><span class="mf">0.</span> +<a name="ln-508"></a> <span class="n">FELDMN</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">L</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="mf">0.</span> +<a name="ln-509"></a> <span class="k">END IF</span> +<a name="ln-510"></a><span class="k"> </span><span class="n">L</span><span class="o">=</span><span class="n">L</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-511"></a> <span class="k">END DO</span> +<a name="ln-512"></a><span class="k"> END DO</span> +<a name="ln-513"></a><span class="k"> </span> +<a name="ln-514"></a><span class="k"> END SUBROUTINE </span><span class="n">SPFILTER</span> +<a name="ln-515"></a> +<a name="ln-516"></a><span class="k">END MODULE </span><span class="n">PHTOGR</span> +</pre></div> + + </section> + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/sourcefile/posnam.f90.html b/Documentation/html/Documentation/Api/Fortran/sourcefile/posnam.f90.html new file mode 100644 index 0000000000000000000000000000000000000000..b34a50af03abd7bf08b4026dc2818c7fa5f39c49 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/sourcefile/posnam.f90.html @@ -0,0 +1,346 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>posnam.f90 – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>posnam.f90 + <small>Source File</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title=" 1.2% of total for source files.">17 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/posnam.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + + <li class="active">posnam.f90</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#subs-0">Subroutines</a></h3></div> + <div class="list-group"> + <div id="subs-0" class="panel-collapse collapse"> + + <a class="list-group-item" href="../proc/posnam.html">POSNAM</a> + + </div> + </div> +</div> + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title">Source Code</h3></div> + <div class="list-group"> + <a class="list-group-item" href="../sourcefile/posnam.f90.html#src">posnam.f90</a> + </div> +</div> + + + +</div> + + </div> + <div class="col-md-9" id='text'> + + <br> + + + + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#subs-1">Subroutines</a></h3></div> + <div class="list-group"> + <div id="subs-1" class="panel-collapse collapse"> + + <a class="list-group-item" href="../proc/posnam.html">POSNAM</a> + + </div> + </div> +</div> + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title">Source Code</h3></div> + <div class="list-group"> + <a class="list-group-item" href="../sourcefile/posnam.f90.html#src">posnam.f90</a> + </div> +</div> + + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + <section> + <h2><span class="anchor" id="src"></span>Source Code</h2> + <div class="hl"><pre><span></span><a name="ln-1"></a> <span class="k">SUBROUTINE </span><span class="n">POSNAM</span><span class="p">(</span><span class="n">KULNAM</span><span class="p">,</span><span class="n">CDNAML</span><span class="p">)</span> +<a name="ln-2"></a> +<a name="ln-3"></a> <span class="c">!! position in namelist file.</span> +<a name="ln-4"></a> <span class="c">! author: Mats Hamrud, ECMWF</span> +<a name="ln-5"></a> +<a name="ln-6"></a> <span class="kt">INTEGER</span><span class="p">,</span> <span class="k">INTENT</span><span class="p">(</span><span class="n">IN</span><span class="p">)</span> <span class="kd">::</span> <span class="n">KULNAM</span> +<a name="ln-7"></a> <span class="kt">CHARACTER</span><span class="o">*</span><span class="p">(</span><span class="o">*</span><span class="p">),</span> <span class="k">INTENT</span><span class="p">(</span><span class="n">IN</span><span class="p">)</span> <span class="kd">::</span> <span class="n">CDNAML</span> +<a name="ln-8"></a> <span class="kt">CHARACTER</span><span class="o">*</span><span class="mi">120</span> <span class="n">CLINE</span> +<a name="ln-9"></a> <span class="kt">CHARACTER</span><span class="o">*</span><span class="mi">1</span> <span class="n">CLTEST</span> +<a name="ln-10"></a> +<a name="ln-11"></a> <span class="k">REWIND</span><span class="p">(</span><span class="n">KULNAM</span><span class="p">)</span> +<a name="ln-12"></a> <span class="n">ILEN</span> <span class="o">=</span> <span class="nb">LEN</span><span class="p">(</span><span class="n">CDNAML</span><span class="p">)</span> +<a name="ln-13"></a><span class="mi">102</span> <span class="k">CONTINUE</span> +<a name="ln-14"></a><span class="k"> </span><span class="n">CLINE</span> <span class="o">=</span> <span class="s1">' '</span> +<a name="ln-15"></a> <span class="k">READ</span><span class="p">(</span><span class="n">KULNAM</span><span class="p">,</span><span class="s1">'(A)'</span><span class="p">)</span> <span class="n">CLINE</span> +<a name="ln-16"></a> <span class="n">IND1</span> <span class="o">=</span> <span class="nb">INDEX</span><span class="p">(</span><span class="n">CLINE</span><span class="p">,</span><span class="s1">'&'</span><span class="o">//</span><span class="n">CDNAML</span><span class="p">)</span> +<a name="ln-17"></a> <span class="k">IF</span> <span class="p">(</span><span class="n">IND1</span> <span class="p">.</span><span class="n">EQ</span><span class="p">.</span> <span class="mi">0</span><span class="p">)</span> <span class="n">GO</span> <span class="n">TO</span> <span class="mi">102</span> +<a name="ln-18"></a> <span class="n">CLTEST</span> <span class="o">=</span> <span class="n">CLINE</span><span class="p">(</span><span class="n">IND1</span><span class="o">+</span><span class="n">ILEN</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">IND1</span><span class="o">+</span><span class="n">ILEN</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> +<a name="ln-19"></a> <span class="k">IF</span> <span class="p">(</span><span class="nb">LGE</span><span class="p">(</span><span class="n">CLTEST</span><span class="p">,</span><span class="s1">'0'</span><span class="p">)</span> <span class="p">.</span><span class="nb">AND</span><span class="p">.</span> <span class="nb">LLE</span><span class="p">(</span><span class="n">CLTEST</span><span class="p">,</span><span class="s1">'9'</span><span class="p">)</span> <span class="p">.</span><span class="nb">OR</span><span class="p">.</span> <span class="p">&</span> +<a name="ln-20"></a> <span class="nb">LGE</span><span class="p">(</span><span class="n">CLTEST</span><span class="p">,</span><span class="s1">'A'</span><span class="p">)</span> <span class="p">.</span><span class="nb">AND</span><span class="p">.</span> <span class="nb">LLE</span><span class="p">(</span><span class="n">CLTEST</span><span class="p">,</span><span class="s1">'Z'</span><span class="p">))</span> <span class="k">GOTO </span><span class="mi">102</span> +<a name="ln-21"></a> <span class="k">BACKSPACE</span><span class="p">(</span><span class="n">KULNAM</span><span class="p">)</span> +<a name="ln-22"></a> +<a name="ln-23"></a> <span class="k">RETURN</span> +<a name="ln-24"></a><span class="k"> </span> +<a name="ln-25"></a><span class="k"> END SUBROUTINE </span><span class="n">POSNAM</span> +</pre></div> + + </section> + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/sourcefile/rwgrib2.f90.html b/Documentation/html/Documentation/Api/Fortran/sourcefile/rwgrib2.f90.html new file mode 100644 index 0000000000000000000000000000000000000000..45fca03ecc1df6517722bda0d74ec0e8632aafd9 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/sourcefile/rwgrib2.f90.html @@ -0,0 +1,657 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <meta name="description" content="Calculation of vertical velocity for FLEXPART"> + + <meta name="author" content="Leopold Haimberger<sup>1</sup>" > + <link rel="icon" href="../favicon.png"> + + <title>rwgrib2.f90 – Flex_extract: Calculation of etadot</title> + + <link href="../css/bootstrap.min.css" rel="stylesheet"> + <link href="../css/pygments.css" rel="stylesheet"> + <link href="../css/font-awesome.min.css" rel="stylesheet"> + <link href="../css/local.css" rel="stylesheet"> + + <link href="../tipuesearch/tipuesearch.css" rel="stylesheet"> + + + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <script src="../js/jquery-2.1.3.min.js"></script> + <script src="../js/svg-pan-zoom.min.js"></script> + + </head> + + <body> + + <!-- Fixed navbar --> + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../index.html">Flex_extract: Calculation of etadot <small>7.1</small></a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <li class="dropdown hidden-xs visible-sm visible-md hidden-lg"> + <a href="#" class="dropdown-toggle" + data-toggle="dropdown" role="button" + aria-haspopup="true" + aria-expanded="false">Contents <span class="caret"></span></a> + <ul class="dropdown-menu"> + + + <li><a href="../lists/files.html">Source Files</a></li> + + + + <li><a href="../lists/modules.html">Modules</a></li> + + + + <li><a href="../lists/procedures.html">Procedures</a></li> + + + + <li><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + </li> + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li> + + + +<li class="visible-xs hidden-sm visible-lg"><a href="../program/calc_etadot.html">Program</a></li> + + </ul> + + <form action="../search.html" class="navbar-form navbar-right" role="search"> + <div class="form-group"> + <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required> + </div> +<!-- + <button type="submit" class="btn btn-default">Submit</button> +--> + </form> + + </div><!--/.nav-collapse --> + </div> + </nav> + + <div class="container"> + + + <div class="row"> + <h1>rwgrib2.f90 + <small>Source File</small> + + </h1> + +<div class="row"> + <div class="col-lg-12"> +<div class="well well-sm"> + <ul class="list-inline" style="margin-bottom:0px;display:inline"> + + + + + + + <li><i class="fa fa-list-ol"></i> + <a data-toggle="tooltip" + data-placement="bottom" data-html="true" + title="11.5% of total for source files.">162 statements</a> + </li> + + + + <li><i class="fa fa-code"></i><a href="../src/rwgrib2.f90"> Source File</a></li> + + + </ul> + <ol class="breadcrumb in-well text-right"> + + + + <li class="active">rwgrib2.f90</li> + </ol> +</div> +</div> +</div> +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + + </div> + <div class="row"> + <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg"> + +<div id="sidebar"> + +<h3>Contents</h3> + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#mods-0">Modules</a></h3></div> + <div id="mods-0" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../module/rwgrib2.html">RWGRIB2</a> + + </div> + </div> +</div> + + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title">Source Code</h3></div> + <div class="list-group"> + <a class="list-group-item" href="../sourcefile/rwgrib2.f90.html#src">rwgrib2.f90</a> + </div> +</div> + + + +</div> + + </div> + <div class="col-md-9" id='text'> + + <br> + + + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Files dependent on this one</h3> + </div> + <div class="panel-body"> + <div class="depgraph"><?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: sourcefile~~rwgrib2.f90~~AfferentGraph Pages: 1 --> +<svg id="sourcefilerwgrib2f90AfferentGraph" width="195pt" height="32pt" + viewBox="0.00 0.00 195.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="sourcefile~~rwgrib2.f90~~AfferentGraph" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>sourcefile~~rwgrib2.f90~~AfferentGraph</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 191,-28 191,4 -4,4"/> +<!-- sourcefile~rwgrib2.f90 --> +<g id="sourcefile~~rwgrib2.f90~~AfferentGraph_node1" class="node"><title>sourcefile~rwgrib2.f90</title> +<polygon fill="none" stroke="black" points="66,-24 0,-24 0,-0 66,-0 66,-24"/> +<text text-anchor="middle" x="33" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">rwgrib2.f90</text> +</g> +<!-- sourcefile~calc_etadot.f90 --> +<g id="sourcefile~~rwgrib2.f90~~AfferentGraph_node2" class="node"><title>sourcefile~calc_etadot.f90</title> +<g id="a_sourcefile~~rwgrib2.f90~~AfferentGraph_node2"><a xlink:href=".././sourcefile/calc_etadot.f90.html" xlink:title="calc_etadot.f90"> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="187,-24 102,-24 102,-0 187,-0 187,-24"/> +<text text-anchor="middle" x="144.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">calc_etadot.f90</text> +</a> +</g> +</g> +<!-- sourcefile~calc_etadot.f90->sourcefile~rwgrib2.f90 --> +<g id="sourcefile~~rwgrib2.f90~~AfferentGraph_edge1" class="edge"><title>sourcefile~calc_etadot.f90->sourcefile~rwgrib2.f90</title> +<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M101.79,-12C93.3686,-12 84.5098,-12 76.0755,-12"/> +<polygon fill="#000000" stroke="#000000" points="76.0562,-8.5001 66.0561,-12 76.0561,-15.5001 76.0562,-8.5001"/> +</g> +</g> +</svg> +</div><div><a type="button" class="graph-help" data-toggle="modal" href="#graph-help-text">Help</a></div><div class="modal fade" id="graph-help-text" tabindex="-1" role="dialog"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="-graph-help-label">Graph Key</h4></div><div class="modal-body"> + <p>Nodes of different colours represent the following: </p> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.38.0 (20140413.2041) + --> +<!-- Title: Graph Key Pages: 1 --> +<svg width="190pt" height="32pt" + viewBox="0.00 0.00 190.00 32.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 28)"> +<title>Graph Key</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-28 186,-28 186,4 -4,4"/> +<!-- Source File --> +<g id="node1" class="node"><title>Source File</title> +<polygon fill="#f0ad4e" stroke="#f0ad4e" points="67,-24 0,-24 0,-0 67,-0 67,-24"/> +<text text-anchor="middle" x="33.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50" fill="white">Source File</text> +</g> +<!-- This Page's Entity --> +<g id="node2" class="node"><title>This Page's Entity</title> +<polygon fill="none" stroke="black" points="182,-24 85,-24 85,-0 182,-0 182,-24"/> +<text text-anchor="middle" x="133.5" y="-9.6" font-family="Helvetica,sans-Serif" font-size="10.50">This Page's Entity</text> +</g> +</g> +</svg> + + + <p>Solid arrows point from a file to a file which it depends on. A file + is dependent upon another if the latter must be compiled before the former + can be. + </p> + </div></div></div></div> + </div> + </div> + + <br> + + <section class="visible-xs visible-sm hidden-md"> + +<h3>Contents</h3> + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#mods-1">Modules</a></h3></div> + <div id="mods-1" class="panel-collapse collapse"> + <div class="list-group"> + + <a class="list-group-item" href="../module/rwgrib2.html">RWGRIB2</a> + + </div> + </div> +</div> + + + + + + + + + + + + + + + + +<div class="panel panel-primary"> + <div class="panel-heading text-left"><h3 class="panel-title">Source Code</h3></div> + <div class="list-group"> + <a class="list-group-item" href="../sourcefile/rwgrib2.f90.html#src">rwgrib2.f90</a> + </div> +</div> + + + + </section> + <br class="visible-xs visible-sm hidden-md"> + + <section> + <h2><span class="anchor" id="src"></span>Source Code</h2> + <div class="hl"><pre><span></span><a name="ln-1"></a> <span class="k">MODULE </span><span class="n">RWGRIB2</span> +<a name="ln-2"></a> +<a name="ln-3"></a> <span class="k">CONTAINS</span> +<a name="ln-4"></a> +<a name="ln-5"></a><span class="k"> SUBROUTINE </span><span class="n">READLATLON</span><span class="p">(</span><span class="n">FILENAME</span><span class="p">,</span><span class="n">FELD</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MPAR</span><span class="p">)</span> +<a name="ln-6"></a> +<a name="ln-7"></a><span class="c">!! Read a field from GRIB file on lat-lon grid</span> +<a name="ln-8"></a> +<a name="ln-9"></a> <span class="k">USE </span><span class="n">GRIB_API</span> +<a name="ln-10"></a> +<a name="ln-11"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-12"></a> +<a name="ln-13"></a><span class="k"> </span><span class="kt">integer</span> <span class="kd">::</span> <span class="n">ifile</span> +<a name="ln-14"></a> <span class="kt">integer</span> <span class="kd">::</span> <span class="n">iret</span> +<a name="ln-15"></a> <span class="kt">integer</span> <span class="kd">::</span> <span class="n">n</span><span class="p">,</span><span class="n">mk</span><span class="p">,</span><span class="n">parid</span><span class="p">,</span><span class="n">nm</span> +<a name="ln-16"></a> <span class="kt">integer</span> <span class="kd">::</span> <span class="n">i</span><span class="p">,</span><span class="n">k</span> +<a name="ln-17"></a> <span class="kt">integer</span><span class="p">,</span><span class="k">dimension</span><span class="p">(:),</span><span class="k">allocatable</span> <span class="kd">::</span> <span class="n">igrib</span> +<a name="ln-18"></a> <span class="kt">integer</span> <span class="kd">::</span> <span class="n">numberOfPointsAlongAParallel</span> +<a name="ln-19"></a> <span class="kt">integer</span> <span class="kd">::</span> <span class="n">numberOfPointsAlongAMeridian</span> +<a name="ln-20"></a> <span class="kt">real</span><span class="p">,</span> <span class="k">dimension</span><span class="p">(:),</span> <span class="k">allocatable</span> <span class="kd">::</span> <span class="n">values</span> +<a name="ln-21"></a> <span class="kt">integer</span> <span class="kd">::</span> <span class="n">numberOfValues</span> +<a name="ln-22"></a> <span class="kt">real</span><span class="p">,</span><span class="k">dimension</span><span class="p">(</span><span class="n">maxl</span><span class="p">,</span><span class="n">maxb</span><span class="p">,</span><span class="n">mlevel</span><span class="p">)</span> <span class="kd">::</span> <span class="n">feld</span> +<a name="ln-23"></a> <span class="kt">integer</span><span class="kd">::</span> <span class="n">maxl</span><span class="p">,</span><span class="n">maxb</span><span class="p">,</span><span class="n">mlevel</span><span class="p">,</span><span class="n">mstride</span><span class="p">,</span><span class="n">mpar</span><span class="p">(:),</span><span class="n">irest</span><span class="p">,</span><span class="n">div</span><span class="p">,</span><span class="n">level</span> +<a name="ln-24"></a> <span class="kt">integer</span> <span class="kd">::</span> <span class="n">l</span><span class="p">(</span><span class="n">size</span><span class="p">(</span><span class="n">mpar</span><span class="p">))</span> +<a name="ln-25"></a> <span class="kt">character</span><span class="o">*</span><span class="p">(</span><span class="o">*</span><span class="p">)</span><span class="kd">::</span> <span class="n">filename</span> +<a name="ln-26"></a> +<a name="ln-27"></a> <span class="n">feld</span><span class="o">=</span><span class="mf">0.</span> +<a name="ln-28"></a> +<a name="ln-29"></a> <span class="k">call </span><span class="n">grib_open_file</span><span class="p">(</span><span class="n">ifile</span><span class="p">,</span> <span class="nb">TRIM</span><span class="p">(</span><span class="n">FILENAME</span><span class="p">),</span><span class="s1">'r'</span><span class="p">)</span> +<a name="ln-30"></a> +<a name="ln-31"></a> <span class="c">! count the messages in the file</span> +<a name="ln-32"></a> <span class="k">call </span><span class="n">grib_count_in_file</span><span class="p">(</span><span class="n">ifile</span><span class="p">,</span><span class="n">n</span><span class="p">)</span> +<a name="ln-33"></a> <span class="k">allocate</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">n</span><span class="p">))</span> +<a name="ln-34"></a> <span class="n">igrib</span><span class="o">=-</span><span class="mi">1</span> +<a name="ln-35"></a> +<a name="ln-36"></a> <span class="c">! Load the messages from the file.</span> +<a name="ln-37"></a> <span class="k">DO </span><span class="n">i</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">n</span> +<a name="ln-38"></a> <span class="k">call </span><span class="n">grib_new_from_file</span><span class="p">(</span><span class="n">ifile</span><span class="p">,</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span> <span class="n">iret</span><span class="p">)</span> +<a name="ln-39"></a> <span class="k">END DO</span> +<a name="ln-40"></a> +<a name="ln-41"></a> <span class="c">! we can close the file</span> +<a name="ln-42"></a> <span class="k">call </span><span class="n">grib_close_file</span><span class="p">(</span><span class="n">ifile</span><span class="p">)</span> +<a name="ln-43"></a> +<a name="ln-44"></a> <span class="n">nm</span><span class="o">=</span><span class="n">size</span><span class="p">(</span><span class="n">mpar</span><span class="p">)</span> +<a name="ln-45"></a> <span class="n">div</span><span class="o">=</span><span class="n">mlevel</span><span class="o">/</span><span class="n">nm</span> +<a name="ln-46"></a> <span class="n">l</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-47"></a> +<a name="ln-48"></a> <span class="c">! Loop on all the messages in memory</span> +<a name="ln-49"></a> <span class="n">iloop</span><span class="p">:</span> <span class="k">DO </span><span class="n">i</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">n</span> +<a name="ln-50"></a><span class="c">! write(*,*) 'processing message number ',i</span> +<a name="ln-51"></a> <span class="c">! get as a integer</span> +<a name="ln-52"></a> <span class="k">call </span><span class="n">grib_get</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span><span class="s1">'numberOfPointsAlongAParallel'</span><span class="p">,</span> <span class="p">&</span> +<a name="ln-53"></a> <span class="n">numberOfPointsAlongAParallel</span><span class="p">)</span> +<a name="ln-54"></a> +<a name="ln-55"></a> <span class="c">! get as a integer</span> +<a name="ln-56"></a> <span class="k">call </span><span class="n">grib_get</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span><span class="s1">'numberOfPointsAlongAMeridian'</span><span class="p">,</span> <span class="p">&</span> +<a name="ln-57"></a> <span class="n">numberOfPointsAlongAMeridian</span><span class="p">)</span> +<a name="ln-58"></a> +<a name="ln-59"></a> <span class="k">call </span><span class="n">grib_get</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span><span class="s1">'numberOfVerticalCoordinateValues'</span><span class="p">,</span><span class="n">mk</span><span class="p">)</span> +<a name="ln-60"></a> +<a name="ln-61"></a> <span class="k">call </span><span class="n">grib_get_size</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span><span class="s1">'values'</span><span class="p">,</span><span class="n">numberOfValues</span><span class="p">)</span> +<a name="ln-62"></a><span class="c">! write(*,*) 'numberOfValues=',numberOfValues</span> +<a name="ln-63"></a> +<a name="ln-64"></a> <span class="k">allocate</span><span class="p">(</span><span class="n">values</span><span class="p">(</span><span class="n">numberOfValues</span><span class="p">),</span> <span class="nb">stat</span><span class="o">=</span><span class="n">iret</span><span class="p">)</span> +<a name="ln-65"></a> <span class="c">! get data values</span> +<a name="ln-66"></a> <span class="k">call </span><span class="n">grib_get</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span><span class="s1">'values'</span><span class="p">,</span><span class="n">values</span><span class="p">)</span> +<a name="ln-67"></a> +<a name="ln-68"></a> <span class="k">call </span><span class="n">grib_get</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span><span class="s1">'paramId'</span><span class="p">,</span><span class="n">parid</span><span class="p">)</span> +<a name="ln-69"></a> <span class="k">call </span><span class="n">grib_get</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span><span class="s1">'level'</span><span class="p">,</span><span class="n">level</span><span class="p">)</span> +<a name="ln-70"></a> +<a name="ln-71"></a> <span class="n">kloop</span><span class="p">:</span> <span class="k">do </span><span class="n">k</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">nm</span> +<a name="ln-72"></a> <span class="k">if</span> <span class="p">(</span><span class="n">parid</span> <span class="p">.</span><span class="n">eq</span><span class="p">.</span> <span class="n">mpar</span><span class="p">(</span><span class="n">k</span><span class="p">))</span> <span class="k">then</span> +<a name="ln-73"></a><span class="c">! l(k)=l(k)+1</span> +<a name="ln-74"></a> <span class="n">feld</span><span class="p">(:,:,(</span><span class="n">k</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="n">div</span><span class="o">+</span><span class="n">level</span><span class="p">)</span><span class="o">=</span><span class="nb">reshape</span><span class="p">(</span><span class="n">values</span><span class="p">,(</span><span class="o">/</span><span class="n">maxl</span><span class="p">,</span><span class="n">maxb</span><span class="o">/</span><span class="p">))</span> +<a name="ln-75"></a><span class="c">! print*,(k-1)*div+l(k),parid</span> +<a name="ln-76"></a> <span class="k">exit </span><span class="n">kloop</span> +<a name="ln-77"></a> <span class="k">end if</span> +<a name="ln-78"></a><span class="k"> end do </span><span class="n">kloop</span> +<a name="ln-79"></a> <span class="k">if</span> <span class="p">(</span><span class="n">k</span> <span class="p">.</span><span class="n">gt</span><span class="p">.</span> <span class="n">nm</span> <span class="p">.</span><span class="nb">and</span><span class="p">.</span> <span class="n">parid</span> <span class="p">.</span><span class="n">ne</span><span class="p">.</span> <span class="n">mpar</span><span class="p">(</span><span class="n">nm</span><span class="p">))</span> <span class="k">then</span> +<a name="ln-80"></a><span class="k"> write</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="o">*</span><span class="p">)</span> <span class="n">k</span><span class="p">,</span><span class="n">nm</span><span class="p">,</span><span class="n">parid</span><span class="p">,</span><span class="n">mpar</span><span class="p">(</span><span class="n">nm</span><span class="p">)</span> +<a name="ln-81"></a> <span class="k">write</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="o">*</span><span class="p">)</span> <span class="s1">'ERROR readlatlon: parameter '</span><span class="p">,</span><span class="n">parid</span><span class="p">,</span><span class="s1">'is not'</span><span class="p">,</span><span class="n">mpar</span> +<a name="ln-82"></a> <span class="k">stop</span> +<a name="ln-83"></a><span class="k"> end if</span> +<a name="ln-84"></a> +<a name="ln-85"></a><span class="c">! print*,i</span> +<a name="ln-86"></a> <span class="k">END DO </span><span class="n">iloop</span> +<a name="ln-87"></a><span class="c">!! write(*,*) 'readlatlon: ',i-1,' records read'</span> +<a name="ln-88"></a> +<a name="ln-89"></a> <span class="k">DO </span><span class="n">i</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">n</span> +<a name="ln-90"></a> <span class="k">call </span><span class="n">grib_release</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">))</span> +<a name="ln-91"></a> <span class="k">END DO</span> +<a name="ln-92"></a><span class="k"> </span> +<a name="ln-93"></a><span class="k"> if</span> <span class="p">(</span><span class="nb">allocated</span><span class="p">(</span><span class="n">values</span><span class="p">))</span> <span class="k">deallocate</span><span class="p">(</span><span class="n">values</span><span class="p">)</span> +<a name="ln-94"></a> <span class="k">deallocate</span><span class="p">(</span><span class="n">igrib</span><span class="p">)</span> +<a name="ln-95"></a> +<a name="ln-96"></a> <span class="k">END SUBROUTINE </span><span class="n">READLATLON</span> +<a name="ln-97"></a> +<a name="ln-98"></a> <span class="k">SUBROUTINE </span><span class="n">WRITELATLON</span><span class="p">(</span><span class="n">iunit</span><span class="p">,</span><span class="n">igrib</span><span class="p">,</span><span class="n">ogrib</span><span class="p">,</span><span class="n">FELD</span><span class="p">,</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,&</span> +<a name="ln-99"></a> <span class="n">MLEVELIST</span><span class="p">,</span><span class="n">MSTRIDE</span><span class="p">,</span><span class="n">MPAR</span><span class="p">)</span> +<a name="ln-100"></a> +<a name="ln-101"></a><span class="c">!! write a field on lat-lon grid to GRIB file</span> +<a name="ln-102"></a> +<a name="ln-103"></a> <span class="k">USE </span><span class="n">GRIB_API</span> +<a name="ln-104"></a> +<a name="ln-105"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-106"></a> +<a name="ln-107"></a><span class="k"> </span><span class="kt">INTEGER </span><span class="n">IFIELD</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">I</span><span class="p">,</span><span class="n">J</span><span class="p">,</span><span class="n">K</span><span class="p">,</span><span class="n">L</span><span class="p">,</span><span class="n">MSTRIDE</span><span class="p">,</span><span class="n">IERR</span><span class="p">,</span><span class="n">JOUT</span> +<a name="ln-108"></a> <span class="kt">INTEGER </span><span class="n">MPAR</span><span class="p">(</span><span class="n">MSTRIDE</span><span class="p">),</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">LEVMIN</span><span class="p">,</span><span class="n">LEVMAX</span> +<a name="ln-109"></a> <span class="kt">INTEGER </span><span class="n">IUNIT</span><span class="p">,</span><span class="n">igrib</span><span class="p">,</span><span class="n">ogrib</span> +<a name="ln-110"></a> <span class="kt">REAL </span><span class="n">ZSEC4</span><span class="p">(</span><span class="n">MAXL</span><span class="o">*</span><span class="n">MAXB</span><span class="p">)</span> +<a name="ln-111"></a> <span class="kt">REAL </span><span class="n">FELD</span><span class="p">(</span><span class="n">MAXL</span><span class="p">,</span><span class="n">MAXB</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-112"></a> <span class="kt">CHARACTER</span><span class="o">*</span><span class="p">(</span><span class="o">*</span><span class="p">)</span> <span class="n">MLEVELIST</span> +<a name="ln-113"></a> <span class="kt">INTEGER </span><span class="n">ILEVEL</span><span class="p">(</span><span class="n">MLEVEL</span><span class="p">),</span><span class="n">MLINDEX</span><span class="p">(</span><span class="n">MLEVEL</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span><span class="n">LLEN</span> +<a name="ln-114"></a> +<a name="ln-115"></a> <span class="c">! parse MLEVELIST</span> +<a name="ln-116"></a> +<a name="ln-117"></a> <span class="n">LLEN</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="nb">trim</span><span class="p">(</span><span class="n">MLEVELIST</span><span class="p">))</span> +<a name="ln-118"></a> <span class="k">if</span> <span class="p">(</span><span class="nb">index</span><span class="p">(</span><span class="n">MLEVELIST</span><span class="p">,</span><span class="s1">'to'</span><span class="p">)</span> <span class="p">.</span><span class="n">ne</span><span class="p">.</span> <span class="mi">0</span> <span class="p">.</span><span class="nb">or</span><span class="p">.</span> <span class="nb">index</span><span class="p">(</span><span class="n">MLEVELIST</span><span class="p">,</span><span class="s1">'TO'</span><span class="p">)</span> <span class="p">.</span><span class="n">ne</span><span class="p">.</span> <span class="mi">0</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-119"></a><span class="k"> </span><span class="n">i</span><span class="o">=</span><span class="nb">index</span><span class="p">(</span><span class="n">MLEVELIST</span><span class="p">,</span><span class="s1">'/'</span><span class="p">)</span> +<a name="ln-120"></a> <span class="k">read</span><span class="p">(</span><span class="n">MLEVELIST</span><span class="p">(</span><span class="mi">1</span><span class="p">:</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span><span class="o">*</span><span class="p">)</span> <span class="n">LEVMIN</span> +<a name="ln-121"></a> <span class="n">i</span><span class="o">=</span><span class="nb">index</span><span class="p">(</span><span class="n">MLEVELIST</span><span class="p">,</span><span class="s1">'/'</span><span class="p">,.</span><span class="n">true</span><span class="p">.)</span> +<a name="ln-122"></a> <span class="k">read</span><span class="p">(</span><span class="n">MLEVELIST</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">LLEN</span><span class="p">),</span><span class="o">*</span><span class="p">)</span> <span class="n">LEVMAX</span> +<a name="ln-123"></a> <span class="n">l</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-124"></a> <span class="k">do </span><span class="n">i</span><span class="o">=</span><span class="n">LEVMIN</span><span class="p">,</span><span class="n">LEVMAX</span> +<a name="ln-125"></a> <span class="n">l</span><span class="o">=</span><span class="n">l</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-126"></a> <span class="n">ILEVEL</span><span class="p">(</span><span class="n">l</span><span class="p">)</span><span class="o">=</span><span class="n">i</span> +<a name="ln-127"></a> <span class="k">end do</span> +<a name="ln-128"></a><span class="k"> else</span> +<a name="ln-129"></a><span class="k"> </span><span class="n">l</span><span class="o">=</span><span class="mi">1</span> +<a name="ln-130"></a> <span class="n">MLINDEX</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-131"></a> <span class="k">do </span><span class="n">i</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">LLEN</span> +<a name="ln-132"></a> <span class="k">if</span> <span class="p">(</span><span class="n">MLEVELIST</span><span class="p">(</span><span class="n">i</span><span class="p">:</span><span class="n">i</span><span class="p">)</span> <span class="p">.</span><span class="n">eq</span><span class="p">.</span> <span class="s1">'/'</span><span class="p">)</span> <span class="k">THEN</span> +<a name="ln-133"></a><span class="k"> </span><span class="n">l</span><span class="o">=</span><span class="n">l</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-134"></a> <span class="n">MLINDEX</span><span class="p">(</span><span class="n">l</span><span class="p">)</span><span class="o">=</span><span class="n">i</span> +<a name="ln-135"></a> <span class="k">end if</span> +<a name="ln-136"></a><span class="k"> end do</span> +<a name="ln-137"></a><span class="k"> </span><span class="n">MLINDEX</span><span class="p">(</span><span class="n">l</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="n">LLEN</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-138"></a> <span class="k">do </span><span class="n">i</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">l</span> +<a name="ln-139"></a> <span class="k">read</span><span class="p">(</span><span class="n">MLEVELIST</span><span class="p">(</span><span class="n">MLINDEX</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">MLINDEX</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span><span class="o">*</span><span class="p">)</span> <span class="n">ILEVEL</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> +<a name="ln-140"></a> <span class="k">end do</span> +<a name="ln-141"></a><span class="k"> end if </span> +<a name="ln-142"></a> +<a name="ln-143"></a><span class="k"> DO </span><span class="n">k</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">l</span> +<a name="ln-144"></a> <span class="k">call </span><span class="n">grib_set</span><span class="p">(</span><span class="n">igrib</span><span class="p">,</span><span class="s2">"level"</span><span class="p">,</span><span class="n">ILEVEL</span><span class="p">(</span><span class="n">k</span><span class="p">))</span> +<a name="ln-145"></a> <span class="k">DO </span><span class="n">j</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">MSTRIDE</span> +<a name="ln-146"></a> <span class="k">call </span><span class="n">grib_set</span><span class="p">(</span><span class="n">igrib</span><span class="p">,</span><span class="s2">"paramId"</span><span class="p">,</span><span class="n">MPAR</span><span class="p">(</span><span class="n">j</span><span class="p">))</span> +<a name="ln-147"></a><span class="c">! if (MPAR(j) .eq. 87) then</span> +<a name="ln-148"></a><span class="c">! call grib_set(igrib,"shortName","etadot")</span> +<a name="ln-149"></a><span class="c">! call grib_set(igrib,"units","Pa,s**-1")</span> +<a name="ln-150"></a><span class="c">! end if</span> +<a name="ln-151"></a><span class="c">! if (MPAR(j) .eq. 77) then</span> +<a name="ln-152"></a><span class="c">! call grib_set(igrib,"shortName","etadot")</span> +<a name="ln-153"></a><span class="c">! call grib_set(igrib,"units","s**-1")</span> +<a name="ln-154"></a><span class="c">! end if</span> +<a name="ln-155"></a> <span class="k">if</span> <span class="p">(</span><span class="n">l</span> <span class="p">.</span><span class="n">ne</span><span class="p">.</span> <span class="n">mlevel</span><span class="p">)</span> <span class="k">then</span> +<a name="ln-156"></a><span class="k"> </span><span class="n">zsec4</span><span class="p">(</span><span class="mi">1</span><span class="p">:</span><span class="n">maxl</span><span class="o">*</span><span class="n">maxb</span><span class="p">)</span><span class="o">=</span><span class="nb">RESHAPE</span><span class="p">(</span><span class="n">FELD</span><span class="p">(:,:,</span><span class="n">ILEVEL</span><span class="p">(</span><span class="n">k</span><span class="p">)),(</span><span class="o">/</span><span class="n">maxl</span><span class="o">*</span><span class="n">maxb</span><span class="o">/</span><span class="p">))</span> +<a name="ln-157"></a> <span class="k">else</span> +<a name="ln-158"></a><span class="k"> </span><span class="n">zsec4</span><span class="p">(</span><span class="mi">1</span><span class="p">:</span><span class="n">maxl</span><span class="o">*</span><span class="n">maxb</span><span class="p">)</span><span class="o">=</span><span class="nb">RESHAPE</span><span class="p">(</span><span class="n">FELD</span><span class="p">(:,:,</span><span class="n">k</span><span class="p">),(</span><span class="o">/</span><span class="n">maxl</span><span class="o">*</span><span class="n">maxb</span><span class="o">/</span><span class="p">))</span> +<a name="ln-159"></a> <span class="k">end if</span> +<a name="ln-160"></a><span class="k"> call </span><span class="n">grib_set</span><span class="p">(</span><span class="n">igrib</span><span class="p">,</span><span class="s2">"values"</span><span class="p">,</span><span class="n">zsec4</span><span class="p">)</span> +<a name="ln-161"></a> +<a name="ln-162"></a> <span class="k">call </span><span class="n">grib_write</span><span class="p">(</span><span class="n">igrib</span><span class="p">,</span><span class="n">iunit</span><span class="p">)</span> +<a name="ln-163"></a> +<a name="ln-164"></a> <span class="k">END DO</span> +<a name="ln-165"></a><span class="k"> END DO</span> +<a name="ln-166"></a> +<a name="ln-167"></a><span class="k"> END SUBROUTINE </span><span class="n">WRITELATLON</span> +<a name="ln-168"></a> +<a name="ln-169"></a> <span class="k">SUBROUTINE </span><span class="n">READSPECTRAL</span><span class="p">(</span><span class="n">FILENAME</span><span class="p">,</span><span class="n">CXMN</span><span class="p">,</span><span class="n">MNAUF</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">,</span><span class="n">MAXLEV</span><span class="p">,</span><span class="n">MPAR</span><span class="p">,</span><span class="n">A</span><span class="p">,</span><span class="n">B</span><span class="p">)</span> +<a name="ln-170"></a> +<a name="ln-171"></a><span class="c">!! read a GRIB file in spherical harmonics</span> +<a name="ln-172"></a> +<a name="ln-173"></a> <span class="k">USE </span><span class="n">GRIB_API</span> +<a name="ln-174"></a> +<a name="ln-175"></a> <span class="k">IMPLICIT NONE</span> +<a name="ln-176"></a> +<a name="ln-177"></a><span class="k"> </span><span class="kt">integer</span> <span class="kd">::</span> <span class="n">ifile</span> +<a name="ln-178"></a> <span class="kt">integer</span> <span class="kd">::</span> <span class="n">iret</span> +<a name="ln-179"></a> <span class="kt">integer</span> <span class="kd">::</span> <span class="n">n</span><span class="p">,</span><span class="n">mk</span><span class="p">,</span><span class="n">div</span><span class="p">,</span><span class="n">nm</span><span class="p">,</span><span class="n">k</span> +<a name="ln-180"></a> <span class="kt">integer</span> <span class="kd">::</span> <span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">,</span><span class="n">parid</span> +<a name="ln-181"></a> <span class="kt">integer</span><span class="p">,</span><span class="k">dimension</span><span class="p">(:),</span><span class="k">allocatable</span> <span class="kd">::</span> <span class="n">igrib</span> +<a name="ln-182"></a> <span class="kt">real</span><span class="p">,</span> <span class="k">dimension</span><span class="p">(:),</span> <span class="k">allocatable</span> <span class="kd">::</span> <span class="n">values</span> +<a name="ln-183"></a> <span class="kt">integer</span> <span class="kd">::</span> <span class="n">numberOfValues</span><span class="p">,</span><span class="n">maxlev</span> +<a name="ln-184"></a> <span class="kt">REAL</span> <span class="kd">::</span> <span class="n">A</span><span class="p">(</span><span class="n">MAXLEV</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span><span class="n">B</span><span class="p">(</span><span class="n">MAXLEV</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span><span class="n">pv</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">MAXLEV</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-185"></a> <span class="kt">REAL</span><span class="kd">::</span> <span class="n">CXMN</span><span class="p">(</span><span class="mi">0</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">MLEVEL</span><span class="p">)</span> +<a name="ln-186"></a> <span class="kt">integer</span><span class="kd">::</span> <span class="n">maxl</span><span class="p">,</span><span class="n">maxb</span><span class="p">,</span><span class="n">mlevel</span><span class="p">,</span><span class="n">mstride</span><span class="p">,</span><span class="n">mpar</span><span class="p">(:),</span><span class="n">mnauf</span><span class="p">,</span><span class="n">ioffset</span><span class="p">,</span><span class="n">ipar</span><span class="p">,</span><span class="n">ilev</span><span class="p">,</span><span class="n">l</span><span class="p">(</span><span class="n">size</span><span class="p">(</span><span class="n">mpar</span><span class="p">))</span> +<a name="ln-187"></a> <span class="kt">character</span><span class="o">*</span><span class="p">(</span><span class="o">*</span><span class="p">)</span><span class="kd">::</span> <span class="n">filename</span> +<a name="ln-188"></a> +<a name="ln-189"></a> <span class="k">call </span><span class="n">grib_open_file</span><span class="p">(</span><span class="n">ifile</span><span class="p">,</span> <span class="nb">TRIM</span><span class="p">(</span><span class="n">FILENAME</span><span class="p">),</span><span class="s1">'r'</span><span class="p">)</span> +<a name="ln-190"></a> +<a name="ln-191"></a> <span class="c">! count the messages in the file</span> +<a name="ln-192"></a> <span class="k">call </span><span class="n">grib_count_in_file</span><span class="p">(</span><span class="n">ifile</span><span class="p">,</span><span class="n">n</span><span class="p">)</span> +<a name="ln-193"></a> <span class="k">allocate</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">n</span><span class="p">))</span> +<a name="ln-194"></a> <span class="n">igrib</span><span class="o">=-</span><span class="mi">1</span> +<a name="ln-195"></a> +<a name="ln-196"></a> <span class="c">! Load the messages from the file.</span> +<a name="ln-197"></a> <span class="k">DO </span><span class="n">i</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">n</span> +<a name="ln-198"></a> <span class="k">call </span><span class="n">grib_new_from_file</span><span class="p">(</span><span class="n">ifile</span><span class="p">,</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span> <span class="n">iret</span><span class="p">)</span> +<a name="ln-199"></a> <span class="k">END DO</span> +<a name="ln-200"></a> +<a name="ln-201"></a> <span class="c">! we can close the file</span> +<a name="ln-202"></a> <span class="k">call </span><span class="n">grib_close_file</span><span class="p">(</span><span class="n">ifile</span><span class="p">)</span> +<a name="ln-203"></a> +<a name="ln-204"></a> <span class="n">l</span><span class="o">=</span><span class="mi">0</span> +<a name="ln-205"></a> <span class="c">! Loop on all the messages in memory</span> +<a name="ln-206"></a> <span class="n">iloop</span><span class="p">:</span> <span class="k">DO </span><span class="n">i</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">n</span> +<a name="ln-207"></a> <span class="c">! write(*,*) 'processing message number ',i</span> +<a name="ln-208"></a> <span class="c">! get as a integer</span> +<a name="ln-209"></a> <span class="k">call </span><span class="n">grib_get</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span><span class="s1">'pentagonalResolutionParameterJ'</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span> +<a name="ln-210"></a> +<a name="ln-211"></a> <span class="k">call </span><span class="n">grib_get_size</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span><span class="s1">'values'</span><span class="p">,</span><span class="n">numberOfValues</span><span class="p">)</span> +<a name="ln-212"></a> <span class="c">! write(*,*) 'numberOfValues=',numberOfValues</span> +<a name="ln-213"></a> +<a name="ln-214"></a> <span class="k">call </span><span class="n">grib_get</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span><span class="s1">'numberOfVerticalCoordinateValues'</span><span class="p">,</span><span class="n">mk</span><span class="p">)</span> +<a name="ln-215"></a> +<a name="ln-216"></a> <span class="k">call </span><span class="n">grib_get</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span><span class="s1">'level'</span><span class="p">,</span><span class="n">ilev</span><span class="p">)</span> +<a name="ln-217"></a> +<a name="ln-218"></a> +<a name="ln-219"></a> +<a name="ln-220"></a> <span class="k">call </span><span class="n">grib_get</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span><span class="s1">'pv'</span><span class="p">,</span><span class="n">pv</span><span class="p">)</span> +<a name="ln-221"></a> +<a name="ln-222"></a> <span class="k">allocate</span><span class="p">(</span><span class="n">values</span><span class="p">(</span><span class="n">numberOfValues</span><span class="p">),</span> <span class="nb">stat</span><span class="o">=</span><span class="n">iret</span><span class="p">)</span> +<a name="ln-223"></a> <span class="c">! get data values</span> +<a name="ln-224"></a> <span class="k">call </span><span class="n">grib_get</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span><span class="s1">'values'</span><span class="p">,</span><span class="n">values</span><span class="p">)</span> +<a name="ln-225"></a> +<a name="ln-226"></a><span class="c">! IOFFSET=mod(i-1,MSTRIDE)*(mk/2-1)</span> +<a name="ln-227"></a><span class="c">! CXMN(:,IOFFSET+ilev)=values(1:(MNAUF+1)*(MNAUF+2))</span> +<a name="ln-228"></a> +<a name="ln-229"></a> <span class="k">call </span><span class="n">grib_get</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">),</span><span class="s1">'paramId'</span><span class="p">,</span><span class="n">parid</span><span class="p">)</span> +<a name="ln-230"></a> <span class="n">nm</span><span class="o">=</span><span class="n">size</span><span class="p">(</span><span class="n">mpar</span><span class="p">)</span> +<a name="ln-231"></a> <span class="n">div</span><span class="o">=</span><span class="n">mlevel</span><span class="o">/</span><span class="n">nm</span> +<a name="ln-232"></a> <span class="n">kloop</span><span class="p">:</span> <span class="k">do </span><span class="n">k</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">nm</span> +<a name="ln-233"></a> <span class="k">if</span> <span class="p">(</span><span class="n">parid</span> <span class="p">.</span><span class="n">eq</span><span class="p">.</span> <span class="n">mpar</span><span class="p">(</span><span class="n">k</span><span class="p">))</span> <span class="k">then</span> +<a name="ln-234"></a><span class="k"> </span><span class="n">l</span><span class="p">(</span><span class="n">k</span><span class="p">)</span><span class="o">=</span><span class="n">l</span><span class="p">(</span><span class="n">k</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span> +<a name="ln-235"></a> <span class="n">cxmn</span><span class="p">(:,(</span><span class="n">k</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="n">div</span><span class="o">+</span><span class="n">l</span><span class="p">(</span><span class="n">k</span><span class="p">))</span><span class="o">=</span><span class="n">values</span><span class="p">(</span><span class="mi">1</span><span class="p">:(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">MNAUF</span><span class="o">+</span><span class="mi">2</span><span class="p">))</span> +<a name="ln-236"></a><span class="c">! print*,(k-1)*div+l(k),parid</span> +<a name="ln-237"></a> <span class="k">exit </span><span class="n">kloop</span> +<a name="ln-238"></a> <span class="k">end if</span> +<a name="ln-239"></a><span class="k"> </span> +<a name="ln-240"></a><span class="k"> end do </span><span class="n">kloop</span> +<a name="ln-241"></a> <span class="k">if</span> <span class="p">(</span><span class="n">k</span> <span class="p">.</span><span class="n">gt</span><span class="p">.</span> <span class="n">nm</span> <span class="p">.</span><span class="nb">and</span><span class="p">.</span> <span class="n">parid</span> <span class="p">.</span><span class="n">ne</span><span class="p">.</span> <span class="n">mpar</span><span class="p">(</span><span class="n">nm</span><span class="p">))</span> <span class="k">then</span> +<a name="ln-242"></a><span class="k"> write</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="o">*</span><span class="p">)</span> <span class="n">k</span><span class="p">,</span><span class="n">nm</span><span class="p">,</span><span class="n">parid</span><span class="p">,</span><span class="n">mpar</span><span class="p">(</span><span class="n">nm</span><span class="p">)</span> +<a name="ln-243"></a> <span class="k">write</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="o">*</span><span class="p">)</span> <span class="s1">'ERROR readspectral: parameter '</span><span class="p">,</span><span class="n">parid</span><span class="p">,</span><span class="s1">'is not'</span><span class="p">,</span><span class="n">mpar</span> +<a name="ln-244"></a> <span class="k">stop</span> +<a name="ln-245"></a><span class="k"> end if</span> +<a name="ln-246"></a> +<a name="ln-247"></a><span class="c">! print*,i</span> +<a name="ln-248"></a> +<a name="ln-249"></a> <span class="k">END DO </span><span class="n">iloop</span> +<a name="ln-250"></a> +<a name="ln-251"></a><span class="c">!! write(*,*) 'readspectral: ',i-1,' records read'</span> +<a name="ln-252"></a> +<a name="ln-253"></a> <span class="k">DO </span><span class="n">i</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">n</span> +<a name="ln-254"></a> <span class="k">call </span><span class="n">grib_release</span><span class="p">(</span><span class="n">igrib</span><span class="p">(</span><span class="n">i</span><span class="p">))</span> +<a name="ln-255"></a> <span class="k">END DO</span> +<a name="ln-256"></a><span class="k"> </span> +<a name="ln-257"></a><span class="k"> deallocate</span><span class="p">(</span><span class="n">values</span><span class="p">)</span> +<a name="ln-258"></a> <span class="k">deallocate</span><span class="p">(</span><span class="n">igrib</span><span class="p">)</span> +<a name="ln-259"></a> +<a name="ln-260"></a> <span class="n">A</span><span class="o">=</span><span class="n">pv</span><span class="p">(</span><span class="mi">1</span><span class="p">:</span><span class="mi">1</span><span class="o">+</span><span class="n">MAXLEV</span><span class="p">)</span> +<a name="ln-261"></a> <span class="n">B</span><span class="o">=</span><span class="n">pv</span><span class="p">(</span><span class="mi">2</span><span class="o">+</span><span class="n">MAXLEV</span><span class="p">:</span><span class="mi">2</span><span class="o">*</span><span class="n">MAXLEV</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span> +<a name="ln-262"></a> +<a name="ln-263"></a> <span class="k">END SUBROUTINE </span><span class="n">READSPECTRAL</span> +<a name="ln-264"></a> +<a name="ln-265"></a><span class="k">END MODULE </span><span class="n">RWGRIB2</span> +</pre></div> + + </section> + </div> + </div> + + + <hr> + </div> <!-- /container --> + <footer> + <div class="container"> + <div class="row"> + <div class="col-xs-6 col-md-4"><p>© 2019 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a> + <br /><small>dfa7dbd</small></p></div> + <div class="col-xs-6 col-md-4 col-md-push-4"> + <p class="text-right"> + Documentation generated by + <a href="https://github.com/cmacmackin/ford">FORD</a> + + </p> + </div> + <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> Flex_extract: Calculation of etadot was developed by Leopold Haimberger<sup>1</sup></p></div> + </div> + <br> + </div> <!-- /container --> + </footer> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> +<!-- + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +--> + <script src="../js/bootstrap.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="../js/ie10-viewport-bug-workaround.js"></script> + + <!-- MathJax JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }, + jax: ['input/TeX','input/MathML','output/HTML-CSS'], + extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js'] + }); + </script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script src="../tipuesearch/tipuesearch_content.js"></script> + <script src="../tipuesearch/tipuesearch_set.js"></script> + <script src="../tipuesearch/tipuesearch.js"></script> + + + </body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/src/calc_etadot.f90 b/Documentation/html/Documentation/Api/Fortran/src/calc_etadot.f90 new file mode 100644 index 0000000000000000000000000000000000000000..542997d20f47c0e4b7dec9968d30dacf70fd72f7 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/src/calc_etadot.f90 @@ -0,0 +1,814 @@ +PROGRAM calc_etadot + +!! Prepare input data for FLEXPART, esp. vertical velocity as +!! etadot or etadot * dp/deta + +!*---------------------------------------------------------------- +! author: L. Haimberger +! date: 03/2010 +! version: V4.0 +! +!## Program calc_etadot +! +! **Prepares input data for POP model meteorological preprocessor** +! +!----------------------------------------------------------------- +! +! Calculation of etapoint on a regular \(\lambda-\phi\) grid and writing +! `U,V,ETAPOINT,T,PS,Q,SD,MSL,TCC,10U, 10V, 2T,2D,LSP,CP,SSHF,SSR, +! EWSS,NSSS` +! to an output file (input and output in GRIB 1 or 2 format). +! etapoint is defined as the total time derivative of +! ECMWF vertical coordinate eta multiplied by the derivative +! of pressure with respect to eta: +! \[\frac{\mathrm{d}\eta}{\mathrm{d}t}\frac{\partial p}{\partial \eta}\] +! +!### Version history and authors: +! - 04/1994: Leopold Haimberger, Gerhard Wotawa +! +! - 2003-05-11: Alexander Beck +! +! - 12/2006: L. Haimberger V2.0, +! handle arbitrary regular grids and T799 resolution data +! +! - 03/2010: L. Haimberger V4.0, +! handle GRIB edition 2 fields and T1279 resolution data +! - 04-06/2019: Petra Seibert, +! beautify code and add FORD documentation +! +!----------------------------------------------------------------- +! # +!## Input required: +! +! UNIT FILE PARAMETER(S) DATA REPRESENTATION +! +! 11 fort.11 T,U,V regular lambda phi grid +! 12 fort.12 D regular lambda phi grid +! 13 fort.13 LNSP spherical harmonics +! 14 fort.14 SD,MSL,TCC,10U, +! 10V,2T,2D regular lambda phi grid +! 16 fort.16 LSP,CP,SSHF, +! SSR,EWSS,NSSS regular lambda phi grid +! 17 fort.17 Q regular lambda phi grid +! +!------------------------------------------------------------------ +! +!### Output produced: +! +! UNIT FILE PARAMETER(S) DATA REPRESENTATION +! +! 15 fort.15 `U,V,ETA,T,PS, +! `Q,SD,MSL,TCC,` +! `10U,10V,2T,2D,` regular lambda phi grid +! `LSP,CP,SSHF,` +! `SSR,EWSS,NSSS` +! +!------------------------------------------------------------------ + + USE PHTOGR + USE GRTOPH + USE FTRAFO + USE RWGRIB2 + USE GRIB_API + + IMPLICIT NONE + + REAL, ALLOCATABLE, DIMENSION (:,:) :: LNPS + REAL, ALLOCATABLE, DIMENSION (:,:) :: Z + REAL, ALLOCATABLE, DIMENSION (:,:,:) :: T, UV , UV2 + REAL, ALLOCATABLE, DIMENSION (:,:,:) :: QA,OM,OMR + REAL, ALLOCATABLE, DIMENSION (:,:,:) :: DIV, ETA,ETAR + REAL, ALLOCATABLE, DIMENSION (:,:) :: DPSDL, DPSDM + REAL, ALLOCATABLE, DIMENSION (:,:,:) :: PS,DPSDT + REAL, ALLOCATABLE, DIMENSION (:,:,:) :: SURF,FLUX,OROLSM + REAL, ALLOCATABLE, DIMENSION (:) :: WSAVE,H,SINL,COSL,WSAVE2 + REAL, ALLOCATABLE, DIMENSION (:) :: BREITE, GBREITE,AK, BK,pv + +! Arrays for Gaussian grid calculations + REAL :: X1,X2,RMS,MW,SIG,LAM + REAL,ALLOCATABLE :: CUA(:,:,:),CVA(:,:,:) + + REAL, ALLOCATABLE, DIMENSION (:,:) :: P,PP,P2 + REAL, ALLOCATABLE, DIMENSION (:,:) :: XMN,HILFUV + REAL, ALLOCATABLE, DIMENSION (:) :: LNPMN,LNPMN2,LNPMN3 + REAL, ALLOCATABLE, DIMENSION (:) :: WEIGHT + REAL, ALLOCATABLE, DIMENSION (:,:) :: UGVG + REAL, ALLOCATABLE, DIMENSION (:,:) :: DG, ETAG + REAL, ALLOCATABLE, DIMENSION (:,:) :: GWSAVE + REAL, ALLOCATABLE, DIMENSION (:) :: PSG,HILF + +! end arrays for Gaussian grid calculations + + INTEGER, ALLOCATABLE, DIMENSION (:) :: MLAT,MPSURF,MPFLUX,MPORO,MPAR + INTEGER, ALLOCATABLE :: GIFAX(:,:) + + REAL PI,COSB,DAK,DBK,P00 + REAL URLAR8,JMIN1,LLLAR8,MAXBMIN1,PIR8,DCOSB + + INTEGER I,J,K,L,IERR,M,LTEST,MK,NGI,NGJ + INTEGER MFLUX,MSURF,MORO + INTEGER LUNIT,LUNIT2 + + INTEGER MAXL, MAXB, MLEVEL, LEVOUT,LEVMIN,LEVMAX + INTEGER MOMEGA,MOMEGADIFF,MGAUSS,MSMOOTH, MNAUF,META,METADIFF + INTEGER MDPDETA,METAPAR + REAL RLO0, RLO1, RLA0, RLA1 + CHARACTER*300 MLEVELIST + + INTEGER MAUF, MANF,IFAX(10) + + INTEGER IGRIB(1),iret,ogrib + + CHARACTER*80 FILENAME + + NAMELIST /NAMGEN/ & + MAXL, MAXB, & + MLEVEL,MLEVELIST,MNAUF,METAPAR, & + RLO0, RLO1, RLA0, RLA1, & + MOMEGA,MOMEGADIFF,MGAUSS,MSMOOTH,META,METADIFF,& + MDPDETA + + LTEST=1 + + CALL POSNAM (4,'NAMGEN') + READ (4,NAMGEN) + + MAUF=INT(360.*(REAL(MAXL)-1.)/(RLO1-RLO0)+0.0001) +! PRINT*, MAUF + + MANF=INT(REAL(MAUF)/360.*(360.+RLO0)+1.0001) + IF (MANF .gt. MAUF) MANF=MANF-MAUF + + +!------------------------------------------------------------------ +!! ALLOCATE VARIABLES +!------------------------------------------------------------------ + + ALLOCATE (LNPS(0:(MNAUF+1)*(MNAUF+2)-1,1)) + ALLOCATE (H(0:(MNAUF+2)*(MNAUF+3)/2)) + ALLOCATE (OM(MAXL, MAXB, MLEVEL)) + ALLOCATE (ETA(MAXL,MAXB,MLEVEL)) + ALLOCATE (PS(MAXL, MAXB,1),DPSDT(MAXL, MAXB,1)) + ALLOCATE (WSAVE(4*MAUF+15),WSAVE2(4*MAUF+15)) + ALLOCATE (BREITE(MAXB),AK(MLEVEL+1),BK(MLEVEL+1),PV(2*MLEVEL+2)) + ALLOCATE (MPAR(2)) + ALLOCATE (COSL(MAXL),SINL(MAXL)) + ALLOCATE (CUA(2,4,MLEVEL),CVA(2,4,MLEVEL)) + +!------------------------------------------------------------------ +! GAUSS STUFF +!------------------------------------------------------------------ + + IF (MGAUSS .EQ. 1) THEN + LUNIT=0 + FILENAME='fort.18' + + CALL GRIB_OPEN_FILE(LUNIT, TRIM(FILENAME),'R') + + CALL GRIB_NEW_FROM_FILE(LUNIT,IGRIB(1), IRET) + +! we can close the file + CALL GRIB_CLOSE_FILE(LUNIT) +! call grib_get(igrib(1),'gridType', j) + + NGJ=MNAUF+1 + + ALLOCATE (GWSAVE(8*NGJ+15,NGJ/2)) + ALLOCATE(GIFAX(10,NGJ)) + ALLOCATE (GBREITE(NGJ),WEIGHT(NGJ)) + ALLOCATE (MLAT(NGJ)) + ALLOCATE (P(0:((MNAUF+3)*(MNAUF+4))/2,NGJ/2)) + ALLOCATE (PP(NGJ/2,0:((MNAUF+3)*(MNAUF+4))/2)) + ALLOCATE (Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB)) + + CALL GRIB_GET(IGRIB(1),'numberOfPointsAlongAMeridian', NGJ) + +! get as a integer + call grib_get(igrib(1),'pl', MLAT) + + NGI=SUM(MLAT) + + CALL GRIB_GET(IGRIB(1),'numberOfVerticalCoordinateValues',MK) + + IF (MK/2-1 .NE. MLEVEL) THEN + WRITE(*,*) 'FATAL: Number of model levels',mk, & + ' does not agree with', MLEVEL,' in namelist' + STOP + END IF + call grib_get(igrib(1),'pv',pv) + AK=PV(1:1+MLEVEL) + BK=PV(2+MLEVEL:2*MLEVEL+2) + + ALLOCATE (LNPMN(0:(MNAUF+1)*(MNAUF+2)-1)) + ALLOCATE (LNPMN2(0:(MNAUF+1)*(MNAUF+2)-1)) + ALLOCATE (UGVG(NGI, 2*MLEVEL),HILFUV(2*MAXL,2)) + ALLOCATE (DPSDL(NGI,1),DPSDM(NGI,1)) + ALLOCATE (PSG(NGI),HILF(NGI)) + ALLOCATE (UV(MAXL, MAXB, 2*MLEVEL)) +! ALLOCATE (UV2(MAXL, MAXB, 2*MLEVEL)) + ALLOCATE (XMN(0:(MNAUF+1)*(MNAUF+2)-1, 2*MLEVEL)) + ALLOCATE (DG(NGI,MLEVEL),ETAG(NGI,MLEVEL)) + +!! Initialisieren Legendretransformation auf das LaT/LON Gitter + + PI=ACOS(-1.D0) + +!$OMP PARALLEL DO + DO 20 J=1,MAXB + BREITE(J)=SIN((RLA1-(J-1.D0)*(RLA1-RLA0)/(MAXB-1))* PI/180.D0) + CALL PLGNFA(MNAUF,BREITE(J),Z(0,J)) +20 CONTINUE +!$OMP END PARALLEL DO + +! Avoid possible Pole problem +! IF (RLA0 .EQ. -90.0) BREITE(MAXB)=sin(-89.99*PI/180.d0) +! IF (RLA1 .EQ. 90.0) BREITE(1)=sin(89.99*PI/180.d0) + +!* Initialisation of fields for FFT and Legendre transformation +! to Gaussian grid and back to phase space + X1=-1.D0 + X2=1.D0 + CALL GAULEG(X1,X2,GBREITE,WEIGHT,NGJ) + +!$OMP PARALLEL DO PRIVATE(M) + DO J=1,NGJ/2 + CALL PLGNFA(MNAUF,GBREITE(J),P(:,J)) + DO M=0,(MNAUF+3)*(MNAUF+4)/2 + PP(J,M)=P(M,J) + END DO + END DO +!$OMP END PARALLEL DO + +! MPAR(1)=152 + FILENAME='fort.12' +!! read LNSP in SH + CALL READSPECTRAL(FILENAME,LNPMN,MNAUF,1,MLEVEL,(/152/),AK,BK) + CALL SET99(WSAVE,IFAX,mauf) + CALL PHGCUT(LNPMN,PS,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,1) + CALL STATIS(MAXL,MAXB,1,EXP(PS),RMS,MW,SIG) + WRITE(*,'(A,T20,3F12.4)') 'STATISTICS PS: ',RMS,MW,SIG + + DO J=1,NGJ/2 + CALL SET99(GWSAVE(1,J),GIFAX(1,J),MLAT(J)) + END DO + CALL PHGR213(LNPMN,HILF,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,1) + PSG=HILF + CALL GRPH213(LNPMN2,PSG,GWSAVE,GIFAX,PP,WEIGHT,MLAT,MNAUF,NGI,NGJ,1) + CALL PHGR213(LNPMN2,HILF,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,1) + + + HILF=exp(PSG)-exp(HILF) + + CALL STATIS(NGI,1,1,HILF,RMS,MW,SIG) + WRITE(*,'(A,T20,3F12.4)') 'STATISTICS ratio of PS: ',RMS,MW,SIG + + PSG=EXP(PSG) + HILF=PSG + CALL STATIS(NGI,1,1,HILF,RMS,MW,SIG) + WRITE(*,'(A,T20,3F12.4)') 'STATISTICS PSG: ',RMS,MW,SIG + +111 FILENAME='fort.10' +!! read u,v in SH + CALL READSPECTRAL(FILENAME,XMN,MNAUF,2*MLEVEL,MLEVEL,(/131,132/),AK,BK) + +!! Transformieren des Windes auf das Gaussgitter + CALL PHGR213(XMN,UGVG,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,2*MLEVEL) + DO K=1,MLEVEL +! North Pole + CALL JSPPOLE(XMN(:,K),1,MNAUF,.TRUE.,CUA(:,:,K)) + CALL JSPPOLE(XMN(:,MLEVEL+K),1,MNAUF,.TRUE.,CVA(:,:,K)) +! South Pole + CALL JSPPOLE(XMN(:,K),-1,MNAUF,.TRUE.,CUA(:,3:4,K)) + CALL JSPPOLE(XMN(:,MLEVEL+K),-1,MNAUF,.TRUE.,CVA(:,3:4,K)) + END DO + + DO K=1,2*MLEVEL + IF (MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH) + END DO + CALL PHGCUT(XMN,UV,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,2*MLEVEL) + + +112 FILENAME='fort.13' +!! read DIV in SH + CALL READSPECTRAL(FILENAME,XMN,MNAUF,MLEVEL,MLEVEL,(/155/),AK,BK) +!! Transformieren der horizontalen Divergenz auf das Gaussgitter + CALL PHGR213(XMN,DG,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,MLEVEL) + CALL STATIS(MAXL,MAXB,1,DG,RMS,MW,SIG) + WRITE(*,'(A,T20,3p,3F12.4)') 'STATISTICS DG-PS: ',RMS,MW,SIG + +!! Berechnung des Gradienten des Logarithmus des Bodendrucks auf dem Gaussgitter + CALL PHGRAD(LNPMN,DPSDL,DPSDM,GWSAVE,GIFAX,P,H,MLAT,MNAUF,NGI,NGJ,1) + +!! Berechnung der Vertikalgeschwindigkeit auf dem Gaussgitter + CALL CONTGL(HILF,DPSDL,DPSDM,DG,UGVG(:,1),UGVG(:,MLEVEL+1), & + GBREITE,ETAG,MLAT,AK,BK,NGI,NGJ,MLEVEL) +! note that HILF is ps on input and dpsdt*ps on output + + CALL STATIS(MAXL,MAXB,1,ETAG,RMS,MW,SIG) + WRITE(*,'(A,T20,3p,3F12.4)') 'STATISTICS ETAG-PS: ',RMS,MW,SIG + CALL GRPH213(XMN,ETAG,GWSAVE,GIFAX,PP,WEIGHT,MLAT,MNAUF,NGI,NGJ,MLEVEL) + CALL STATIS(MAXL,MAXB,1,ETAG,RMS,MW,SIG) + WRITE(*,'(A,T20,3p,3F12.4)') 'STATISTICS ETAG-PS: ',RMS,MW,SIG + DO K=1,MLEVEL + IF (MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH) + END DO + + CALL PHGCUT(XMN,ETA,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,MLEVEL) + CALL STATIS(MAXL,MAXB,1,ETA,RMS,MW,SIG) + WRITE(*,'(A,T20,3p,3F12.4)') 'STATISTICS ETA-PS: ',RMS,MW,SIG + + CALL GRPH213(XMN,HILF,GWSAVE,GIFAX,PP,WEIGHT,MLAT, MNAUF,NGI,NGJ,1) + CALL STATIS(MAXL,MAXB,1,HILF,RMS,MW,SIG) + WRITE(*,'(A,T20,3p,3F12.4)') 'STATISTICS HILF-PS: ',RMS,MW,SIG + + IF (MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,1),MNAUF,MSMOOTH) + CALL PHGCUT(XMN,DPSDT,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,1) + + CALL STATIS(MAXL,MAXB,1,DPSDT,RMS,MW,SIG) + WRITE(*,'(A,T20,3F12.4)') 'STATISTICS DPSDT: ',RMS,MW,SIG + + IF (MOMEGADIFF .ne. 0) THEN +!! Berechnung von Omega auf dem Gaussgitter + + CALL OMEGA(PSG,DPSDL,DPSDM,DG,UGVG(:,1),UGVG(:,MLEVEL+1), & + GBREITE,ETAG,MLAT,AK,BK,NGI ,NGJ,MLEVEL) + CALL GRPH213(XMN,ETAG,GWSAVE,GIFAX,PP,WEIGHT,MLAT,MNAUF,NGI,NGJ,MLEVEL) + DO K=1,MLEVEL + IF (MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH) + END DO + CALL PHGCUT(XMN,OM,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,MLEVEL) + + END IF ! MOMEGA + + CALL GRPH213(XMN,PSG,GWSAVE,GIFAX,PP,WEIGHT,MLAT,MNAUF,NGI,NGJ,1) + + CALL STATIS(MAXL,MAXB,1,PSG,RMS,MW,SIG) + WRITE(*,'(A,T20,3F12.4)') 'STATISTICS PSG-PS: ',RMS,MW,SIG + + CALL PHGCUT(XMN,PS,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,1) + + CALL STATIS(MAXL,MAXB,1,PS,RMS,MW,SIG) + WRITE(*,'(A,T20,3F12.4)') 'STATISTICS PS: ',RMS,MW,SIG + +114 DEALLOCATE(HILF,PSG,DPSDL,DPSDM,ETAG,DG,LNPMN) + +! ALLOCATE (UV(MAXL, MAXB, 2*MLEVEL)) +! CALL GRPH213(XMN,UGVG,GWSAVE,GIFAX,PP,WEIGHT,MLAT, +! *MNAUF,NGI,NGJ,2*MLEVEL) +! DO K=1,2*MLEVEL +! IF (MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH) +! END DO +! CALL PHGCUT(XMN,UV,WSAVE,IFAX,Z, +! *MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,2*MLEVEL) + DEALLOCATE(PP,P,UGVG,MLAT,GBREITE,WEIGHT,GWSAVE,XMN) +! CALL ETAGAUSS(Z,WSAVE +! *,BREITE,UV,ETA,OM,PS, +! *MAUF,MAXB,MAXL,MANF,MNAUF,MLEVEL,MSMOOTH) + + ELSE + +!----------------------------------------------------------------- +! READING OF PREPARED METEOROLOGICAL FIELDS +! +! THE FOLLOWING FIELDS ARE EXPECTED: +! +! UNIT 11: T,U,V (REGULAR GRID) +! UNIT 17: Q (REGULAR GRID) +! UNIT 13: D (REGULAR GRID) +! UNIT 12: LNSP (SPHERICAL HARMONICS) +! UNIT 14: SURFACE DATA (REGULAR GRID) +! UNIT 16: FLUX DATA (REGULAR GRID) +!------------------------------------------------------------------ + + ALLOCATE (MLAT(MAXB)) + MLAT=MAXL + ALLOCATE (Z(0:((MNAUF+3)*(MNAUF+4))/2,1)) + ALLOCATE (DPSDL(MAXL,MAXB),DPSDM(MAXL,MAXB)) + ALLOCATE (UV(MAXL, MAXB, 2*MLEVEL),DIV(MAXL,MAXB,MLEVEL)) + +!------------------------------------------------------------------ +!! READING OF SURFACE PRESSURE +!------------------------------------------------------------------ + + FILENAME='fort.12' + CALL READSPECTRAL(FILENAME,LNPS,MNAUF,1,MLEVEL,(/152/),AK,BK) + +!------------------------------------------------------------------ +!! READING OF U,V +!------------------------------------------------------------------ + +! OPENING OF UNBLOCKED GRIB FILE + + FILENAME='fort.10' + CALL READLATLON(FILENAME,UV,MAXL,MAXB,2*MLEVEL,(/131,132/)) + + PI=ACOS(-1.D0) + DO J=1,MAXB + BREITE(J)=SIN((RLA1-(J-1.D0)*(RLA1-RLA0)/(MAXB-1))*PI/180.D0) + END DO + +! Avoid possible Pole problem +! IF (RLA0 .EQ. -90.0) BREITE(MAXB)=sin(-89.99*PI/180.d0) +! IF (RLA1 .EQ. 90.0) BREITE(1)=sin(89.99*PI/180.d0) + + DO K=1,2*MLEVEL + DO J=1,MAXB + COSB=SQRT(1.0-(BREITE(J))*(BREITE(J))) + IF (RLA0 .EQ. -90.0 .AND. J .EQ. MAXB .OR. & + RLA1 .EQ. 90.0 .AND. J .EQ. 1) THEN + UV(:,J,K)=UV(:,J,K)/1.D6 + ELSE + UV(:,J,K)=UV(:,J,K)*COSB + END IF + END DO + END DO + +!------------------------------------------------------------------ +!! READING OF LNSP on grid +!------------------------------------------------------------------ + +! For debugging only +! FILENAME='LNSPG_G.20060330.600' +! INQUIRE(FILE=FILENAME,EXIST=EX) +! CALL READLATLON(FILENAME,QA, +! *MAXL,MAXB,1,1,(/152/)) + +!------------------------------------------------------------------ +!! READING OF DIVERGENCE +!------------------------------------------------------------------ + + IF (META .EQ. 0 .OR. METADIFF .EQ. 1) THEN + FILENAME='fort.13' + CALL READLATLON(FILENAME,DIV,MAXL,MAXB,MLEVEL,(/155/)) + END IF + + +!------------------------------------------------------------------ +! +! Calculation of etapoint --> total time derivative of +! ECMWF vertical coordinate eta multiplied by the derivative +! of pressure with respect to eta: +! \[\frac{\mathrm{d}\eta}{\mathrm{d}t}\frac{\partial p}{\partial \eta}\] +!------------------------------------------------------------------ + +!* Initialisieren Legendretransformation auf das LaT/LON Gitter +!! Without Gaussian grid calculation Legendre Polynomials are calculated +!! only for one latitude to save space + + + + DO J=1,MAXB + CALL PLGNFA(MNAUF,BREITE(J),Z(0,1)) + CALL PHGCUT(LNPS,PS(:,J,1),WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,1,1) + IF (META .EQ. 0 .OR. METADIFF .EQ. 1 ) THEN + CALL PHGRACUT(LNPS,DPSDL(:,J),DPSDM(:,J),WSAVE,IFAX,Z,H,MAUF, & + MNAUF,MAXL,1,MANF,1) + END IF + END DO + + PS=EXP(PS) + +! For debugging only + CALL STATIS(MAXL,MAXB,1,PS(:,:,1),RMS,MW,SIG) + WRITE(*,'(A,T20,3F12.4)') 'STATISTICS: ',RMS,MW,SIG + + IF (MOMEGADIFF .ne. 0) THEN + CALL OMEGA(PS,DPSDL,DPSDM,DIV,UV(:,:,1),UV(:,:,MLEVEL+1), & + BREITE,OM,MLAT,AK,BK,MAXL*MAXB,MAXB,MLEVEL) + END IF + + IF (META .EQ. 0 .OR. METADIFF .ne. 0) THEN + DPSDT=PS + CALL CONTGL(DPSDT,DPSDL,DPSDM,DIV,UV(:,:,1),UV(:,:,MLEVEL+1), & + BREITE,ETA,MLAT,AK,BK,MAXL*MAXB,MAXB,MLEVEL) + END IF + + END IF ! MGAUSS + +!! CREATE FILE VERTICAL.EC NEEDED BY POP MODEL + + OPEN(21,FILE='VERTICAL.EC') + WRITE(21,'(A)') + WRITE(21,'(A)') 'VERTICAL DISCRETIZATION OF POP MODEL' + WRITE(21,'(A)') + write(21,'(i3,a)') MLEVEL,' number of layers' + WRITE(21,'(A)') + WRITE(21,'(A)') '* A(NLEV+1)' + WRITE(21,'(A)') + DO 205 I=1,MLEVEL+1 +205 WRITE(21,'(F18.12)') AK(I) + WRITE(21,'(A)') + WRITE(21,'(A)') '* B(NLEV+1)' + WRITE(21,'(A)') + DO 210 I=1,MLEVEL+1 +210 WRITE(21,'(F18.12)') BK(I) + CLOSE(21) + +!------------------------------------------------------------------ +! READING OF OMEGA +!------------------------------------------------------------------ + + IF (MOMEGA .NE. 0 ) THEN + + ALLOCATE (OMR(MAXL, MAXB, MLEVEL)) + + FILENAME='fort.19' + CALL READLATLON(FILENAME,OMR,MAXL,MAXB,MLEVEL,(/135/)) + + IF (MOMEGADIFF .NE. 0) THEN + + DO K=1,MLEVEL + CALL STATIS(MAXL,MAXB,1,ETA(:,:,K),RMS,MW,SIG) + WRITE(*,'(A12,I3,3F12.4)') ' ETA: ',K,RMS,MW,SIG + CALL STATIS(MAXL,MAXB,1,OMR(:,:,K),RMS,MW,SIG) + WRITE(*,'(A12,I3,3F12.4)') ' OMEGA: ',K,RMS,MW,SIG + CALL STATIS(MAXL,MAXB,1,OM(:,:,K)-OMR(:,:,K),RMS,MW,SIG) + WRITE(*,'(A12,I3,3F12.4)') 'OMEGA DIFF: ',K,RMS,MW,SIG + END DO + + END IF + END IF + +!------------------------------------------------------------------ +! READING OF ETA +!------------------------------------------------------------------ + + IF (META .NE. 0 ) THEN + + ALLOCATE (ETAR(MAXL, MAXB, MLEVEL)) + + P00=101325. + FILENAME='fort.21' + CALL READLATLON(FILENAME,ETAR,MAXL,MAXB,MLEVEL,(/77/)) + + IF(MDPDETA .EQ. 1) THEN + DO K=1,MLEVEL + DAK=AK(K+1)-AK(K) + DBK=BK(K+1)-BK(K) + DO J=1,MAXB + DO I=1,MAXL + ETAR(I,J,K)=2*ETAR(I,J,K)*PS(I,J,1)*(DAK/PS(I,J,1)+DBK)/ & + (DAK/P00+DBK) + IF (K .GT. 1) ETAR(I,J,K)=ETAR(I,J,K)-ETAR(I,J,K-1) + END DO + END DO + END DO + END IF + + IF (METADIFF .NE. 0 ) THEN + + DO K=1,MLEVEL + CALL STATIS(MAXL,MAXB,1,ETA(:,:,K),RMS,MW,SIG) + WRITE(*,'(A12,I3,3F12.4)') ' ETA: ',K,RMS,MW,SIG + CALL STATIS(MAXL,MAXB,1,ETAR(:,:,K),RMS,MW,SIG) + WRITE(*,'(A12,I3,3F12.4)') ' ETAR: ',K,RMS,MW,SIG + CALL STATIS(MAXL,MAXB,1,ETA(:,:,K)-ETAR(:,:,K),RMS,MW,SIG) + WRITE(*,'(A12,I3,3F12.4)') 'ETA DIFF: ',K,RMS,MW,SIG + END DO + DO K=1,MLEVEL + WRITE(*,'(I3,2F12.4)') K,ETA(1,MAXB/2,K),ETAR(1,MAXB/2,K) + END DO + ELSE + ETA=ETAR + END IF + END IF + + ALLOCATE (T(MAXL, MAXB, MLEVEL)) + ALLOCATE (QA(MAXL, MAXB, MLEVEL)) + +!------------------------------------------------------------------ +!! READING OF T +!------------------------------------------------------------------ + +! OPENING OF UNBLOCKED GRIB FILE + + FILENAME='fort.11' + CALL READLATLON(FILENAME,T,MAXL,MAXB,MLEVEL,(/130/)) + +!------------------------------------------------------------------ +!! READING OF SPECIFIC HUMIDITY +!------------------------------------------------------------------ + + FILENAME='fort.17' + CALL READLATLON(FILENAME,QA,MAXL,MAXB,MLEVEL,(/133/)) + +!------------------------------------------------------------------ +! TEST READING OF UV from MARS (debug only) +!------------------------------------------------------------------ +! FILENAME='fort.22' +! CALL READLATLON(FILENAME,UV2,MAXL,MAXB,2*MLEVEL,2,(/131,132/)) + +!------------------------------------------------------------------ +!! WRITE MODEL LEVEL DATA TO fort.15 +!------------------------------------------------------------------ + +!! Calculation of etadot in CONTGL needed scaled winds (ucosphi,vcosphi) +!! Now we are transforming back to the usual winds. + + DO K=1,MLEVEL + DO J=2,MAXB-1 + COSB=SQRT(1.0-(BREITE(J))*(BREITE(J))) + UV(:,J,K)=UV(:,J,K)/COSB + UV(:,J,MLEVEL+K)=UV(:,J,MLEVEL+K)/COSB + END DO + +! special treatment for poles, if necessary. + DO J=1,MAXB,MAXB-1 + COSB=SQRT(1.0-(BREITE(J))*(BREITE(J))) + IF (1.0-BREITE(J)*BREITE(J) .GT. 0 .OR. MGAUSS .NE. 1) THEN + IF (RLA0 .EQ. -90.0 .AND. J .EQ. MAXB .OR. & + RLA1 .EQ. 90.0 .AND. J .EQ. 1) THEN + UV(:,J,K)=UV(:,J,K)*1.D6 + UV(:,J,MLEVEL+K)=UV(:,J,MLEVEL+K)*1.D6 + ELSE + UV(:,J,K)=UV(:,J,K)/COSB + UV(:,J,MLEVEL+K)=UV(:,J,MLEVEL+K)/COSB + END IF + ELSE + HILFUV(5:MAXL,:)=0. + HILFUV(1:2,:)=0. + IF (J.EQ.MAXB) THEN +! Suedpol + HILFUV(3:4,1)=CUA(:,4,K) + HILFUV(3:4,2)=CVA(:,4,K) + ELSE +! Nordpol + HILFUV(3:4,1)=CUA(:,2,K) + HILFUV(3:4,2)=CVA(:,2,K) + END IF + CALL RFOURTR(HILFUV(:,1),WSAVE,IFAX,MAXL/2-1,MAXL,-1) + DO I=0,MAXL-1 + IF (MANF+I .LE. MAXL) THEN + UV(I+1,J,K)=HILFUV(MANF+I,1) + ELSE + UV(I+1,J,K)=HILFUV(MANF-MAXL+I,1) + END IF + END DO + CALL RFOURTR(HILFUV(:,2),WSAVE,IFAX,MAXL/2-1,MAXL,-1) + DO I=0,MAXL-1 + IF (MANF+I .LE. MAXL) THEN + UV(I+1,J,MLEVEL+K)=HILFUV(MANF+I,2) + ELSE + UV(I+1,J,MLEVEL+K)=HILFUV(MANF-MAXL+I,2) + END IF + END DO + end if + END DO + END DO + +! open output file + call grib_open_file(LUNIT,'fort.15','w') + +! we use temperature on lat/lon on model levels as template for model level data + LUNIT2=0 + CALL GRIB_OPEN_FILE(LUNIT2,'fort.11','R') + CALL GRIB_NEW_FROM_FILE(LUNIT2,IGRIB(1), IRET) + CALL GRIB_CLOSE_FILE(LUNIT2) + + + CALL WRITELATLON & + (LUNIT,IGRIB(1),OGRIB,UV(:,:,1),MAXL,MAXB,MLEVEL,MLEVELIST,1,(/131/)) + + CALL WRITELATLON & + (LUNIT,IGRIB(1),OGRIB,UV(:,:,MLEVEL+1),MAXL,MAXB,MLEVEL,MLEVELIST,1,(/132/)) + + IF (MDPDETA .ne. 1 .AND. MGAUSS .EQ. 0 .and. META .eq. 1) THEN + CALL WRITELATLON & + (LUNIT,IGRIB(1),OGRIB,ETA,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/77/)) + ELSE + CALL WRITELATLON & + (LUNIT,IGRIB(1),OGRIB,ETA,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/METAPAR/)) + END IF + + CALL WRITELATLON(LUNIT,IGRIB(1),OGRIB,T,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/130/)) + + CALL WRITELATLON(LUNIT,IGRIB(1),OGRIB,PS,MAXL,MAXB,1,'1',1,(/134/)) + + CALL GRIB_SET(IGRIB(1),"levelType","ml") + CALL GRIB_SET(IGRIB(1),"typeOfLevel","hybrid") + CALL WRITELATLON(LUNIT,IGRIB(1),OGRIB,QA,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/133/)) + + + IF (MOMEGA .EQ. 1) THEN + CALL GRIB_OPEN_FILE(LUNIT2,'fort.25','w') + CALL WRITELATLON & + (LUNIT2,IGRIB(1),OGRIB,OMR,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/135/)) + + IF (MOMEGADIFF .EQ. 1) THEN + CALL WRITELATLON(LUNIT2,IGRIB(1),OGRIB,DPSDT,MAXL,MAXB,1,'1',1,(/158/)) + OM=OM-OMR + CALL WRITELATLON & + (LUNIT2,IGRIB(1),OGRIB,OM,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/001/)) + CALL GRIB_CLOSE_FILE(LUNIT2) + END IF + END IF + + IF (META .EQ. 1 .AND. METADIFF .EQ. 1) THEN + CALL GRIB_OPEN_FILE(LUNIT2,'fort.26','w') + CALL WRITELATLON & + (LUNIT2,IGRIB(1),OGRIB,ETAR,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/135/)) +! IF (MOMEGADIFF .EQ. 1) THEN + CALL WRITELATLON(LUNIT2,IGRIB(1),OGRIB,DPSDT,MAXL,MAXB,1,'1',1,(/158/)) + OM=ETA-ETAR + CALL WRITELATLON & + (LUNIT2,IGRIB(1),OGRIB,OM,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/001/)) + CALL GRIB_CLOSE_FILE(LUNIT2) +! END IF + END IF + + CALL GRIB_CLOSE_FILE(LUNIT) + +2000 STOP 'SUCCESSFULLY FINISHED calc_etadot: CONGRATULATIONS' +3000 STOP 'ROUTINE calc_etadot: ERROR' +9999 stop 'ROUTINE calc_etadot: ERROR' + +END + +!------------------------------------------------------------------ +INTEGER FUNCTION IA (FIELD1,NI,NJ,NK,G) + + +!------------------------------------------------------------------ +!! Calculate something that is roughly log10( maxval(field1)/g ) [PS] +!------------------------------------------------------------------ + + + IMPLICIT NONE + + INTEGER :: I,J,K + INTEGER, INTENT(IN) :: NI,NJ,NK + REAL, INTENT(IN) :: FIELD1(NI,NJ,NK) + REAL, INTENT(IN) :: G + REAL :: RMIN,RMAX,XMAX,A,A1,A2 + + RMAX=FIELD1(1,1,1) + RMIN=FIELD1(1,1,1) + + DO 100 K=1,NK + DO 100 J=1,NJ + DO 100 I=1,NI + IF (FIELD1(I,J,K) .GT. RMAX) RMAX=FIELD1(I,J,K) + IF (FIELD1(I,J,K) .LT. RMIN) RMIN=FIELD1(I,J,K) +100 CONTINUE + + IF (ABS(RMIN) .GT. RMAX .OR. ABS(RMIN) .EQ. RMAX) THEN + XMAX=ABS(RMIN) + ELSE + XMAX=RMAX + END IF + + IF (XMAX .EQ. 0) THEN + IA = 0 + RETURN + END IF + + A1=LOG10( (G/10.d0)/XMAX ) + A2=LOG10( G/XMAX ) + IF (A1 .gt. A2) THEN + A=A2 + ELSE + A=A1 + END IF + + IF (A .GT. 0) IA=INT(A) + IF (A .LT. 0) IA=INT(A-1.0) + + RETURN + +END + +SUBROUTINE STATIS (NI,NJ,NK,PHI,RMS,MW,SIG) + +!------------------------------------------------------------------ +!! calculate mean, rms, stdev +!------------------------------------------------------------------ + + IMPLICIT REAL (A-H,O-Z) + + REAL PHI(NI,NJ,NK),SIG,MW,RMS,P + + N=NI*NJ*NK + + RMS=0. + MW=0. +! 10.86 sinstead of 11.04 sec + DO 10 K=1,NK + DO 10 J=1,NJ + DO 10 I=1,NI + P=PHI(I,J,K) + RMS=RMS+P*P + MW=MW+P +10 CONTINUE + + RMS=SQRT(RMS/N) + MW=MW/N + + IF (RMS*RMS-MW*MW .LT. 0.) THEN + SIG=0.0 + ELSE + SIG=SQRT(RMS*RMS-MW*MW) + END IF + + RETURN + +END diff --git a/Documentation/html/Documentation/Api/Fortran/src/ftrafo.f90 b/Documentation/html/Documentation/Api/Fortran/src/ftrafo.f90 new file mode 100644 index 0000000000000000000000000000000000000000..7995967ac40b0002d0858dd22494cb9b9fadd4ae --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/src/ftrafo.f90 @@ -0,0 +1,504 @@ +MODULE FTRAFO + +!! Implementation of the spectral transformation using reduced the Gaussian grid + +CONTAINS + +! Implementierung der spektralen Transformationsmethode unter Verwendung +! des reduzierten Gauss'schen Gitters + + + SUBROUTINE VDTOUV(XMN,XLAM,XPHI,GWSAVE,IFAX,P,MLAT,MNAUF,NI,NJ,NK) + +!! Berechnung der scale winds aus Vorticity und Divergenz +!! uebergibt man in XMN die Divergenz, so wird der divergente Anteil des +!! Windes (XPHI=Ud,XPHI=Vd) zurueckgegeben, uebergibt man die Vorticity, so +!! erhaelt man den rotationellen Wind (XLAM=Vrot,XPHI=-Urot). +!! Summiert man beide, erhaelt man den gesamten Scale wind +! GWSAVE ist ein Hilfsfeld fuer die FFT +! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung +! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis +! MNAUF gibt die spektrale Aufloesung an, +! NI = Anzahl der Gauss'schen Gitterpunkte pro Flaeche +! NJ = Anzahl der Gauss'schen Breiten, +! NK = Anzahl der Niveaus + + USE PHTOGR + + IMPLICIT NONE + INTEGER J,N,NI,NJ,NK,MNAUF,GGIND(NJ/2) + INTEGER MLAT(NJ),IFAX(10,NJ) + REAL XMN(0:(MNAUF+1)*(MNAUF+2)-1,NK) + REAL P(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) + REAL H(0:(MNAUF+2)*(MNAUF+3)/2) + REAL XLAM(NI,NK),XPHI(NI,NK) + REAL GWSAVE(8*NJ+15,NJ/2) + REAL SCR,SCI,ACR,ACI,MUSCR,MUSCI,MUACR,MUACI + REAL RT,IT + + GGIND(1)=0 + DO 4 J = 2,NJ/2 + GGIND(J)=GGIND(J-1)+MLAT(J-1) +4 CONTINUE + +!$OMP PARALLEL DO SCHEDULE(DYNAMIC) + DO 5 J = 1,NJ/2 + CALL VDUVSUB(J,XMN,XLAM,XPHI,GWSAVE,IFAX,P,GGIND(J),MLAT,MNAUF,NI,NJ,NK) +5 CONTINUE +!$OMP END PARALLEL DO + + RETURN + + END SUBROUTINE VDTOUV + + SUBROUTINE VDUVSUB(J,XMN,XLAM,XPHI,GWSAVE,IFAX,P,GGIND,MLAT,MNAUF,NI,NJ,NK) + + USE PHTOGR + + IMPLICIT NONE + + INTEGER J,K,M,N,NI,NJ,NK,MNAUF,GGIND,LL,LLP,LLH,LLS,LLPS,LLHS + INTEGER MLAT(NJ),IFAX(10,NJ) + REAL UFOUC(0:MAXAUF),MUFOUC(0:MAXAUF) + REAL VFOUC(0:MAXAUF),MVFOUC(0:MAXAUF) + REAL XMN(0:(MNAUF+1)*(MNAUF+2)-1,NK) + REAL P(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) + REAL H(0:(MNAUF+2)*(MNAUF+3)/2) + REAL XLAM(NI,NK),XPHI(NI,NK) + REAL GWSAVE(8*NJ+15,NJ/2) + REAL ERAD,SCR,SCI,ACR,ACI,MUSCR,MUSCI,MUACR,MUACI + REAL FAC(0:MNAUF),RT,IT + + ERAD = 6367470.D0 + + FAC(0)=0.D0 + DO 12 N=1,MNAUF + FAC(N)=-ERAD/DBLE(N)/DBLE(N+1) +12 CONTINUE + + CALL DPLGND(MNAUF,P(0,J),H) + DO 3 K = 1,NK + LL=0 + LLP=0 + LLH=0 + DO 2 M = 0,MNAUF + SCR=0.D0 + SCI=0.D0 + ACR=0.D0 + ACI=0.D0 + MUSCR=0.D0 + MUSCI=0.D0 + MUACR=0.D0 + MUACI=0.D0 + LLS=LL + LLPS=LLP + LLHS=LLH + IF (2*M+1 .LT. MLAT(J)) THEN + DO 1 N = M,MNAUF,2 + RT=XMN(2*LL,K)*FAC(N) + IT=XMN(2*LL+1,K)*FAC(N) + SCR =SCR+ RT*P(LLP,J) + SCI =SCI+ IT*P(LLP,J) + MUACR =MUACR+ RT*H(LLH) + MUACI =MUACI+ IT*H(LLH) + LL=LL+2 + LLP=LLP+2 + LLH=LLH+2 +1 CONTINUE + LL=LLS+1 + LLP=LLPS+1 + LLH=LLHS+1 + DO 11 N = M+1,MNAUF,2 + RT=XMN(2*LL,K)*FAC(N) + IT=XMN(2*LL+1,K)*FAC(N) + ACR =ACR+ RT*P(LLP,J) + ACI =ACI+ IT*P(LLP,J) + MUSCR =MUSCR+ RT*H(LLH) + MUSCI =MUSCI+ IT*H(LLH) + LL=LL+2 + LLP=LLP+2 + LLH=LLH+2 +11 CONTINUE + END IF + LL=LLS+(MNAUF-M+1) + LLP=LLPS+(MNAUF-M+3) + LLH=LLHS+(MNAUF-M+2) + + UFOUC(2*M)=-M*(SCI-ACI) + UFOUC(2*M+1)=M*(SCR-ACR) + VFOUC(2*M)=-M*(SCI+ACI) + VFOUC(2*M+1)=M*(SCR+ACR) + + MUFOUC(2*M)=-(MUSCR-MUACR) + MUFOUC(2*M+1)=-(MUSCI-MUACI) + MVFOUC(2*M)=-(MUSCR+MUACR) + MVFOUC(2*M+1)=-(MUSCI+MUACI) +2 CONTINUE + + CALL RFOURTR(VFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XLAM(GGIND+1:GGIND+MLAT(J),K)=VFOUC(0:MLAT(J)-1) + CALL RFOURTR(UFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XLAM(NI-GGIND-MLAT(J)+1:NI-GGIND,K)=UFOUC(0:MLAT(J)-1) + + CALL RFOURTR(MVFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XPHI(GGIND+1:GGIND+MLAT(J),K)=MVFOUC(0:MLAT(J)-1) + CALL RFOURTR(MUFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XPHI(NI-GGIND-MLAT(J)+1:NI-GGIND,K)=MUFOUC(0:MLAT(J)-1) + +3 CONTINUE + + RETURN + + END SUBROUTINE VDUVSUB + + + SUBROUTINE PHGRAD(XMN,XLAM,XPHI,GWSAVE,IFAX,P,H,MLAT,MNAUF,NI,NJ,NK) + +!! Berechnung des Gradienten eines Skalars aus dem Feld des +!! Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der +!! Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. +! GWSAVE ist ein Hilfsfeld fuer die FFT +! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung +! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis +! MNAUF gibt die spektrale Aufloesung an, +! NI = Anzahl der Gauss'schen Gitterpunkte, +! NJ = Anzahl der Gauss'schen Breiten, +! NK = Anzahl der Niveaus + + USE PHTOGR + + IMPLICIT NONE + + INTEGER J,K,M,N,NI,NJ,NK,MNAUF,GGIND,LL,LLP,LLH,LLS,LLPS,LLHS + INTEGER MLAT(NJ),IFAX(10,NJ) + REAL UFOUC(0:MAXAUF),MUFOUC(0:MAXAUF) + REAL VFOUC(0:MAXAUF),MVFOUC(0:MAXAUF) + REAL XMN(0:(MNAUF+1)*(MNAUF+2)-1,NK) + REAL P(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) + REAL H(0:(MNAUF+2)*(MNAUF+3)/2) + REAL XLAM(NI,NK),XPHI(NI,NK) + REAL GWSAVE(8*NJ+15,NJ/2) + REAL ERAD + REAL SCR,SCI,ACR,ACI,MUSCR,MUSCI,MUACR,MUACI,RT,IT + + ERAD = 6367470.0 + + GGIND=0 + DO 4 J = 1,NJ/2 + CALL DPLGND(MNAUF,P(0,J),H) + DO 3 K = 1,NK + LL=0 + LLP=0 + LLH=0 + DO 2 M = 0,MNAUF + SCR=0.D0 + SCI=0.D0 + ACR=0.D0 + ACI=0.D0 + MUSCR=0.D0 + MUSCI=0.D0 + MUACR=0.D0 + MUACI=0.D0 + LLS=LL + LLPS=LLP + LLHS=LLH + IF (2*M+1 .LT. MLAT(J)) THEN + DO 1 N = M,MNAUF,2 + RT=XMN(2*LL,K) + IT=XMN(2*LL+1,K) + SCR =SCR+ RT*P(LLP,J) + SCI =SCI+ IT*P(LLP,J) + MUACR =MUACR+RT*H(LLH) + MUACI =MUACI+ IT*H(LLH) + LL=LL+2 + LLP=LLP+2 + LLH=LLH+2 +1 CONTINUE + LL=LLS+1 + LLP=LLPS+1 + LLH=LLHS+1 + DO 11 N = M+1,MNAUF,2 + RT=XMN(2*LL,K) + IT=XMN(2*LL+1,K) + ACR =ACR+ RT*P(LLP,J) + ACI =ACI+ IT*P(LLP,J) + MUSCR =MUSCR+ RT*H(LLH) + MUSCI =MUSCI+ IT*H(LLH) + LL=LL+2 + LLP=LLP+2 + LLH=LLH+2 +11 CONTINUE + END IF + LL=LLS+(MNAUF-M+1) + LLP=LLPS+(MNAUF-M+3) + LLH=LLHS+(MNAUF-M+2) + + UFOUC(2*M)=-M*(SCI-ACI)/ERAD + UFOUC(2*M+1)=M*(SCR-ACR)/ERAD + VFOUC(2*M)=-M*(SCI+ACI)/ERAD + VFOUC(2*M+1)=M*(SCR+ACR)/ERAD + + MUFOUC(2*M)=-(MUSCR-MUACR)/ERAD + MUFOUC(2*M+1)=-(MUSCI-MUACI)/ERAD + MVFOUC(2*M)=-(MUSCR+MUACR)/ERAD + MVFOUC(2*M+1)=-(MUSCI+MUACI)/ERAD +2 CONTINUE + + CALL RFOURTR(VFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XLAM(GGIND+1:GGIND+MLAT(J),K)=VFOUC(0:MLAT(J)-1) + CALL RFOURTR(UFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XLAM(NI-GGIND-MLAT(J)+1:NI-GGIND,K)=UFOUC(0:MLAT(J)-1) + + CALL RFOURTR(MVFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XPHI(GGIND+1:GGIND+MLAT(J),K)=MVFOUC(0:MLAT(J)-1) + CALL RFOURTR(MUFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XPHI(NI-GGIND-MLAT(J)+1:NI-GGIND,K)=MUFOUC(0:MLAT(J)-1) + +3 CONTINUE + GGIND=GGIND+MLAT(J) +4 CONTINUE + + + RETURN + + END SUBROUTINE PHGRAD + + + SUBROUTINE PHGRACUT(XMN,XLAM,XPHI,GWSAVE,IFAX,P,H,MAUF,MNAUF,NI,NJ,MANF,NK) + +!! Berechnung des Gradienten eines Skalars aus dem Feld des +!! Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der +!! Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. +! GWSAVE ist ein Hilfsfeld fuer die FFT +! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung +! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis +! MNAUF gibt die spektrale Aufloesung an, +! NI = Anzahl der Gauss'schen Gitterpunkte, +! NJ = Anzahl der Gauss'schen Breiten, +! NK = Anzahl der Niveaus + + USE PHTOGR + + IMPLICIT NONE + + INTEGER J,K,M,N,NI,NJ,NK,MNAUF,GGIND,LL,LLP,LLH,LLS,LLPS,LLHS + INTEGER MAUF,MANF,I,IFAX(10) + REAL UFOUC(0:MAXAUF),MUFOUC(0:MAXAUF) + REAL VFOUC(0:MAXAUF),MVFOUC(0:MAXAUF) + REAL XMN(0:(MNAUF+1)*(MNAUF+2)-1,NK) + REAL P(0:(MNAUF+3)*(MNAUF+4)/2,NJ) + REAL H(0:(MNAUF+2)*(MNAUF+3)/2) + REAL XLAM(NI,NJ,NK),XPHI(NI,NJ,NK) + REAL HLAM(MAXAUF,2),HPHI(MAXAUF,2) + REAL GWSAVE(4*MAUF+15) + REAL ERAD + REAL SCR,SCI,ACR,ACI,MUSCR,MUSCI,MUACR,MUACI,RT,IT + + ERAD = 6367470.0 + + GGIND=0 + DO 4 J = 1,NJ + CALL DPLGND(MNAUF,P(0,J),H) + DO 3 K = 1,NK + LL=0 + LLP=0 + LLH=0 + DO 2 M = 0,MNAUF + SCR=0.D0 + SCI=0.D0 + ACR=0.D0 + ACI=0.D0 + MUSCR=0.D0 + MUSCI=0.D0 + MUACR=0.D0 + MUACI=0.D0 + LLS=LL + LLPS=LLP + LLHS=LLH + IF (2*M+1 .LT. MAUF) THEN + DO 1 N = M,MNAUF,2 + RT=XMN(2*LL,K) + IT=XMN(2*LL+1,K) + SCR =SCR+ RT*P(LLP,J) + SCI =SCI+ IT*P(LLP,J) + MUACR =MUACR+RT*H(LLH) + MUACI =MUACI+ IT*H(LLH) + LL=LL+2 + LLP=LLP+2 + LLH=LLH+2 +1 CONTINUE + LL=LLS+1 + LLP=LLPS+1 + LLH=LLHS+1 + DO 11 N = M+1,MNAUF,2 + RT=XMN(2*LL,K) + IT=XMN(2*LL+1,K) + ACR =ACR+ RT*P(LLP,J) + ACI =ACI+ IT*P(LLP,J) + MUSCR =MUSCR+ RT*H(LLH) + MUSCI =MUSCI+ IT*H(LLH) + LL=LL+2 + LLP=LLP+2 + LLH=LLH+2 +11 CONTINUE + END IF + LL=LLS+(MNAUF-M+1) + LLP=LLPS+(MNAUF-M+3) + LLH=LLHS+(MNAUF-M+2) + + UFOUC(2*M)=-M*(SCI-ACI)/ERAD + UFOUC(2*M+1)=M*(SCR-ACR)/ERAD + VFOUC(2*M)=-M*(SCI+ACI)/ERAD + VFOUC(2*M+1)=M*(SCR+ACR)/ERAD + + MUFOUC(2*M)=-(MUSCR-MUACR)/ERAD + MUFOUC(2*M+1)=-(MUSCI-MUACI)/ERAD + MVFOUC(2*M)=-(MUSCR+MUACR)/ERAD + MVFOUC(2*M+1)=-(MUSCI+MUACI)/ERAD +2 CONTINUE + + CALL RFOURTR(VFOUC,GWSAVE,IFAX,MNAUF,MAUF,1) + + CALL RFOURTR(MVFOUC,GWSAVE,IFAX,MNAUF,MAUF,1) + + DO 6 I=0,NI-1 + IF (MANF+I .LE. MAUF) THEN + XLAM(I+1,J,K)=VFOUC(MANF+I-1) + XPHI(I+1,J,K)=MVFOUC(MANF+I-1) + ELSE + XLAM(I+1,J,K)=VFOUC(MANF-MAUF+I-1) + XPHI(I+1,J,K)=MVFOUC(MANF-MAUF+I-1) + END IF +6 CONTINUE +3 CONTINUE + GGIND=GGIND+MAUF +4 CONTINUE + + RETURN + + END SUBROUTINE PHGRACUT + + SUBROUTINE CONTGL(PS,DPSDL,DPSDM,DIV,U,V,BREITE,ETA,MLAT,A,B,NI,NJ,NK) + +!! Berechnung der Divergenz aus dem Windfeld (U,V) +!! im Phasenraum. Zurueckgegeben werden die Felder der +!! Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. +! GWSAVE ist ein Hilfsfeld fuer die FFT +! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung +! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis +! MNAUF gibt die spektrale Aufloesung an, +! NI = Anzahl der Gauss'schen Gitterpunkte, +! NJ = Anzahl der Gauss'schen Breiten, +! NK = Anzahl der Niveaus +! Beachte, dass das Windfeld eine um 1 erhoehte Aufloesung in mu-Richtung hat. + + IMPLICIT NONE + + INTEGER NI,NJ,NK,I,J,K,MLAT(NJ),L + + REAL A(NK+1),B(NK+1) + REAL PS(NI),DPSDL(NI),DPSDM(NI) + REAL DIV(NI,NK),U(NI,NK),V(NI,NK),ETA(NI,NK) + REAL BREITE(NJ) + + REAL DIVT1,DIVT2,POB,PUN,DPSDT,COSB + + L=0 + DO 4 J=1,NJ + COSB=(1.0-BREITE(J)*BREITE(J)) + DO 3 I=1,MLAT(J) + L=L+1 + DIVT1=0.0 + DIVT2=0.0 + DO 1 K=1,NK + POB=A(K)+B(K)*PS(L) + PUN=A(K+1)+B(K+1)*PS(L) + + DIVT1=DIVT1+DIV(L,K)*(PUN-POB) + IF (COSB .GT. 0.) THEN + DIVT2=DIVT2+(B(K+1)-B(K))*PS(L)* & + (U(L,K)*DPSDL(L)+V(L,K)*DPSDM(L))/COSB + END IF + + ETA(L,K)=-DIVT1-DIVT2 +1 CONTINUE + + DPSDT=(-DIVT1-DIVT2)/PS(L) + + DO 2 K=1,NK + ETA(L,K)=ETA(L,K)-DPSDT*B(K+1)*PS(L) +2 CONTINUE + PS(L)=DPSDT*PS(L) +3 CONTINUE +4 CONTINUE + + RETURN + + END SUBROUTINE CONTGL + + SUBROUTINE OMEGA(PS,DPSDL,DPSDM,DIV,U,V,BREITE,E,MLAT,A,B,NGI,NGJ,MKK) + +!! calculates $\omega$ in the hybrid ($\eta$-) coordinate system + +! OMEGA berechnet omega im Hybridkoordinatensystem +! PS ist der Bodendruck, +! DPSDL,DPSDM sind die Komponenten des Gradienten des Logarithmus des +! Bodendrucks +! DIV,U,V sind die horizontale Divergenz und das horizontale Windfeld +! BREITE ist das Feld der Gauss'schen Breiten +! E ist omega, + + IMPLICIT NONE + + INTEGER I,J,K,L,NGI,NGJ,MKK,MLAT(NGJ) + + REAL PS(NGI),DPSDL(NGI),DPSDM(NGI),A(MKK+1),B(MKK+1) + REAL DIV(NGI,MKK),U(NGI,MKK),V(NGI,MKK),E(NGI,MKK) + REAL BREITE(NGJ) + + REAL DIVT1,DIVT2,POB,PUN,DP,X,Y,COSB + REAL DIVT3(MKK+2) + + L=0 + DO 4 J=1,NGJ + COSB=(1.0-BREITE(J)*BREITE(J)) + DO 3 I=1,MLAT(J) + L=L+1 + DIVT1=0.0 + DIVT2=0.0 + DIVT3(1)=0.0 + DO 1 K=1,MKK + POB=A(K)+B(K)*PS(L) + PUN=A(K+1)+B(K+1)*PS(L) + DP=PUN-POB + + Y=PS(L)*(U(L,K)*DPSDL(L)+V(L,K)*DPSDM(L))/COSB + IF (K .LT. 3) THEN + X=0.0 + ELSE + X=(B(K+1)-B(K))*Y + END IF + + DIVT1=DIVT1+DIV(L,K)*DP + DIVT2=DIVT2+X + + DIVT3(K+1)=-DIVT1-DIVT2 + + IF (K .GT. 1) THEN + E(L,K) = 0.5*(POB+PUN)/ & + DP*Y*((B(K+1)-B(K))+(A(K+1)*B(K)-A(K)*B(K+1))/DP*LOG(PUN/POB)) + ELSE + E(L,K) = 0.0 + END IF + + E(L,K) = E(L,K)+0.5*(DIVT3(K)+DIVT3(K+1)) + +1 CONTINUE +3 CONTINUE +4 CONTINUE + + RETURN + + END SUBROUTINE OMEGA + +END MODULE FTRAFO diff --git a/Documentation/html/Documentation/Api/Fortran/src/grphreal.f90 b/Documentation/html/Documentation/Api/Fortran/src/grphreal.f90 new file mode 100644 index 0000000000000000000000000000000000000000..b9e61f20736dfffe4c8db64bb65b74581c59f9f7 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/src/grphreal.f90 @@ -0,0 +1,185 @@ +MODULE GRTOPH + + USE PHTOGR + +CONTAINS + + SUBROUTINE GRPH213(CXMN,FELD,WSAVE,IFAX,Z,W,MLAT,MNAUF,MAXL,MAXB,MLEVEL) + +!! WRONG>>> DIE ROUTINE F]HRT EINE TRANSFORMATION EINER +!! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN +!! RAUM AUF KUGELKOORDINATEN DURCH + +! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE +! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF +! CXM = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld +! FELD = FELD DER METEOROLOGISCHEN VARIABLEN +! WSAVE = Working Array fuer Fouriertransformation +! Z = LEGENDREFUNKTIONSWERTE +! +! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN +! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN +! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN +! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN + + IMPLICIT REAL (A-H,O-Z) + +! Anzahl der Gitterpunkte pro Breitenkreis des reduzierten +! Gauss'schen Gitters + INTEGER MLAT(MAXB),ISIZE,IFAX(10,MAXB) + +! FELD DER LEGENDREPOLYNOME FUER EINE BREITE + REAL Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) + +! LOGICAL*1 USED(((216*217)/2+1)*160) + + DIMENSION CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) + REAL FELD(MAXL,MLEVEL) + DIMENSION WSAVE(8*MAXB+15,MAXB/2) + REAL W(MAXB) + DIMENSION IND(MAXB) + + IND(1)=0 + DO 6 J=2,MAXB/2 + IND(j)=IND(J-1)+MLAT(J-1) +6 CONTINUE +!$OMP PARALLEL DO SCHEDULE(DYNAMIC) + DO 16 L=1,MLEVEL + CALL GRPHSUB(L,IND,CXMN,FELD,WSAVE,IFAX,Z,W,MLAT,MNAUF,MAXL,MAXB,MLEVEL) +16 CONTINUE +!$omp end parallel do + + RETURN + + END SUBROUTINE GRPH213 + + SUBROUTINE GRPHSUB(L,IND,CXMN,FELD,WSAVE,IFAX,Z,W,MLAT,MNAUF,MAXL,MAXB,MLEVEL) + +!! DIE ROUTINE F]HRT EINE TRANSFORMATION EINER +!! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN +!! RAUM AUF KUGELKOORDINATEN DURCH +! +! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE +! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF +! CXM = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld +! FELD = FELD DER METEOROLOGISCHEN VARIABLEN +! WSAVE = Working Array fuer Fouriertransformation +! Z = LEGENDREFUNKTIONSWERTE +! +! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN +! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN +! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN +! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN + + IMPLICIT REAL (A-H,O-Z) + +! FELD DER FOURIERKOEFFIZIENTEN + REAL CXMS(4*(MNAUF+1)) + REAL CXMA(4*(MNAUF+1)) + REAL,ALLOCATABLE :: CXM(:,:) + +! Anzahl der Gitterpunkte pro Breitenkreis des reduzierten +! Gauss'schen Gitters + INTEGER MLAT(MAXB),ISIZE + +! FELD DER LEGENDREPOLYNOME FUER EINE BREITE + REAL Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) + +! LOGICAL*1 USED(((216*217)/2+1)*160) + + REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) + REAL FELD(MAXL,MLEVEL) + REAL WSAVE(8*MAXB+15,MAXB/2) + INTEGER IFAX(10,MAXB) + REAL W(MAXB) + INTEGER IND(MAXB) + + ALLOCATE(CXM( 4*MAXB,MAXB)) + DO 5 J=1,MAXB/2 + CXMS(1:MLAT(J))=FELD(IND(J)+1:IND(J)+MLAT(J),L) + CALL RFOUFTR(CXMS,WSAVE(1,J),IFAX(:,J),MNAUF,MLAT(J),1) + CXMA(1:MLAT(J))=FELD(MAXL-IND(J)-MLAT(J)+1:MAXL-IND(J),L) + CALL RFOUFTR(CXMA,WSAVE(1,J),IFAX(:,J),MNAUF,MLAT(J),1) + DO 4 I=1,2*(MNAUF+1) + CXM(I,J)=CXMS(I)+CXMA(I) + CXM(I,MAXB+1-J)=CXMS(I)-CXMA(I) +4 CONTINUE +5 CONTINUE + CALL LGTR213(CXMN(0,L),CXM,Z,W,MLAT,MNAUF,MAXB) + + DEALLOCATE(CXM) + + RETURN + + END SUBROUTINE GRPHSUB +! + SUBROUTINE LGTR213(CXMN,CXM,Z,W,MLAT,MNAUF,MAXB) + +!! DIESE ROUTINE BERECHNET DIE KFFKs CXMN + + IMPLICIT REAL (A-H,O-Z) + INTEGER MLAT(MAXB) + DIMENSION CXM(0:4*MAXB-1,MAXB) + DIMENSION CXMN(0:2*(((MNAUF+1)*MNAUF)/2+MNAUF)+1) + REAL*8 Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) + REAL*8 W(MAXB),CR,CI,HILF + LOGICAL EVEN + + + LL=0 + LLP=0 + DO 1 I=0,MNAUF + KM=0 +9 KM=KM+1 + IF (MLAT(KM) .LE. 2*I) THEN + GOTO 9 + END IF + DO 2 J=I,MNAUF + CR=0 + CI=0 + EVEN=MOD(I+J,2) .EQ. 0 + IF (EVEN) THEN + DO 3 K=KM,MAXB/2 + HILF=W(K)*Z(K,LLP) + CR=CR+CXM(2*I,K)*HILF + CI=CI+CXM(2*I+1,K)*HILF +3 CONTINUE + ELSE + DO 4 K=KM,MAXB/2 + HILF=W(K)*Z(K,LLP) + CR=CR+CXM(2*I,MAXB+1-K)*HILF + CI=CI+CXM(2*I+1,MAXB+1-K)*HILF +4 CONTINUE + END IF +5 CXMN(2*LL)=CR + CXMN(2*LL+1)=CI + LL=LL+1 + LLP=LLP+1 +2 CONTINUE + LLP=LLP+2 +1 CONTINUE + RETURN + + END SUBROUTINE LGTR213 + + SUBROUTINE RFOUFTR(CXM,TRIGS,IFAX,MNAUF,MAXL,ISIGN) +! +! BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS + + IMPLICIT REAL (A-H,O-Z) + DIMENSION CXM(0:2*MAXL-1) + DIMENSION FELD(MAXL),TRIGS(2*MAXL) + DIMENSION WSAVE(MAXAUF) + INTEGER IFAX(10) + +! NORMIERUNG... + WSAVE(1)=CXM(MAXL-1) + + CXM(1:MAXL)=CXM(0:MAXL-1)/2 + CXM(0)=WSAVE(1)/2 +! CALL CFFTF(MAXL,CXM,WSAVE) + CALL FFT99(CXM,WSAVE,TRIGS,IFAX,1,1,MAXL,1,-1) + RETURN + END SUBROUTINE RFOUFTR + +END MODULE GRTOPH diff --git a/Documentation/html/Documentation/Api/Fortran/src/phgrreal.f90 b/Documentation/html/Documentation/Api/Fortran/src/phgrreal.f90 new file mode 100644 index 0000000000000000000000000000000000000000..64a7d308d9177a3b4282e08915c12e60e814b20c --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/src/phgrreal.f90 @@ -0,0 +1,516 @@ +MODULE PHTOGR + + INTEGER, PARAMETER :: MAXAUF=36000 + +CONTAINS + + SUBROUTINE PHGR213(CXMN,FELD,WSAVE,IFAX,Z,MLAT,MNAUF,MAXL,MAXB,MLEVEL) + +!! DIE ROUTINE F]HRT EINE TRANSFORMATION EINER +!! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN +!! RAUM AUF DAS REDUZIERTE GAUSS'SCHE GITTER DURCH +! +! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE +! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF +! FELD = FELD DER METEOROLOGISCHEN VARIABLEN +! WSAVE = Working Array fuer Fouriertransformation +! Z = LEGENDREFUNKTIONSWERTE +! +! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN +! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN +! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN +! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN + + IMPLICIT NONE + +! Anzahl der Gitterpunkte auf jedem Breitenkreis + INTEGER MLAT(MAXB/2) + INTEGER K,MAXL,MAXB,MLEVEL,MNAUF + INTEGER IND(MAXB) + +! FELD DER LEGENDREPOLYNOME FUER EINE BREITE + REAL Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2) + + REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) + REAL FELD(MAXL,MLEVEL) + REAL WSAVE(8*MAXB+15,MAXB/2) + INTEGER :: IFAX(10,MAXB) + + IND(1)=0 + DO 7 K=2,MAXB/2 + IND(K)=IND(K-1)+MLAT(K-1) +7 CONTINUE + +!$OMP PARALLEL DO SCHEDULE(DYNAMIC) + DO 17 K=1,MAXB/2 + CALL PHSYM(K,IND,CXMN,FELD,Z,WSAVE,IFAX,MLAT,MNAUF,MAXL,MAXB,MLEVEL) +17 CONTINUE +!$OMP END PARALLEL DO + + RETURN + + END SUBROUTINE PHGR213 + + SUBROUTINE PHSYM(K,IND,CXMN,FELD,Z,WSAVE,IFAX,MLAT,MNAUF,MAXL,MAXB,MLEVEL) + + IMPLICIT NONE + + INTEGER MLAT(MAXB/2) + INTEGER K,L,I,J,LLS,LLPS,LL,LLP,MAXL,MAXB,MLEVEL,MNAUF + INTEGER IND(MAXB) + INTEGER :: IFAX(10,MAXB) + + +! FELD DER FOURIERKOEFFIZIENTEN + REAL :: CXMS(0:MAXAUF-1),CXMA(0:MAXAUF-1) + +! FELD DER LEGENDREPOLYNOME FUER EINE BREITE + REAL Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2) + REAL ACR,ACI,SCR,SCI + + REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) + REAL FELD(MAXL,MLEVEL) + REAL WSAVE(8*MAXB+15,MAXB/2) + + DO 6 L=1,MLEVEL + LL=0 + LLP=0 + DO 1 I=0,MNAUF + SCR=0.D0 + SCI=0.D0 + ACR=0.D0 + ACI=0.D0 + LLS=LL + LLPS=LLP + IF (2*I+1 .LT. MLAT(K)) THEN +! Innerste Schleife aufgespalten um if-Abfrage zu sparen + DO 18 J=I,MNAUF,2 + SCR=SCR+Z(LLP,K)*CXMN(2*LL,L) + SCI=SCI+Z(LLP,K)*CXMN(2*LL+1,L) + LL=LL+2 + LLP=LLP+2 +18 CONTINUE + LL=LLS+1 + LLP=LLPS+1 + DO 19 J=I+1,MNAUF,2 + ACR=ACR+Z(LLP,K)*CXMN(2*LL,L) + ACI=ACI+Z(LLP,K)*CXMN(2*LL+1,L) + LL=LL+2 + LLP=LLP+2 +19 CONTINUE + END IF + LL=LLS+(MNAUF-I+1) + LLP=LLPS+(MNAUF-I+3) + CXMS(2*I)=SCR+ACR + CXMS(2*I+1)=SCI+ACI + CXMA(2*I)=SCR-ACR + CXMA(2*I+1)=SCI-ACI +1 CONTINUE +! CALL FOURTR(CXMS,FELD(IND(k)+1,L),WSAVE(:,K),MNAUF,*MLAT(K),1) +! CALL FOURTR(CXMA,FELD(MAXL-IND(k)-MLAT(K)+1,L),WSAVE(:,K),MNAUF,MLAT(K),1) + CALL RFOURTR(CXMS,WSAVE(:,K),IFAX(:,K),MNAUF,MLAT(K),1) + FELD(IND(k)+1:IND(K)+MLAT(K),L)=CXMS(0:MLAT(K)-1) + CALL RFOURTR(CXMA,WSAVE(:,K),IFAX(:,K),MNAUF,MLAT(K),1) + FELD(MAXL-IND(k)-MLAT(K)+1:MAXL-IND(k),L)=CXMA(0:MLAT(K)-1) +! WRITE(*,*) IND+1,FELD(IND+1,L) +6 CONTINUE + + END SUBROUTINE PHSYM + + SUBROUTINE PHGCUT(CXMN,FELD,WSAVE,IFAX,Z, & + MNAUF,MMAX,MAUF,MANF,MAXL,MAXB,MLEVEL) + +!! DIE ROUTINE FUEHRT EINE TRANSFORMATION EINER +!! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN +!! RAUM AUF KUGELKOORDINATEN DURCH. Es kann ein Teilausschnitt +!! Der Erde angegeben werden. Diese Routine ist langsamer als phgrph + +! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE +! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF +! FELD = FELD DER METEOROLOGISCHEN VARIABLEN +! BREITE = SINUS DER GEOGRAFISCHEN BREITEN +! +! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN +! MAUF ANZAHL DER LAENGEN UND DER FOURIERKOEFFIZIENTEN +! MANF ANFANG DES LAENGENBEREICHS FUER DAS GITTER, +! AUF DAS INTERPOLIERT WERDEN SOLL +! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN +! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN +! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN + + IMPLICIT REAL (A-H,O-Z) + +! FELD DER FOURIERKOEFFIZIENTEN + +! FELD DER LEGENDREPOLYNOME FUER EINE BREITE + REAL Z(0:((MMAX+3)*(MMAX+4))/2,MAXB) + + DIMENSION CXMN(0:(MMAX+1)*(MMAX+2)-1,MLEVEL) + REAL FELD(MAXL,MAXB,MLEVEL) + DIMENSION WSAVE(4*MAUF+15) + INTEGER:: IFAX(10) + + LOGICAL SYM + +! write(*,*)mauf,mnauf,manf,maxl + + IF (MAUF .LE. MNAUF) WRITE(*,*) 'TOO COARSE LONGITUDE RESOLUTION' + IF (MANF .LT. 1 .OR. MAXL .LT. 1 .OR. & + MANF .GT. MAUF .OR. MAXL .GT. MAUF) THEN + WRITE(*,*) 'WRONG LONGITUDE RANGE',MANF,MAXL + STOP + END IF + +! Pruefe, ob Ausgabegitter symmetrisch zum Aequator ist +! Wenn ja soll Symmetrie der Legendrepolynome ausgenutzt werden + IF (MAXB .GT. 4) THEN + SYM=.TRUE. + DO 11 J=5,5 + IF (ABS(ABS(Z(100,J))-ABS(Z(100,MAXB+1-J))) .GT. 1E-11) SYM=.FALSE. +! WRITE(*,*) ABS(Z(100,J)),ABS(Z(100,MAXB+1-J)) +11 CONTINUE +!! WRITE(*,*) 'Symmetrisch: ',SYM + ELSE + SYM=.FALSE. + END IF + + + IF (SYM) THEN + +!$OMP PARALLEL DO + DO J=1,(MAXB+1)/2 + CALL PHSYMCUT(J,CXMN,FELD,Z,WSAVE,IFAX,MAUF,MNAUF,MAXL,MAXB,MLEVEL,MANF) + END DO +!$OMP END PARALLEL DO + + ELSE + +!$OMP PARALLEL DO + DO J=1,MAXB + CALL PHGPNS(CXMN,FELD,Z,WSAVE,IFAX,J,MNAUF,MAUF,MANF,MAXL,MAXB,MLEVEL) + END DO +!$OMP END PARALLEL DO + + END IF + + RETURN + + END SUBROUTINE PHGCUT + + SUBROUTINE PHSYMCUT(J,CXMN,FELD,Z,WSAVE,IFAX,MAUF,MNAUF,MAXL,MAXB,MLEVEL,MANF) + + IMPLICIT REAL (A-H,O-Z) + +! FELD DER FOURIERKOEFFIZIENTEN + + REAL :: CXM(0:MAXAUF-1),CXMA(0:MAXAUF-1) + +! FELD DER LEGENDREPOLYNOME FUER EINE BREITE + REAL Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB) + REAL SCR,SCI,ACR,ACI + + DIMENSION CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) + REAL FELD(MAXL,MAXB,MLEVEL) + DIMENSION WSAVE(4*MAUF+15) + INTEGER :: IFAX(10) + + DO 16 L=1,MLEVEL + LL=0 + LLP=0 + DO 17 I=0,MNAUF + SCR=0.D0 + SCI=0.D0 + ACR=0.D0 + ACI=0.D0 + LLS=LL + LLPS=LLP +! Innerste Schleife aufgespalten um if-Abfrage zu sparen + DO 18 K=I,MNAUF,2 + SCR=SCR+Z(LLP,J)*CXMN(2*LL,L) + SCI=SCI+Z(LLP,J)*CXMN(2*LL+1,L) + LL=LL+2 + LLP=LLP+2 +18 CONTINUE + LL=LLS+1 + LLP=LLPS+1 + DO 19 K=I+1,MNAUF,2 + ACR=ACR+Z(LLP,J)*CXMN(2*LL,L) + ACI=ACI +Z(LLP,J)*CXMN(2*LL+1,L) + LL=LL+2 + LLP=LLP+2 +19 CONTINUE + LL=LLS+MNAUF-I+1 + LLP=LLPS+MNAUF-I+3 + CXM(2*I)=SCR+ACR + CXM(2*I+1)=SCI+ACI + CXMA(2*I)=SCR-ACR + CXMA(2*I+1)=SCI-ACI +17 CONTINUE + + CALL RFOURTR(CXM,WSAVE,IFAX,MNAUF,MAUF,1) + DO 26 I=0,MAXL-1 + IF (MANF+I .LE. MAUF) THEN + FELD(I+1,J,L)=CXM(MANF+I-1) + ELSE + FELD(I+1,J,L)=CXM(MANF-MAUF+I-1) + END IF +26 CONTINUE + CALL RFOURTR(CXMA,WSAVE,IFAX,MNAUF,MAUF,1) + DO 36 I=0,MAXL-1 + IF (MANF+I .LE. MAUF) THEN + FELD(I+1,MAXB+1-J,L)=CXMA(MANF+I-1) + ELSE + FELD(I+1,MAXB+1-J,L)=CXMA(MANF-MAUF+I-1) + END IF +36 CONTINUE +16 CONTINUE + + END SUBROUTINE PHSYMCUT + + SUBROUTINE PHGPNS(CXMN,FELD,Z,WSAVE,IFAX,J,MNAUF,MAUF,MANF,MAXL,MAXB,MLEVEL) + + IMPLICIT NONE + + INTEGER,INTENT(IN) :: MNAUF,MAUF,MANF,J,MAXL,MAXB,MLEVEL + + REAL :: CXM(0:MAXAUF-1) + REAL,INTENT(IN) :: Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB) + REAL,INTENT(IN) :: CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) + REAL,INTENT(IN) :: WSAVE(4*MAUF+15) + REAL :: FELD(MAXL,MAXB,MLEVEL) + + INTEGER :: IFAX(10) + INTEGER I,L + + DO L=1,MLEVEL + CALL LEGTR(CXMN(:,L),CXM,Z(:,J),MNAUF,MAUF) + CALL RFOURTR(CXM,WSAVE,IFAX,MNAUF,MAUF,1) + + DO I=0,MAXL-1 + IF (MANF+I .LE. MAUF) THEN + FELD(I+1,J,L)=CXM(MANF+I-1) + ELSE + FELD(I+1,J,L)=CXM(MANF-MAUF+I-1) + END IF + END DO + END DO + END SUBROUTINE PHGPNS + + SUBROUTINE LEGTR(CXMN,CXM,Z,MNAUF,MAUF) + +!! DIESE ROUTINE BERECHNET DIE FOURIERKOEFFIZIENTEN CXM + + + IMPLICIT NONE + + INTEGER MNAUF,MAUF,LL,LLP,I,J + REAL CXM(0:MAXAUF-1) + REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1) + REAL Z(0:((MNAUF+3)*(MNAUF+4))/2) + REAL CI,CR + + LL=0 + LLP=0 + DO 1 I=0,MNAUF + CR=0.D0 + CI=0.D0 + DO 2 J=I,MNAUF + CR=CR+Z(LLP)*CXMN(2*LL) + CI=CI+Z(LLP)*CXMN(2*LL+1) + LL=LL+1 + LLP=LLP+1 +2 CONTINUE + LLP=LLP+2 + CXM(2*I)=CR + CXM(2*I+1)=CI +1 CONTINUE + RETURN + + END SUBROUTINE LEGTR + + SUBROUTINE RFOURTR(CXM,TRIGS,IFAX,MNAUF,MAXL,ISIGN) + +!! BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS + + IMPLICIT REAL (A-H,O-Z) + + DIMENSION CXM(0:MAXAUF-1) + REAL :: WSAVE(2*MAXL),TRIGS(2*MAXL) + INTEGER IFAX(10) + + DO I=MNAUF+1,MAXL-1 + CXM(2*I)=0.0 + CXM(2*I+1)=0.0 + END DO + + CALL FFT99(CXM,WSAVE,TRIGS,IFAX,1,1,MAXL,1,1) + + DO I=0,MAXL-1 + CXM(I)=CXM(I+1) + END DO + + RETURN + + END SUBROUTINE RFOURTR + + SUBROUTINE GAULEG(X1,X2,X,W,N) + +!! BERECHNET DIE GAUSS+SCHEN BREITEN + + IMPLICIT REAL (A-H,O-Z) + + DIMENSION X(N),W(N) + PARAMETER (EPS=3.D-14) + + M=(N+1)/2 + XM=0.5D0*(X2+X1) + XL=0.5D0*(X2-X1) + DO 12 I=1,M + Z=DCOS(3.141592654D0*(I-.25D0)/(N+.5D0)) +1 CONTINUE + P1=1.D0 + P2=0.D0 + DO 11 J=1,N + P3=P2 + P2=P1 + P1=((2.D0*J-1.D0)*Z*P2-(J-1.D0)*P3)/J +11 CONTINUE + PP=N*(Z*P1-P2)/(Z*Z-1.D0) + Z1=Z + Z=Z1-P1/PP + IF (ABS(Z-Z1) .GT. EPS)GO TO 1 + X(I)=XM-XL*Z + X(N+1-I)=XM+XL*Z + W(I)=2.D0*XL/((1.D0-Z*Z)*PP*PP) + W(N+1-I)=W(I) +12 CONTINUE + + RETURN + + END SUBROUTINE GAULEG + + + SUBROUTINE PLGNFA(LL,X,Z) + +!! PLGNDN BERECHNET ALLE NORMIERTEN ASSOZIIERTEN +!! LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) +!! UND SCHREIBT SIE IN DAS FELD Z +! Die Polynome sind wie im ECMWF indiziert, d.h. +! P00,P10,P11,P20,P21,P22,... +! Ansonsten ist die Routine analog zu PLGNDN +! X IST DER COSINUS DES ZENITWINKELS ODER +! DER SINUS DER GEOGRAFISCHEN BREITE + + IMPLICIT REAL (A-H,O-Z) + + DIMENSION Z(0:((LL+3)*(LL+4))/2) + + L=LL+2 + I=1 + Z(0)=1.D0 + FACT=1.D0 + POT=1.D0 + SOMX2=DSQRT(1.D0-X*X) + DO 14 J=0,L + DJ=DBLE(J) + IF (J .GT. 0) THEN + FACT=FACT*(2.D0*DJ-1.D0)/(2.D0*DJ) + POT=POT*SOMX2 + Z(I)=DSQRT((2.D0*DJ+1.D0)*FACT)*POT + I=I+1 + END IF + IF (J .LT. L) THEN + Z(I)=X*DSQRT((4.D0*DJ*DJ+8.D0*DJ+3.D0)/(2.D0*DJ+1.D0))*Z(I-1) + I=I+1 + END IF + DK=DJ+2.D0 + DO 14 K=J+2,L + DDK=(DK*DK-DJ*DJ) + Z(I)=X*DSQRT((4.D0*DK*DK-1.D0)/DDK)*Z(I-1)- & + DSQRT(((2.D0*DK+1.D0)*(DK-DJ-1.D0)*(DK+DJ-1.D0))/ & + ((2.D0*DK-3.D0)*DDK))*Z(I-2) + DK=DK+1.D0 + I=I+1 +14 CONTINUE + + RETURN + + END SUBROUTINE PLGNFA + + SUBROUTINE DPLGND(MNAUF,Z,DZ) + +!! DPLGND BERECHNET DIE ABLEITUNG DER NORMIERTEN ASSOZIIERTEN +!! LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) +!! UND SCHREIBT SIE IN DAS FELD DZ +! DIE REIHENFOLGE IST +! P00(X),P01(X),P11(X),P02(X),P12(X),P22(X),..PLL(X) + + IMPLICIT REAL (A-H,O-Z) + + DIMENSION Z(0:((MNAUF+3)*(MNAUF+4))/2) + DIMENSION DZ(0:((MNAUF+2)*(MNAUF+3))/2) + + IF (Z(0) .NE. 1.D0) THEN + WRITE(*,*) 'DPLGND: Z(0) must be 1.0' + STOP + END IF + + LLP=0 + LLH=0 + DO 1 I=0,MNAUF+1 + DO 2 J=I,MNAUF+1 + IF (I .EQ. J) THEN + WURZELA=DSQRT(DBLE((J+1)*(J+1)-I*I)/DBLE(4*(J+1)*(J+1)-1)) + DZ(LLH)=DBLE(J)*WURZELA*Z(LLP+1) + ELSE + WURZELB=DSQRT(DBLE((J+1)*(J+1)-I*I)/DBLE(4*(J+1)*(J+1)-1)) + DZ(LLH)=DBLE(J)*WURZELB*Z(LLP+1)-DBLE(J+1)*WURZELA*Z(LLP-1) + WURZELA=WURZELB + END IF + LLH=LLH+1 + LLP=LLP+1 +2 CONTINUE + LLP=LLP+1 +1 CONTINUE + + RETURN + + END SUBROUTINE DPLGND + + + SUBROUTINE SPFILTER(FELDMN,MM,MMAX) + +!! Spectral Filter of Sardeshmukh and Hoskins (1984, MWR) +! MM=Spectral truncation of field +! MMAX= Spectral truncation of filter + + IMPLICIT NONE + + INTEGER MM,MMAX,I,J,K,L + REAL FELDMN(0:(MM+1)*(MM+2)-1) + REAL KMAX,SMAX,FAK + + SMAX=0.1 + KMAX=-ALOG(SMAX) + KMAX=KMAX/(float(MMAX)*float(MMAX+1))**2 +! WRITE(*,*)'alogsmax',alog(smax),'KMAX:',KMAX + L=0 + DO I=0,MM + DO J=I,MM +! WRITE(*,*) I,J,FELD(K),FELD(K)*EXP(-KMAX*(J*(J+1))**2) + IF(J .LE. MMAX) THEN +! FAK=EXP(-KMAX*(J*(J+1))**2) + FAK=1.0 + FELDMN(2*L)=FELDMN(2*L)*FAK + FELDMN(2*L+1)=FELDMN(2*L+1)*FAK + ELSE + FELDMN(2*L)=0. + FELDMN(2*L+1)=0. + END IF + L=L+1 + END DO + END DO + + END SUBROUTINE SPFILTER + +END MODULE PHTOGR diff --git a/Documentation/html/Documentation/Api/Fortran/src/posnam.f90 b/Documentation/html/Documentation/Api/Fortran/src/posnam.f90 new file mode 100644 index 0000000000000000000000000000000000000000..614bf7f843c6be4c6ae599d8e14a0b5d630174cd --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/src/posnam.f90 @@ -0,0 +1,25 @@ + SUBROUTINE POSNAM(KULNAM,CDNAML) + + !! position in namelist file. + ! author: Mats Hamrud, ECMWF + + INTEGER, INTENT(IN) :: KULNAM + CHARACTER*(*), INTENT(IN) :: CDNAML + CHARACTER*120 CLINE + CHARACTER*1 CLTEST + + REWIND(KULNAM) + ILEN = LEN(CDNAML) +102 CONTINUE + CLINE = ' ' + READ(KULNAM,'(A)') CLINE + IND1 = INDEX(CLINE,'&'//CDNAML) + IF (IND1 .EQ. 0) GO TO 102 + CLTEST = CLINE(IND1+ILEN+1:IND1+ILEN+1) + IF (LGE(CLTEST,'0') .AND. LLE(CLTEST,'9') .OR. & + LGE(CLTEST,'A') .AND. LLE(CLTEST,'Z')) GOTO 102 + BACKSPACE(KULNAM) + + RETURN + + END SUBROUTINE POSNAM diff --git a/src/rwGRIB2.f90 b/Documentation/html/Documentation/Api/Fortran/src/rwgrib2.f90 similarity index 60% rename from src/rwGRIB2.f90 rename to Documentation/html/Documentation/Api/Fortran/src/rwgrib2.f90 index 3d09298dbf9882b48dcc83e5feeaec76075c1f8d..b90d94b575c1fd94a2a095639baaee40c2951ffe 100644 --- a/src/rwGRIB2.f90 +++ b/Documentation/html/Documentation/Api/Fortran/src/rwgrib2.f90 @@ -1,15 +1,17 @@ - MODULE RWGRIB2 + MODULE RWGRIB2 - CONTAINS + CONTAINS - SUBROUTINE READLATLON(FILENAME,FELD,MAXL,MAXB,MLEVEL,MPAR) + SUBROUTINE READLATLON(FILENAME,FELD,MAXL,MAXB,MLEVEL,MPAR) - USE GRIB_API +!! Read a field from GRIB file on lat-lon grid - IMPLICIT NONE + USE GRIB_API - integer :: ifile - integer :: iret + IMPLICIT NONE + + integer :: ifile + integer :: iret integer :: n,mk,parid,nm integer :: i,k integer,dimension(:),allocatable :: igrib @@ -20,10 +22,10 @@ real,dimension(maxl,maxb,mlevel) :: feld integer:: maxl,maxb,mlevel,mstride,mpar(:),irest,div,level integer :: l(size(mpar)) - character*(*):: filename - - feld = 0. + character*(*):: filename + feld=0. + call grib_open_file(ifile, TRIM(FILENAME),'r') ! count the messages in the file @@ -67,112 +69,112 @@ call grib_get(igrib(i),'level',level) kloop: do k=1,nm - if(parid .eq. mpar(k)) then + if (parid .eq. mpar(k)) then ! l(k)=l(k)+1 feld(:,:,(k-1)*div+level)=reshape(values,(/maxl,maxb/)) ! print*,(k-1)*div+l(k),parid exit kloop - endif - enddo kloop - if(k .gt. nm .and. parid .ne. mpar(nm)) then + end if + end do kloop + if (k .gt. nm .and. parid .ne. mpar(nm)) then write(*,*) k,nm,parid,mpar(nm) write(*,*) 'ERROR readlatlon: parameter ',parid,'is not',mpar stop - endif + end if ! print*,i END DO iloop - write(*,*) 'readlatlon: ',i-1,' records read' +!! write(*,*) 'readlatlon: ',i-1,' records read' DO i=1,n call grib_release(igrib(i)) END DO - deallocate(values) + if (allocated(values)) deallocate(values) deallocate(igrib) - END SUBROUTINE READLATLON - - SUBROUTINE WRITELATLON(iunit,igrib,ogrib,FELD,MAXL,MAXB,MLEVEL,& - MLEVELIST,MSTRIDE,MPAR) - - USE GRIB_API - - IMPLICIT NONE - - INTEGER IFIELD,MLEVEL,MNAUF,I,J,K,L,MSTRIDE,IERR,JOUT - INTEGER MPAR(MSTRIDE),MAXL,MAXB,LEVMIN,LEVMAX - INTEGER IUNIT,igrib,ogrib - REAL ZSEC4(MAXL*MAXB) - REAL FELD(MAXL,MAXB,MLEVEL) - CHARACTER*(*) MLEVELIST - INTEGER ILEVEL(MLEVEL),MLINDEX(MLEVEL+1),LLEN - - ! parse MLEVELIST - - LLEN=len(trim(MLEVELIST)) - if(index(MLEVELIST,'to') .ne. 0 .or. index(MLEVELIST,'TO') .ne. 0) THEN - i=index(MLEVELIST,'/') - read(MLEVELIST(1:i-1),*) LEVMIN - i=index(MLEVELIST,'/',.true.) - read(MLEVELIST(i+1:LLEN),*) LEVMAX - l=0 - do i=LEVMIN,LEVMAX - l=l+1 - ILEVEL(l)=i - enddo - else - l=1 - MLINDEX(1)=0 - do i=1,LLEN - if(MLEVELIST(i:i) .eq. '/') THEN - l=l+1 - MLINDEX(l)=i - endif - enddo - MLINDEX(l+1)=LLEN+1 - do i=1,l - read(MLEVELIST(MLINDEX(i)+1:MLINDEX(i+1)-1),*) ILEVEL(i) - enddo - endif - - DO k=1,l - call grib_set(igrib,"level",ILEVEL(k)) - DO j=1,MSTRIDE - call grib_set(igrib,"paramId",MPAR(j)) -! if(MPAR(j) .eq. 87) then + END SUBROUTINE READLATLON + + SUBROUTINE WRITELATLON(iunit,igrib,ogrib,FELD,MAXL,MAXB,MLEVEL,& + MLEVELIST,MSTRIDE,MPAR) + +!! write a field on lat-lon grid to GRIB file + + USE GRIB_API + + IMPLICIT NONE + + INTEGER IFIELD,MLEVEL,MNAUF,I,J,K,L,MSTRIDE,IERR,JOUT + INTEGER MPAR(MSTRIDE),MAXL,MAXB,LEVMIN,LEVMAX + INTEGER IUNIT,igrib,ogrib + REAL ZSEC4(MAXL*MAXB) + REAL FELD(MAXL,MAXB,MLEVEL) + CHARACTER*(*) MLEVELIST + INTEGER ILEVEL(MLEVEL),MLINDEX(MLEVEL+1),LLEN + + ! parse MLEVELIST + + LLEN=len(trim(MLEVELIST)) + if (index(MLEVELIST,'to') .ne. 0 .or. index(MLEVELIST,'TO') .ne. 0) THEN + i=index(MLEVELIST,'/') + read(MLEVELIST(1:i-1),*) LEVMIN + i=index(MLEVELIST,'/',.true.) + read(MLEVELIST(i+1:LLEN),*) LEVMAX + l=0 + do i=LEVMIN,LEVMAX + l=l+1 + ILEVEL(l)=i + end do + else + l=1 + MLINDEX(1)=0 + do i=1,LLEN + if (MLEVELIST(i:i) .eq. '/') THEN + l=l+1 + MLINDEX(l)=i + end if + end do + MLINDEX(l+1)=LLEN+1 + do i=1,l + read(MLEVELIST(MLINDEX(i)+1:MLINDEX(i+1)-1),*) ILEVEL(i) + end do + end if + + DO k=1,l + call grib_set(igrib,"level",ILEVEL(k)) + DO j=1,MSTRIDE + call grib_set(igrib,"paramId",MPAR(j)) +! if (MPAR(j) .eq. 87) then ! call grib_set(igrib,"shortName","etadot") ! call grib_set(igrib,"units","Pa,s**-1") -! endif -! if(MPAR(j) .eq. 77) then +! end if +! if (MPAR(j) .eq. 77) then ! call grib_set(igrib,"shortName","etadot") ! call grib_set(igrib,"units","s**-1") -! endif - if(l .ne. mlevel) then - zsec4(1:maxl*maxb)=RESHAPE(FELD(:,:,ILEVEL(k)),(/maxl*maxb/)) - else - zsec4(1:maxl*maxb)=RESHAPE(FELD(:,:,k),(/maxl*maxb/)) - endif - call grib_set(igrib,"values",zsec4) - - call grib_write(igrib,iunit) - - ENDDO - ENDDO +! end if + if (l .ne. mlevel) then + zsec4(1:maxl*maxb)=RESHAPE(FELD(:,:,ILEVEL(k)),(/maxl*maxb/)) + else + zsec4(1:maxl*maxb)=RESHAPE(FELD(:,:,k),(/maxl*maxb/)) + end if + call grib_set(igrib,"values",zsec4) + call grib_write(igrib,iunit) + END DO + END DO - END SUBROUTINE WRITELATLON + END SUBROUTINE WRITELATLON - SUBROUTINE READSPECTRAL(FILENAME,CXMN,MNAUF,MLEVEL,& - MAXLEV,MPAR,A,B) + SUBROUTINE READSPECTRAL(FILENAME,CXMN,MNAUF,MLEVEL,MAXLEV,MPAR,A,B) - USE GRIB_API +!! read a GRIB file in spherical harmonics - IMPLICIT NONE + USE GRIB_API + IMPLICIT NONE - integer :: ifile + integer :: ifile integer :: iret integer :: n,mk,div,nm,k integer :: i,j,parid @@ -181,8 +183,8 @@ integer :: numberOfValues,maxlev REAL :: A(MAXLEV+1),B(MAXLEV+1),pv(2*MAXLEV+2) REAL:: CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) -integer:: maxl,maxb,mlevel,mstride,mpar(:),mnauf,ioffset,ipar,ilev,l(size(mpar)) -character*(*):: filename + integer:: maxl,maxb,mlevel,mstride,mpar(:),mnauf,ioffset,ipar,ilev,l(size(mpar)) + character*(*):: filename call grib_open_file(ifile, TRIM(FILENAME),'r') @@ -225,28 +227,28 @@ character*(*):: filename ! CXMN(:,IOFFSET+ilev)=values(1:(MNAUF+1)*(MNAUF+2)) call grib_get(igrib(i),'paramId',parid) - nm=size(mpar) - div=mlevel/nm - kloop: do k=1,nm - if(parid .eq. mpar(k)) then + nm=size(mpar) + div=mlevel/nm + kloop: do k=1,nm + if (parid .eq. mpar(k)) then l(k)=l(k)+1 cxmn(:,(k-1)*div+l(k))=values(1:(MNAUF+1)*(MNAUF+2)) ! print*,(k-1)*div+l(k),parid exit kloop - endif + end if - enddo kloop - if(k .gt. nm .and. parid .ne. mpar(nm)) then + end do kloop + if (k .gt. nm .and. parid .ne. mpar(nm)) then write(*,*) k,nm,parid,mpar(nm) write(*,*) 'ERROR readspectral: parameter ',parid,'is not',mpar stop - endif + end if ! print*,i END DO iloop - write(*,*) 'readspectral: ',i-1,' records read' +!! write(*,*) 'readspectral: ',i-1,' records read' DO i=1,n call grib_release(igrib(i)) @@ -255,11 +257,9 @@ character*(*):: filename deallocate(values) deallocate(igrib) + A=pv(1:1+MAXLEV) + B=pv(2+MAXLEV:2*MAXLEV+2) + END SUBROUTINE READSPECTRAL - A=pv(1:1+MAXLEV) - B=pv(2+MAXLEV:2*MAXLEV+2) - - END SUBROUTINE READSPECTRAL - - END MODULE RWGRIB2 +END MODULE RWGRIB2 diff --git a/Documentation/html/Documentation/Api/Fortran/tipuesearch/img/loader.gif b/Documentation/html/Documentation/Api/Fortran/tipuesearch/img/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..9c97738a27ad26d4e63494485484f1b5e4a5c73a Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/tipuesearch/img/loader.gif differ diff --git a/Documentation/html/Documentation/Api/Fortran/tipuesearch/img/search.png b/Documentation/html/Documentation/Api/Fortran/tipuesearch/img/search.png new file mode 100644 index 0000000000000000000000000000000000000000..8c6943d42ab8e861373162f11056f1d198146ebf Binary files /dev/null and b/Documentation/html/Documentation/Api/Fortran/tipuesearch/img/search.png differ diff --git a/Documentation/html/Documentation/Api/Fortran/tipuesearch/tipuesearch.css b/Documentation/html/Documentation/Api/Fortran/tipuesearch/tipuesearch.css new file mode 100644 index 0000000000000000000000000000000000000000..5a94440f9067950769216b1cb3b3d39dfd611dea --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/tipuesearch/tipuesearch.css @@ -0,0 +1,158 @@ + +/* +Tipue Search 4.0 +Copyright (c) 2014 Tipue +Tipue Search is released under the MIT License +http://www.tipue.com/search +*/ + + +/* +#tipue_search_input +{ + font: 13px/1.6 'open sans', sans-serif; + color: #333; + padding: 12px 12px 12px 40px; + width: 170px; + border: 1px solid #e2e2e2; + border-radius: 0; + -moz-appearance: none; + -webkit-appearance: none; + box-shadow: none; + outline: 0; + margin: 0; + background: #fff url('img/search.png') no-repeat 15px 15px; +} +*/ + +#tipue_search_content +{ + max-width: 650px; + padding-top: 15px; + margin: 0; +} +#tipue_search_loading +{ + padding-top: 60px; + background: #fff url('img/loader.gif') no-repeat left; +} + +#tipue_search_warning_head +{ + font: 300 15px/1.6 'Open Sans', sans-serif; + color: #555; +} +#tipue_search_warning +{ + font: 300 13px/1.6 'Open Sans', sans-serif; + color: #333; + margin: 7px 0; +} +#tipue_search_warning a +{ + color: #36c; + font-weight: 300; + text-decoration: none; +} +#tipue_search_warning a:hover +{ + color: #333; +} +#tipue_search_results_count +{ + font: 300 13px/1.6 'Open Sans', sans-serif; + color: #333; +} +.tipue_search_content_title +{ + font: 300 25px/1.7 'Open Sans', sans-serif; + text-rendering: optimizelegibility; + margin-top: 23px; +} +.tipue_search_content_title a +{ + color: #333; + text-decoration: none; +} +.tipue_search_content_title a:hover +{ + color: #555; +} +.tipue_search_content_url +{ + font: 300 13px/1.7 'Open Sans', sans-serif; + word-break: break-all; + word-break: break-word; + -webkit-hyphens: auto; + -moz-hyphens: auto; + hyphens: auto; +} +.tipue_search_content_url a +{ + color: #06c; + text-decoration: none; +} +.tipue_search_content_url a:hover +{ + color: #333; +} +.tipue_search_content_text +{ + font: 300 15px/1.6 'Open Sans', sans-serif; + color: #555; + word-break: break-all; + word-break: break-word; + -webkit-hyphens: auto; + -moz-hyphens: auto; + hyphens: auto; + margin-top: 3px; +} +.h01 +{ + color: #333; + font-weight: 400; +} + +#tipue_search_foot +{ + margin: 51px 0 21px 0; +} +#tipue_search_foot_boxes +{ + padding: 0; + margin: 0; + font: 12px/1 'Open Sans', sans-serif; +} +#tipue_search_foot_boxes li +{ + list-style: none; + margin: 0; + padding: 0; + display: inline; +} +#tipue_search_foot_boxes li a +{ + padding: 9px 15px 10px 15px; + background-color: #f1f1f1; + border: 1px solid #dcdcdc; + border-radius: 1px; + color: #333; + margin-right: 7px; + text-decoration: none; + text-align: center; +} +#tipue_search_foot_boxes li.current +{ + padding: 9px 15px 10px 15px; + background: #fff; + border: 1px solid #dcdcdc; + border-radius: 1px; + color: #333; + margin-right: 7px; + text-align: center; +} +#tipue_search_foot_boxes li a:hover +{ + border: 1px solid #ccc; + background-color: #f3f3f3; +} diff --git a/Documentation/html/Documentation/Api/Fortran/tipuesearch/tipuesearch.js b/Documentation/html/Documentation/Api/Fortran/tipuesearch/tipuesearch.js new file mode 100644 index 0000000000000000000000000000000000000000..b411af5d3a477747db82a77f9eb130d782f57ed6 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/tipuesearch/tipuesearch.js @@ -0,0 +1,452 @@ + +/* +Tipue Search 4.0 +Copyright (c) 2014 Tipue +Tipue Search is released under the MIT License +http://www.tipue.com/search +*/ + + +(function($) { + + $.fn.tipuesearch = function(options) { + + var set = $.extend( { + + 'show' : 7, + 'newWindow' : false, + 'showURL' : true, + 'minimumLength' : 3, + 'descriptiveWords' : 25, + 'highlightTerms' : true, + 'highlightEveryTerm' : false, + 'mode' : 'static', + 'liveDescription' : '*', + 'liveContent' : '*', + 'contentLocation' : 'tipuesearch/tipuesearch_content.json' + + }, options); + + return this.each(function() { + + var tipuesearch_in = { + pages: [] + }; + $.ajaxSetup({ + async: false + }); + + if (set.mode == 'live') + { + for (var i = 0; i < tipuesearch_pages.length; i++) + { + $.get(tipuesearch_pages[i], '', + function (html) + { + var cont = $(set.liveContent, html).text(); + cont = cont.replace(/\s+/g, ' '); + var desc = $(set.liveDescription, html).text(); + desc = desc.replace(/\s+/g, ' '); + + var t_1 = html.toLowerCase().indexOf('<title>'); + var t_2 = html.toLowerCase().indexOf('</title>', t_1 + 7); + if (t_1 != -1 && t_2 != -1) + { + var tit = html.slice(t_1 + 7, t_2); + } + else + { + var tit = 'No title'; + } + + tipuesearch_in.pages.push({ + "title": tit, + "text": desc, + "tags": cont, + "loc": tipuesearch_pages[i] + }); + } + ); + } + } + + if (set.mode == 'json') + { + $.getJSON(set.contentLocation, + function(json) + { + tipuesearch_in = $.extend({}, json); + } + ); + } + + if (set.mode == 'static') + { + tipuesearch_in = $.extend({}, tipuesearch); + } + + var tipue_search_w = ''; + if (set.newWindow) + { + tipue_search_w = ' target="_blank"'; + } + + function getURLP(name) + { + return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20')) || null; + } + if (getURLP('q')) + { + $('#tipue_search_input').val(getURLP('q')); + getTipueSearch(0, true); + } + + $(this).keyup(function(event) + { + if(event.keyCode == '13') + { + getTipueSearch(0, true); + } + }); + + function getTipueSearch(start, replace) + { + $('#tipue_search_content').hide(); + var out = ''; + var results = ''; + var show_replace = false; + var show_stop = false; + var standard = true; + var c = 0; + found = new Array(); + + var d = $('#tipue_search_input').val().toLowerCase(); + d = $.trim(d); + + if ((d.match("^\"") && d.match("\"$")) || (d.match("^'") && d.match("'$"))) + { + standard = false; + } + + if (standard) + { + var d_w = d.split(' '); + d = ''; + for (var i = 0; i < d_w.length; i++) + { + var a_w = true; + for (var f = 0; f < tipuesearch_stop_words.length; f++) + { + if (d_w[i] == tipuesearch_stop_words[f]) + { + a_w = false; + show_stop = true; + } + } + if (a_w) + { + d = d + ' ' + d_w[i]; + } + } + d = $.trim(d); + d_w = d.split(' '); + } + else + { + d = d.substring(1, d.length - 1); + } + + if (d.length >= set.minimumLength) + { + if (standard) + { + if (replace) + { + var d_r = d; + for (var i = 0; i < d_w.length; i++) + { + for (var f = 0; f < tipuesearch_replace.words.length; f++) + { + if (d_w[i] == tipuesearch_replace.words[f].word) + { + d = d.replace(d_w[i], tipuesearch_replace.words[f].replace_with); + show_replace = true; + } + } + } + d_w = d.split(' '); + } + + var d_t = d; + for (var i = 0; i < d_w.length; i++) + { + for (var f = 0; f < tipuesearch_stem.words.length; f++) + { + if (d_w[i] == tipuesearch_stem.words[f].word) + { + d_t = d_t + ' ' + tipuesearch_stem.words[f].stem; + } + } + } + d_w = d_t.split(' '); + + for (var i = 0; i < tipuesearch_in.pages.length; i++) + { + var score = 1000000000; + var s_t = tipuesearch_in.pages[i].text; + for (var f = 0; f < d_w.length; f++) + { + var pat = new RegExp(d_w[f], 'i'); + if (tipuesearch_in.pages[i].title.search(pat) != -1) + { + score -= (200000 - i); + } + if (tipuesearch_in.pages[i].text.search(pat) != -1) + { + score -= (150000 - i); + } + + if (set.highlightTerms) + { + if (set.highlightEveryTerm) + { + var patr = new RegExp('(' + d_w[f] + ')', 'gi'); + } + else + { + var patr = new RegExp('(' + d_w[f] + ')', 'i'); + } + s_t = s_t.replace(patr, "<span class=\"h01\">$1</span>"); + } + if (tipuesearch_in.pages[i].tags.search(pat) != -1) + { + score -= (100000 - i); + } + + if (d_w[f].match("^-")) + { + pat = new RegExp(d_w[f].substring(1), 'i'); + if (tipuesearch_in.pages[i].title.search(pat) != -1 || tipuesearch_in.pages[i].text.search(pat) != -1 || tipuesearch_in.pages[i].tags.search(pat) != -1) + { + score = 1000000000; + } + } + } + + if (score < 1000000000) + { + found[c++] = score + '^' + tipuesearch_in.pages[i].title + '^' + s_t + '^' + tipuesearch_in.pages[i].loc; + } + } + } + else + { + for (var i = 0; i < tipuesearch_in.pages.length; i++) + { + var score = 1000000000; + var s_t = tipuesearch_in.pages[i].text; + var pat = new RegExp(d, 'i'); + if (tipuesearch_in.pages[i].title.search(pat) != -1) + { + score -= (200000 - i); + } + if (tipuesearch_in.pages[i].text.search(pat) != -1) + { + score -= (150000 - i); + } + + if (set.highlightTerms) + { + if (set.highlightEveryTerm) + { + var patr = new RegExp('(' + d + ')', 'gi'); + } + else + { + var patr = new RegExp('(' + d + ')', 'i'); + } + s_t = s_t.replace(patr, "<span class=\"h01\">$1</span>"); + } + if (tipuesearch_in.pages[i].tags.search(pat) != -1) + { + score -= (100000 - i); + } + + if (score < 1000000000) + { + found[c++] = score + '^' + tipuesearch_in.pages[i].title + '^' + s_t + '^' + tipuesearch_in.pages[i].loc; + } + } + } + + if (c != 0) + { + if (show_replace == 1) + { + out += '<div id="tipue_search_warning_head">Showing results for ' + d + '</div>'; + out += '<div id="tipue_search_warning">Search instead for <a href="javascript:void(0)" id="tipue_search_replaced">' + d_r + '</a></div>'; + } + if (c == 1) + { + out += '<div id="tipue_search_results_count">1 result</div>'; + } + else + { + c_c = c.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); + out += '<div id="tipue_search_results_count">' + c_c + ' results</div>'; + } + + found.sort(); + var l_o = 0; + for (var i = 0; i < found.length; i++) + { + var fo = found[i].split('^'); + if (l_o >= start && l_o < set.show + start) + { + out += '<div class="tipue_search_content_title"><a href="' + fo[3] + '"' + tipue_search_w + '>' + fo[1] + '</a></div>'; + + if (set.showURL) + { + out += '<div class="tipue_search_content_url"><a href="' + fo[3] + '"' + tipue_search_w + '>' + fo[3] + '</a></div>'; + } + + var t = fo[2]; + var t_d = ''; + var t_w = t.split(' '); + if (t_w.length < set.descriptiveWords) + { + t_d = t; + } + else + { + for (var f = 0; f < set.descriptiveWords; f++) + { + t_d += t_w[f] + ' '; + } + } + t_d = $.trim(t_d); + if (t_d.charAt(t_d.length - 1) != '.') + { + t_d += ' ...'; + } + out += '<div class="tipue_search_content_text">' + t_d + '</div>'; + } + l_o++; + } + + if (c > set.show) + { + var pages = Math.ceil(c / set.show); + var page = (start / set.show); + out += '<nav><ul class="pagination">'; + + if (start > 0) + { + out += '<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="' + (start - set.show) + '_' + replace + '"><span aria-hidden="true">«</span></a></li>'; + } + else + { + out += '<li class="disabled"><span aria-hidden="true">«</span></li>'; + } + + if (page <= 2) + { + var p_b = pages; + if (pages > 3) + { + p_b = 3; + } + for (var f = 0; f < p_b; f++) + { + if (f == page) + { + out += '<li class="active"><a href="#">' + (f + 1) + '<span class="sr-only">(current)</span></a></li>'; + } + else + { + out += '<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="' + (f * set.show) + '_' + replace + '">' + (f + 1) + '</a></li>'; + } + } + } + else + { + var p_b = page + 2; + if (p_b > pages) + { + p_b = pages; + } + for (var f = page - 1; f < p_b; f++) + { + if (f == page) + { + out += '<li class="active"><a href="#">' + (f + 1) + '<span class="sr-only">(current)</span></a></li>'; + } + else + { + out += '<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="' + (f * set.show) + '_' + replace + '">' + (f + 1) + '</a></li>'; + } + } + } + + if (page + 1 != pages) + { + out += '<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="' + (start + set.show) + '_' + replace + '"><span aria-hidden="true">»</span></a></li>'; + } + else + { + out += '<li class="disabled"><span aria-hidden="true">»</span></li>'; + } + + out += '</ul></div>'; + } + } + else + { + out += '<div id="tipue_search_warning_head">Nothing found</div>'; + } + } + else + { + if (show_stop) + { + out += '<div id="tipue_search_warning_head">Nothing found</div><div id="tipue_search_warning">Common words are largely ignored</div>'; + } + else + { + out += '<div id="tipue_search_warning_head">Search too short</div>'; + if (set.minimumLength == 1) + { + out += '<div id="tipue_search_warning">Should be one character or more</div>'; + } + else + { + out += '<div id="tipue_search_warning">Should be ' + set.minimumLength + ' characters or more</div>'; + } + } + } + + $('#tipue_search_content').html(out); + $('#tipue_search_content').slideDown(200); + + $('#tipue_search_replaced').click(function() + { + getTipueSearch(0, false); + }); + + $('.tipue_search_foot_box').click(function() + { + var id_v = $(this).attr('id'); + var id_a = id_v.split('_'); + + getTipueSearch(parseInt(id_a[0]), id_a[1]); + }); + } + + }); + }; + +})(jQuery); + + + + diff --git a/Documentation/html/Documentation/Api/Fortran/tipuesearch/tipuesearch.min.js b/Documentation/html/Documentation/Api/Fortran/tipuesearch/tipuesearch.min.js new file mode 100644 index 0000000000000000000000000000000000000000..f6cd2b4e76d2152c0ccbd28659e42fa9d5c54d80 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/tipuesearch/tipuesearch.min.js @@ -0,0 +1,14 @@ +(function($){$.fn.tipuesearch=function(options){var set=$.extend({"show":7,"newWindow":false,"showURL":true,"minimumLength":3,"descriptiveWords":25,"highlightTerms":true,"highlightEveryTerm":false,"mode":"static","liveDescription":"*","liveContent":"*","contentLocation":"tipuesearch/tipuesearch_content.json"},options);return this.each(function(){var tipuesearch_in={pages:[]};$.ajaxSetup({async:false});if(set.mode=="live")for(var i=0;i<tipuesearch_pages.length;i++)$.get(tipuesearch_pages[i],"",function(html){var cont= +$(set.liveContent,html).text();cont=cont.replace(/\s+/g," ");var desc=$(set.liveDescription,html).text();desc=desc.replace(/\s+/g," ");var t_1=html.toLowerCase().indexOf("<title>");var t_2=html.toLowerCase().indexOf("</title>",t_1+7);if(t_1!=-1&&t_2!=-1)var tit=html.slice(t_1+7,t_2);else var tit="No title";tipuesearch_in.pages.push({"title":tit,"text":desc,"tags":cont,"loc":tipuesearch_pages[i]})});if(set.mode=="json")$.getJSON(set.contentLocation,function(json){tipuesearch_in=$.extend({},json)}); +if(set.mode=="static")tipuesearch_in=$.extend({},tipuesearch);var tipue_search_w="";if(set.newWindow)tipue_search_w=' target="_blank"';function getURLP(name){return decodeURIComponent(((new RegExp("[?|&]"+name+"="+"([^&;]+?)(&|#|;|$)")).exec(location.search)||[,""])[1].replace(/\+/g,"%20"))||null}if(getURLP("q")){$("#tipue_search_input").val(getURLP("q"));getTipueSearch(0,true)}$(this).keyup(function(event){if(event.keyCode=="13")getTipueSearch(0,true)});function getTipueSearch(start,replace){$("#tipue_search_content").hide(); +var out="";var results="";var show_replace=false;var show_stop=false;var standard=true;var c=0;found=new Array;var d=$("#tipue_search_input").val().toLowerCase();d=$.trim(d);if(d.match('^"')&&d.match('"$')||d.match("^'")&&d.match("'$"))standard=false;if(standard){var d_w=d.split(" ");d="";for(var i=0;i<d_w.length;i++){var a_w=true;for(var f=0;f<tipuesearch_stop_words.length;f++)if(d_w[i]==tipuesearch_stop_words[f]){a_w=false;show_stop=true}if(a_w)d=d+" "+d_w[i]}d=$.trim(d);d_w=d.split(" ")}else d= +d.substring(1,d.length-1);if(d.length>=set.minimumLength){if(standard){if(replace){var d_r=d;for(var i=0;i<d_w.length;i++)for(var f=0;f<tipuesearch_replace.words.length;f++)if(d_w[i]==tipuesearch_replace.words[f].word){d=d.replace(d_w[i],tipuesearch_replace.words[f].replace_with);show_replace=true}d_w=d.split(" ")}var d_t=d;for(var i=0;i<d_w.length;i++)for(var f=0;f<tipuesearch_stem.words.length;f++)if(d_w[i]==tipuesearch_stem.words[f].word)d_t=d_t+" "+tipuesearch_stem.words[f].stem;d_w=d_t.split(" "); +for(var i=0;i<tipuesearch_in.pages.length;i++){var score=1E9;var s_t=tipuesearch_in.pages[i].text;for(var f=0;f<d_w.length;f++){var pat=new RegExp(d_w[f],"i");if(tipuesearch_in.pages[i].title.search(pat)!=-1)score-=2E5-i;if(tipuesearch_in.pages[i].text.search(pat)!=-1)score-=15E4-i;if(set.highlightTerms){if(set.highlightEveryTerm)var patr=new RegExp("("+d_w[f]+")","gi");else var patr=new RegExp("("+d_w[f]+")","i");s_t=s_t.replace(patr,'<span class="h01">$1</span>')}if(tipuesearch_in.pages[i].tags.search(pat)!= +-1)score-=1E5-i;if(d_w[f].match("^-")){pat=new RegExp(d_w[f].substring(1),"i");if(tipuesearch_in.pages[i].title.search(pat)!=-1||tipuesearch_in.pages[i].text.search(pat)!=-1||tipuesearch_in.pages[i].tags.search(pat)!=-1)score=1E9}}if(score<1E9)found[c++]=score+"^"+tipuesearch_in.pages[i].title+"^"+s_t+"^"+tipuesearch_in.pages[i].loc}}else for(var i=0;i<tipuesearch_in.pages.length;i++){var score=1E9;var s_t=tipuesearch_in.pages[i].text;var pat=new RegExp(d,"i");if(tipuesearch_in.pages[i].title.search(pat)!= +-1)score-=2E5-i;if(tipuesearch_in.pages[i].text.search(pat)!=-1)score-=15E4-i;if(set.highlightTerms){if(set.highlightEveryTerm)var patr=new RegExp("("+d+")","gi");else var patr=new RegExp("("+d+")","i");s_t=s_t.replace(patr,'<span class="h01">$1</span>')}if(tipuesearch_in.pages[i].tags.search(pat)!=-1)score-=1E5-i;if(score<1E9)found[c++]=score+"^"+tipuesearch_in.pages[i].title+"^"+s_t+"^"+tipuesearch_in.pages[i].loc}if(c!=0){if(show_replace==1){out+='<div id="tipue_search_warning_head">Showing results for '+ +d+"</div>";out+='<div id="tipue_search_warning">Search instead for <a href="javascript:void(0)" id="tipue_search_replaced">'+d_r+"</a></div>"}if(c==1)out+='<div id="tipue_search_results_count">1 result</div>';else{c_c=c.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");out+='<div id="tipue_search_results_count">'+c_c+" results</div>"}found.sort();var l_o=0;for(var i=0;i<found.length;i++){var fo=found[i].split("^");if(l_o>=start&&l_o<set.show+start){out+='<div class="tipue_search_content_title"><a href="'+ +fo[3]+'"'+tipue_search_w+">"+fo[1]+"</a></div>";if(set.showURL)out+='<div class="tipue_search_content_url"><a href="'+fo[3]+'"'+tipue_search_w+">"+fo[3]+"</a></div>";var t=fo[2];var t_d="";var t_w=t.split(" ");if(t_w.length<set.descriptiveWords)t_d=t;else for(var f=0;f<set.descriptiveWords;f++)t_d+=t_w[f]+" ";t_d=$.trim(t_d);if(t_d.charAt(t_d.length-1)!=".")t_d+=" ...";out+='<div class="tipue_search_content_text">'+t_d+"</div>"}l_o++}if(c>set.show){var pages=Math.ceil(c/set.show);var page=start/set.show; +out+='<div id="tipue_search_foot"><ul id="tipue_search_foot_boxes">';if(start>0)out+='<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="'+(start-set.show)+"_"+replace+'">Prev</a></li>';if(page<=2){var p_b=pages;if(pages>3)p_b=3;for(var f=0;f<p_b;f++)if(f==page)out+='<li class="current">'+(f+1)+"</li>";else out+='<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="'+f*set.show+"_"+replace+'">'+(f+1)+"</a></li>"}else{var p_b=page+2;if(p_b>pages)p_b=pages;for(var f=page- +1;f<p_b;f++)if(f==page)out+='<li class="current">'+(f+1)+"</li>";else out+='<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="'+f*set.show+"_"+replace+'">'+(f+1)+"</a></li>"}if(page+1!=pages)out+='<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="'+(start+set.show)+"_"+replace+'">Next</a></li>';out+="</ul></div>"}}else out+='<div id="tipue_search_warning_head">Nothing found</div>'}else if(show_stop)out+='<div id="tipue_search_warning_head">Nothing found</div><div id="tipue_search_warning">Common words are largely ignored</div>'; +else{out+='<div id="tipue_search_warning_head">Search too short</div>';if(set.minimumLength==1)out+='<div id="tipue_search_warning">Should be one character or more</div>';else out+='<div id="tipue_search_warning">Should be '+set.minimumLength+" characters or more</div>"}$("#tipue_search_content").html(out);$("#tipue_search_content").slideDown(200);$("#tipue_search_replaced").click(function(){getTipueSearch(0,false)});$(".tipue_search_foot_box").click(function(){var id_v=$(this).attr("id");var id_a= +id_v.split("_");getTipueSearch(parseInt(id_a[0]),id_a[1])})}})}})(jQuery); diff --git a/Documentation/html/Documentation/Api/Fortran/tipuesearch/tipuesearch_content.js b/Documentation/html/Documentation/Api/Fortran/tipuesearch/tipuesearch_content.js new file mode 100644 index 0000000000000000000000000000000000000000..db1f3534ffa2746682897995953b4028afe1c0e9 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/tipuesearch/tipuesearch_content.js @@ -0,0 +1 @@ +var tipuesearch = {"pages":[{"text":"Flex_extract: Calculation of etadot Note for this version:\nAll code transferred to free form.\nSome code cosmetics, should not have any effects\nRename some source files Developer Info Leopold Haimberger 1 1 Univ. of Vienna, Dept. of Meteorology & Geophysics","tags":"home","loc":"index.html","title":" Flex_extract: Calculation of etadot "},{"text":"This file depends on sourcefile~~calc_etadot.f90~~EfferentGraph sourcefile~calc_etadot.f90 calc_etadot.f90 sourcefile~rwgrib2.f90 rwgrib2.f90 sourcefile~calc_etadot.f90->sourcefile~rwgrib2.f90 sourcefile~ftrafo.f90 ftrafo.f90 sourcefile~calc_etadot.f90->sourcefile~ftrafo.f90 sourcefile~phgrreal.f90 phgrreal.f90 sourcefile~calc_etadot.f90->sourcefile~phgrreal.f90 sourcefile~grphreal.f90 grphreal.f90 sourcefile~calc_etadot.f90->sourcefile~grphreal.f90 sourcefile~ftrafo.f90->sourcefile~phgrreal.f90 sourcefile~grphreal.f90->sourcefile~phgrreal.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\n is dependent upon another if the latter must be compiled before the former\n can be. Contents Programs calc_etadot Functions IA Subroutines STATIS Source Code calc_etadot.f90 Source Code PROGRAM calc_etadot !! Prepare input data for FLEXPART, esp. vertical velocity as !! etadot or etadot * dp/deta !*---------------------------------------------------------------- ! author: L. Haimberger ! date: 03/2010 ! version: V4.0 ! !## Program calc_etadot ! ! **Prepares input data for POP model meteorological preprocessor** ! !----------------------------------------------------------------- ! ! Calculation of etapoint on a regular \\lambda-\\phi grid and writing ! `U,V,ETAPOINT,T,PS,Q,SD,MSL,TCC,10U, 10V, 2T,2D,LSP,CP,SSHF,SSR, ! EWSS,NSSS` ! to an output file (input and output in GRIB 1 or 2 format). ! etapoint is defined as the total time derivative of ! ECMWF vertical coordinate eta multiplied by the derivative ! of pressure with respect to eta: ! \\frac{\\mathrm{d}\\eta}{\\mathrm{d}t}\\frac{\\partial p}{\\partial \\eta} ! !### Version history and authors: ! - 04/1994: Leopold Haimberger, Gerhard Wotawa ! ! - 2003-05-11: Alexander Beck ! ! - 12/2006: L. Haimberger V2.0, ! handle arbitrary regular grids and T799 resolution data ! ! - 03/2010: L. Haimberger V4.0, ! handle GRIB edition 2 fields and T1279 resolution data ! - 04-06/2019: Petra Seibert, ! beautify code and add FORD documentation ! !----------------------------------------------------------------- ! # !## Input required: ! ! UNIT FILE PARAMETER(S) DATA REPRESENTATION ! ! 11 fort.11 T,U,V regular lambda phi grid ! 12 fort.12 D regular lambda phi grid ! 13 fort.13 LNSP spherical harmonics ! 14 fort.14 SD,MSL,TCC,10U, ! 10V,2T,2D regular lambda phi grid ! 16 fort.16 LSP,CP,SSHF, ! SSR,EWSS,NSSS regular lambda phi grid ! 17 fort.17 Q regular lambda phi grid ! !------------------------------------------------------------------ ! !### Output produced: ! ! UNIT FILE PARAMETER(S) DATA REPRESENTATION ! ! 15 fort.15 `U,V,ETA,T,PS, ! `Q,SD,MSL,TCC,` ! `10U,10V,2T,2D,` regular lambda phi grid ! `LSP,CP,SSHF,` ! `SSR,EWSS,NSSS` ! !------------------------------------------------------------------ USE PHTOGR USE GRTOPH USE FTRAFO USE RWGRIB2 USE GRIB_API IMPLICIT NONE REAL , ALLOCATABLE , DIMENSION (:,:) :: LNPS REAL , ALLOCATABLE , DIMENSION (:,:) :: Z REAL , ALLOCATABLE , DIMENSION (:,:,:) :: T , UV , UV2 REAL , ALLOCATABLE , DIMENSION (:,:,:) :: QA , OM , OMR REAL , ALLOCATABLE , DIMENSION (:,:,:) :: DIV , ETA , ETAR REAL , ALLOCATABLE , DIMENSION (:,:) :: DPSDL , DPSDM REAL , ALLOCATABLE , DIMENSION (:,:,:) :: PS , DPSDT REAL , ALLOCATABLE , DIMENSION (:,:,:) :: SURF , FLUX , OROLSM REAL , ALLOCATABLE , DIMENSION (:) :: WSAVE , H , SINL , COSL , WSAVE2 REAL , ALLOCATABLE , DIMENSION (:) :: BREITE , GBREITE , AK , BK , pv ! Arrays for Gaussian grid calculations REAL :: X1 , X2 , RMS , MW , SIG , LAM REAL , ALLOCATABLE :: CUA (:,:,:), CVA (:,:,:) REAL , ALLOCATABLE , DIMENSION (:,:) :: P , PP , P2 REAL , ALLOCATABLE , DIMENSION (:,:) :: XMN , HILFUV REAL , ALLOCATABLE , DIMENSION (:) :: LNPMN , LNPMN2 , LNPMN3 REAL , ALLOCATABLE , DIMENSION (:) :: WEIGHT REAL , ALLOCATABLE , DIMENSION (:,:) :: UGVG REAL , ALLOCATABLE , DIMENSION (:,:) :: DG , ETAG REAL , ALLOCATABLE , DIMENSION (:,:) :: GWSAVE REAL , ALLOCATABLE , DIMENSION (:) :: PSG , HILF ! end arrays for Gaussian grid calculations INTEGER , ALLOCATABLE , DIMENSION (:) :: MLAT , MPSURF , MPFLUX , MPORO , MPAR INTEGER , ALLOCATABLE :: GIFAX (:,:) REAL PI , COSB , DAK , DBK , P00 REAL URLAR8 , JMIN1 , LLLAR8 , MAXBMIN1 , PIR8 , DCOSB INTEGER I , J , K , L , IERR , M , LTEST , MK , NGI , NGJ INTEGER MFLUX , MSURF , MORO INTEGER LUNIT , LUNIT2 INTEGER MAXL , MAXB , MLEVEL , LEVOUT , LEVMIN , LEVMAX INTEGER MOMEGA , MOMEGADIFF , MGAUSS , MSMOOTH , MNAUF , META , METADIFF INTEGER MDPDETA , METAPAR REAL RLO0 , RLO1 , RLA0 , RLA1 CHARACTER * 300 MLEVELIST INTEGER MAUF , MANF , IFAX ( 10 ) INTEGER IGRIB ( 1 ), iret , ogrib CHARACTER * 80 FILENAME NAMELIST / NAMGEN / & MAXL , MAXB , & MLEVEL , MLEVELIST , MNAUF , METAPAR , & RLO0 , RLO1 , RLA0 , RLA1 , & MOMEGA , MOMEGADIFF , MGAUSS , MSMOOTH , META , METADIFF ,& MDPDETA LTEST = 1 CALL POSNAM ( 4 , 'NAMGEN' ) READ ( 4 , NAMGEN ) MAUF = INT ( 36 0. * ( REAL ( MAXL ) - 1. ) / ( RLO1 - RLO0 ) + 0.0001 ) ! PRINT*, MAUF MANF = INT ( REAL ( MAUF ) / 36 0. * ( 36 0. + RLO0 ) + 1.0001 ) IF ( MANF . gt . MAUF ) MANF = MANF - MAUF !------------------------------------------------------------------ !! ALLOCATE VARIABLES !------------------------------------------------------------------ ALLOCATE ( LNPS ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , 1 )) ALLOCATE ( H ( 0 :( MNAUF + 2 ) * ( MNAUF + 3 ) / 2 )) ALLOCATE ( OM ( MAXL , MAXB , MLEVEL )) ALLOCATE ( ETA ( MAXL , MAXB , MLEVEL )) ALLOCATE ( PS ( MAXL , MAXB , 1 ), DPSDT ( MAXL , MAXB , 1 )) ALLOCATE ( WSAVE ( 4 * MAUF + 15 ), WSAVE2 ( 4 * MAUF + 15 )) ALLOCATE ( BREITE ( MAXB ), AK ( MLEVEL + 1 ), BK ( MLEVEL + 1 ), PV ( 2 * MLEVEL + 2 )) ALLOCATE ( MPAR ( 2 )) ALLOCATE ( COSL ( MAXL ), SINL ( MAXL )) ALLOCATE ( CUA ( 2 , 4 , MLEVEL ), CVA ( 2 , 4 , MLEVEL )) !------------------------------------------------------------------ ! GAUSS STUFF !------------------------------------------------------------------ IF ( MGAUSS . EQ . 1 ) THEN LUNIT = 0 FILENAME = 'fort.18' CALL GRIB_OPEN_FILE ( LUNIT , TRIM ( FILENAME ), 'R' ) CALL GRIB_NEW_FROM_FILE ( LUNIT , IGRIB ( 1 ), IRET ) ! we can close the file CALL GRIB_CLOSE_FILE ( LUNIT ) ! call grib_get(igrib(1),'gridType', j) NGJ = MNAUF + 1 ALLOCATE ( GWSAVE ( 8 * NGJ + 15 , NGJ / 2 )) ALLOCATE ( GIFAX ( 10 , NGJ )) ALLOCATE ( GBREITE ( NGJ ), WEIGHT ( NGJ )) ALLOCATE ( MLAT ( NGJ )) ALLOCATE ( P ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 , NGJ / 2 )) ALLOCATE ( PP ( NGJ / 2 , 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 )) ALLOCATE ( Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 , MAXB )) CALL GRIB_GET ( IGRIB ( 1 ), 'numberOfPointsAlongAMeridian' , NGJ ) ! get as a integer call grib_get ( igrib ( 1 ), 'pl' , MLAT ) NGI = SUM ( MLAT ) CALL GRIB_GET ( IGRIB ( 1 ), 'numberOfVerticalCoordinateValues' , MK ) IF ( MK / 2 - 1 . NE . MLEVEL ) THEN WRITE ( * , * ) 'FATAL: Number of model levels' , mk , & ' does not agree with' , MLEVEL , ' in namelist' STOP END IF call grib_get ( igrib ( 1 ), 'pv' , pv ) AK = PV ( 1 : 1 + MLEVEL ) BK = PV ( 2 + MLEVEL : 2 * MLEVEL + 2 ) ALLOCATE ( LNPMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 )) ALLOCATE ( LNPMN2 ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 )) ALLOCATE ( UGVG ( NGI , 2 * MLEVEL ), HILFUV ( 2 * MAXL , 2 )) ALLOCATE ( DPSDL ( NGI , 1 ), DPSDM ( NGI , 1 )) ALLOCATE ( PSG ( NGI ), HILF ( NGI )) ALLOCATE ( UV ( MAXL , MAXB , 2 * MLEVEL )) ! ALLOCATE (UV2(MAXL, MAXB, 2*MLEVEL)) ALLOCATE ( XMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , 2 * MLEVEL )) ALLOCATE ( DG ( NGI , MLEVEL ), ETAG ( NGI , MLEVEL )) !! Initialisieren Legendretransformation auf das LaT/LON Gitter PI = ACOS ( - 1.D0 ) !$OMP PARALLEL DO DO 20 J = 1 , MAXB BREITE ( J ) = SIN (( RLA1 - ( J - 1.D0 ) * ( RLA1 - RLA0 ) / ( MAXB - 1 )) * PI / 18 0.D0 ) CALL PLGNFA ( MNAUF , BREITE ( J ), Z ( 0 , J )) 20 CONTINUE !$OMP END PARALLEL DO ! Avoid possible Pole problem ! IF (RLA0 .EQ. -90.0) BREITE(MAXB)=sin(-89.99*PI/180.d0) ! IF (RLA1 .EQ. 90.0) BREITE(1)=sin(89.99*PI/180.d0) !* Initialisation of fields for FFT and Legendre transformation ! to Gaussian grid and back to phase space X1 =- 1.D0 X2 = 1.D0 CALL GAULEG ( X1 , X2 , GBREITE , WEIGHT , NGJ ) !$OMP PARALLEL DO PRIVATE(M) DO J = 1 , NGJ / 2 CALL PLGNFA ( MNAUF , GBREITE ( J ), P (:, J )) DO M = 0 ,( MNAUF + 3 ) * ( MNAUF + 4 ) / 2 PP ( J , M ) = P ( M , J ) END DO END DO !$OMP END PARALLEL DO ! MPAR(1)=152 FILENAME = 'fort.12' !! read LNSP in SH CALL READSPECTRAL ( FILENAME , LNPMN , MNAUF , 1 , MLEVEL ,( / 152 / ), AK , BK ) CALL SET99 ( WSAVE , IFAX , mauf ) CALL PHGCUT ( LNPMN , PS , WSAVE , IFAX , Z , MNAUF , MNAUF , MAUF , MANF , MAXL , MAXB , 1 ) CALL STATIS ( MAXL , MAXB , 1 , EXP ( PS ), RMS , MW , SIG ) WRITE ( * , '(A,T20,3F12.4)' ) 'STATISTICS PS: ' , RMS , MW , SIG DO J = 1 , NGJ / 2 CALL SET99 ( GWSAVE ( 1 , J ), GIFAX ( 1 , J ), MLAT ( J )) END DO CALL PHGR213 ( LNPMN , HILF , GWSAVE , GIFAX , P , MLAT , MNAUF , NGI , NGJ , 1 ) PSG = HILF CALL GRPH213 ( LNPMN2 , PSG , GWSAVE , GIFAX , PP , WEIGHT , MLAT , MNAUF , NGI , NGJ , 1 ) CALL PHGR213 ( LNPMN2 , HILF , GWSAVE , GIFAX , P , MLAT , MNAUF , NGI , NGJ , 1 ) HILF = exp ( PSG ) - exp ( HILF ) CALL STATIS ( NGI , 1 , 1 , HILF , RMS , MW , SIG ) WRITE ( * , '(A,T20,3F12.4)' ) 'STATISTICS ratio of PS: ' , RMS , MW , SIG PSG = EXP ( PSG ) HILF = PSG CALL STATIS ( NGI , 1 , 1 , HILF , RMS , MW , SIG ) WRITE ( * , '(A,T20,3F12.4)' ) 'STATISTICS PSG: ' , RMS , MW , SIG 111 FILENAME = 'fort.10' !! read u,v in SH CALL READSPECTRAL ( FILENAME , XMN , MNAUF , 2 * MLEVEL , MLEVEL ,( / 131 , 132 / ), AK , BK ) !! Transformieren des Windes auf das Gaussgitter CALL PHGR213 ( XMN , UGVG , GWSAVE , GIFAX , P , MLAT , MNAUF , NGI , NGJ , 2 * MLEVEL ) DO K = 1 , MLEVEL ! North Pole CALL JSPPOLE ( XMN (:, K ), 1 , MNAUF ,. TRUE ., CUA (:,:, K )) CALL JSPPOLE ( XMN (:, MLEVEL + K ), 1 , MNAUF ,. TRUE ., CVA (:,:, K )) ! South Pole CALL JSPPOLE ( XMN (:, K ), - 1 , MNAUF ,. TRUE ., CUA (:, 3 : 4 , K )) CALL JSPPOLE ( XMN (:, MLEVEL + K ), - 1 , MNAUF ,. TRUE ., CVA (:, 3 : 4 , K )) END DO DO K = 1 , 2 * MLEVEL IF ( MSMOOTH . ne . 0 ) CALL SPFILTER ( XMN (:, K ), MNAUF , MSMOOTH ) END DO CALL PHGCUT ( XMN , UV , WSAVE , IFAX , Z , MNAUF , MNAUF , MAUF , MANF , MAXL , MAXB , 2 * MLEVEL ) 112 FILENAME = 'fort.13' !! read DIV in SH CALL READSPECTRAL ( FILENAME , XMN , MNAUF , MLEVEL , MLEVEL ,( / 155 / ), AK , BK ) !! Transformieren der horizontalen Divergenz auf das Gaussgitter CALL PHGR213 ( XMN , DG , GWSAVE , GIFAX , P , MLAT , MNAUF , NGI , NGJ , MLEVEL ) CALL STATIS ( MAXL , MAXB , 1 , DG , RMS , MW , SIG ) WRITE ( * , '(A,T20,3p,3F12.4)' ) 'STATISTICS DG-PS: ' , RMS , MW , SIG !! Berechnung des Gradienten des Logarithmus des Bodendrucks auf dem Gaussgitter CALL PHGRAD ( LNPMN , DPSDL , DPSDM , GWSAVE , GIFAX , P , H , MLAT , MNAUF , NGI , NGJ , 1 ) !! Berechnung der Vertikalgeschwindigkeit auf dem Gaussgitter CALL CONTGL ( HILF , DPSDL , DPSDM , DG , UGVG (:, 1 ), UGVG (:, MLEVEL + 1 ), & GBREITE , ETAG , MLAT , AK , BK , NGI , NGJ , MLEVEL ) ! note that HILF is ps on input and dpsdt*ps on output CALL STATIS ( MAXL , MAXB , 1 , ETAG , RMS , MW , SIG ) WRITE ( * , '(A,T20,3p,3F12.4)' ) 'STATISTICS ETAG-PS: ' , RMS , MW , SIG CALL GRPH213 ( XMN , ETAG , GWSAVE , GIFAX , PP , WEIGHT , MLAT , MNAUF , NGI , NGJ , MLEVEL ) CALL STATIS ( MAXL , MAXB , 1 , ETAG , RMS , MW , SIG ) WRITE ( * , '(A,T20,3p,3F12.4)' ) 'STATISTICS ETAG-PS: ' , RMS , MW , SIG DO K = 1 , MLEVEL IF ( MSMOOTH . ne . 0 ) CALL SPFILTER ( XMN (:, K ), MNAUF , MSMOOTH ) END DO CALL PHGCUT ( XMN , ETA , WSAVE , IFAX , Z , MNAUF , MNAUF , MAUF , MANF , MAXL , MAXB , MLEVEL ) CALL STATIS ( MAXL , MAXB , 1 , ETA , RMS , MW , SIG ) WRITE ( * , '(A,T20,3p,3F12.4)' ) 'STATISTICS ETA-PS: ' , RMS , MW , SIG CALL GRPH213 ( XMN , HILF , GWSAVE , GIFAX , PP , WEIGHT , MLAT , MNAUF , NGI , NGJ , 1 ) CALL STATIS ( MAXL , MAXB , 1 , HILF , RMS , MW , SIG ) WRITE ( * , '(A,T20,3p,3F12.4)' ) 'STATISTICS HILF-PS: ' , RMS , MW , SIG IF ( MSMOOTH . ne . 0 ) CALL SPFILTER ( XMN (:, 1 ), MNAUF , MSMOOTH ) CALL PHGCUT ( XMN , DPSDT , WSAVE , IFAX , Z , MNAUF , MNAUF , MAUF , MANF , MAXL , MAXB , 1 ) CALL STATIS ( MAXL , MAXB , 1 , DPSDT , RMS , MW , SIG ) WRITE ( * , '(A,T20,3F12.4)' ) 'STATISTICS DPSDT: ' , RMS , MW , SIG IF ( MOMEGADIFF . ne . 0 ) THEN !! Berechnung von Omega auf dem Gaussgitter CALL OMEGA ( PSG , DPSDL , DPSDM , DG , UGVG (:, 1 ), UGVG (:, MLEVEL + 1 ), & GBREITE , ETAG , MLAT , AK , BK , NGI , NGJ , MLEVEL ) CALL GRPH213 ( XMN , ETAG , GWSAVE , GIFAX , PP , WEIGHT , MLAT , MNAUF , NGI , NGJ , MLEVEL ) DO K = 1 , MLEVEL IF ( MSMOOTH . ne . 0 ) CALL SPFILTER ( XMN (:, K ), MNAUF , MSMOOTH ) END DO CALL PHGCUT ( XMN , OM , WSAVE , IFAX , Z , MNAUF , MNAUF , MAUF , MANF , MAXL , MAXB , MLEVEL ) END IF ! MOMEGA CALL GRPH213 ( XMN , PSG , GWSAVE , GIFAX , PP , WEIGHT , MLAT , MNAUF , NGI , NGJ , 1 ) CALL STATIS ( MAXL , MAXB , 1 , PSG , RMS , MW , SIG ) WRITE ( * , '(A,T20,3F12.4)' ) 'STATISTICS PSG-PS: ' , RMS , MW , SIG CALL PHGCUT ( XMN , PS , WSAVE , IFAX , Z , MNAUF , MNAUF , MAUF , MANF , MAXL , MAXB , 1 ) CALL STATIS ( MAXL , MAXB , 1 , PS , RMS , MW , SIG ) WRITE ( * , '(A,T20,3F12.4)' ) 'STATISTICS PS: ' , RMS , MW , SIG 114 DEALLOCATE ( HILF , PSG , DPSDL , DPSDM , ETAG , DG , LNPMN ) ! ALLOCATE (UV(MAXL, MAXB, 2*MLEVEL)) ! CALL GRPH213(XMN,UGVG,GWSAVE,GIFAX,PP,WEIGHT,MLAT, ! *MNAUF,NGI,NGJ,2*MLEVEL) ! DO K=1,2*MLEVEL ! IF (MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH) ! END DO ! CALL PHGCUT(XMN,UV,WSAVE,IFAX,Z, ! *MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,2*MLEVEL) DEALLOCATE ( PP , P , UGVG , MLAT , GBREITE , WEIGHT , GWSAVE , XMN ) ! CALL ETAGAUSS(Z,WSAVE ! *,BREITE,UV,ETA,OM,PS, ! *MAUF,MAXB,MAXL,MANF,MNAUF,MLEVEL,MSMOOTH) ELSE !----------------------------------------------------------------- ! READING OF PREPARED METEOROLOGICAL FIELDS ! ! THE FOLLOWING FIELDS ARE EXPECTED: ! ! UNIT 11: T,U,V (REGULAR GRID) ! UNIT 17: Q (REGULAR GRID) ! UNIT 13: D (REGULAR GRID) ! UNIT 12: LNSP (SPHERICAL HARMONICS) ! UNIT 14: SURFACE DATA (REGULAR GRID) ! UNIT 16: FLUX DATA (REGULAR GRID) !------------------------------------------------------------------ ALLOCATE ( MLAT ( MAXB )) MLAT = MAXL ALLOCATE ( Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 , 1 )) ALLOCATE ( DPSDL ( MAXL , MAXB ), DPSDM ( MAXL , MAXB )) ALLOCATE ( UV ( MAXL , MAXB , 2 * MLEVEL ), DIV ( MAXL , MAXB , MLEVEL )) !------------------------------------------------------------------ !! READING OF SURFACE PRESSURE !------------------------------------------------------------------ FILENAME = 'fort.12' CALL READSPECTRAL ( FILENAME , LNPS , MNAUF , 1 , MLEVEL ,( / 152 / ), AK , BK ) !------------------------------------------------------------------ !! READING OF U,V !------------------------------------------------------------------ ! OPENING OF UNBLOCKED GRIB FILE FILENAME = 'fort.10' CALL READLATLON ( FILENAME , UV , MAXL , MAXB , 2 * MLEVEL ,( / 131 , 132 / )) PI = ACOS ( - 1.D0 ) DO J = 1 , MAXB BREITE ( J ) = SIN (( RLA1 - ( J - 1.D0 ) * ( RLA1 - RLA0 ) / ( MAXB - 1 )) * PI / 18 0.D0 ) END DO ! Avoid possible Pole problem ! IF (RLA0 .EQ. -90.0) BREITE(MAXB)=sin(-89.99*PI/180.d0) ! IF (RLA1 .EQ. 90.0) BREITE(1)=sin(89.99*PI/180.d0) DO K = 1 , 2 * MLEVEL DO J = 1 , MAXB COSB = SQRT ( 1.0 - ( BREITE ( J )) * ( BREITE ( J ))) IF ( RLA0 . EQ . - 9 0.0 . AND . J . EQ . MAXB . OR . & RLA1 . EQ . 9 0.0 . AND . J . EQ . 1 ) THEN UV (:, J , K ) = UV (:, J , K ) / 1.D6 ELSE UV (:, J , K ) = UV (:, J , K ) * COSB END IF END DO END DO !------------------------------------------------------------------ !! READING OF LNSP on grid !------------------------------------------------------------------ ! For debugging only ! FILENAME='LNSPG_G.20060330.600' ! INQUIRE(FILE=FILENAME,EXIST=EX) ! CALL READLATLON(FILENAME,QA, ! *MAXL,MAXB,1,1,(/152/)) !------------------------------------------------------------------ !! READING OF DIVERGENCE !------------------------------------------------------------------ IF ( META . EQ . 0 . OR . METADIFF . EQ . 1 ) THEN FILENAME = 'fort.13' CALL READLATLON ( FILENAME , DIV , MAXL , MAXB , MLEVEL ,( / 155 / )) END IF !------------------------------------------------------------------ ! ! Calculation of etapoint --> total time derivative of ! ECMWF vertical coordinate eta multiplied by the derivative ! of pressure with respect to eta: ! \\frac{\\mathrm{d}\\eta}{\\mathrm{d}t}\\frac{\\partial p}{\\partial \\eta} !------------------------------------------------------------------ !* Initialisieren Legendretransformation auf das LaT/LON Gitter !! Without Gaussian grid calculation Legendre Polynomials are calculated !! only for one latitude to save space DO J = 1 , MAXB CALL PLGNFA ( MNAUF , BREITE ( J ), Z ( 0 , 1 )) CALL PHGCUT ( LNPS , PS (:, J , 1 ), WSAVE , IFAX , Z , MNAUF , MNAUF , MAUF , MANF , MAXL , 1 , 1 ) IF ( META . EQ . 0 . OR . METADIFF . EQ . 1 ) THEN CALL PHGRACUT ( LNPS , DPSDL (:, J ), DPSDM (:, J ), WSAVE , IFAX , Z , H , MAUF , & MNAUF , MAXL , 1 , MANF , 1 ) END IF END DO PS = EXP ( PS ) ! For debugging only CALL STATIS ( MAXL , MAXB , 1 , PS (:,:, 1 ), RMS , MW , SIG ) WRITE ( * , '(A,T20,3F12.4)' ) 'STATISTICS: ' , RMS , MW , SIG IF ( MOMEGADIFF . ne . 0 ) THEN CALL OMEGA ( PS , DPSDL , DPSDM , DIV , UV (:,:, 1 ), UV (:,:, MLEVEL + 1 ), & BREITE , OM , MLAT , AK , BK , MAXL * MAXB , MAXB , MLEVEL ) END IF IF ( META . EQ . 0 . OR . METADIFF . ne . 0 ) THEN DPSDT = PS CALL CONTGL ( DPSDT , DPSDL , DPSDM , DIV , UV (:,:, 1 ), UV (:,:, MLEVEL + 1 ), & BREITE , ETA , MLAT , AK , BK , MAXL * MAXB , MAXB , MLEVEL ) END IF END IF ! MGAUSS !! CREATE FILE VERTICAL.EC NEEDED BY POP MODEL OPEN ( 21 , FILE = 'VERTICAL.EC' ) WRITE ( 21 , '(A)' ) WRITE ( 21 , '(A)' ) 'VERTICAL DISCRETIZATION OF POP MODEL' WRITE ( 21 , '(A)' ) write ( 21 , '(i3,a)' ) MLEVEL , ' number of layers' WRITE ( 21 , '(A)' ) WRITE ( 21 , '(A)' ) '* A(NLEV+1)' WRITE ( 21 , '(A)' ) DO 205 I = 1 , MLEVEL + 1 205 WRITE ( 21 , '(F18.12)' ) AK ( I ) WRITE ( 21 , '(A)' ) WRITE ( 21 , '(A)' ) '* B(NLEV+1)' WRITE ( 21 , '(A)' ) DO 210 I = 1 , MLEVEL + 1 210 WRITE ( 21 , '(F18.12)' ) BK ( I ) CLOSE ( 21 ) !------------------------------------------------------------------ ! READING OF OMEGA !------------------------------------------------------------------ IF ( MOMEGA . NE . 0 ) THEN ALLOCATE ( OMR ( MAXL , MAXB , MLEVEL )) FILENAME = 'fort.19' CALL READLATLON ( FILENAME , OMR , MAXL , MAXB , MLEVEL ,( / 135 / )) IF ( MOMEGADIFF . NE . 0 ) THEN DO K = 1 , MLEVEL CALL STATIS ( MAXL , MAXB , 1 , ETA (:,:, K ), RMS , MW , SIG ) WRITE ( * , '(A12,I3,3F12.4)' ) ' ETA: ' , K , RMS , MW , SIG CALL STATIS ( MAXL , MAXB , 1 , OMR (:,:, K ), RMS , MW , SIG ) WRITE ( * , '(A12,I3,3F12.4)' ) ' OMEGA: ' , K , RMS , MW , SIG CALL STATIS ( MAXL , MAXB , 1 , OM (:,:, K ) - OMR (:,:, K ), RMS , MW , SIG ) WRITE ( * , '(A12,I3,3F12.4)' ) 'OMEGA DIFF: ' , K , RMS , MW , SIG END DO END IF END IF !------------------------------------------------------------------ ! READING OF ETA !------------------------------------------------------------------ IF ( META . NE . 0 ) THEN ALLOCATE ( ETAR ( MAXL , MAXB , MLEVEL )) P00 = 10132 5. FILENAME = 'fort.21' CALL READLATLON ( FILENAME , ETAR , MAXL , MAXB , MLEVEL ,( / 77 / )) IF ( MDPDETA . EQ . 1 ) THEN DO K = 1 , MLEVEL DAK = AK ( K + 1 ) - AK ( K ) DBK = BK ( K + 1 ) - BK ( K ) DO J = 1 , MAXB DO I = 1 , MAXL ETAR ( I , J , K ) = 2 * ETAR ( I , J , K ) * PS ( I , J , 1 ) * ( DAK / PS ( I , J , 1 ) + DBK ) / & ( DAK / P00 + DBK ) IF ( K . GT . 1 ) ETAR ( I , J , K ) = ETAR ( I , J , K ) - ETAR ( I , J , K - 1 ) END DO END DO END DO END IF IF ( METADIFF . NE . 0 ) THEN DO K = 1 , MLEVEL CALL STATIS ( MAXL , MAXB , 1 , ETA (:,:, K ), RMS , MW , SIG ) WRITE ( * , '(A12,I3,3F12.4)' ) ' ETA: ' , K , RMS , MW , SIG CALL STATIS ( MAXL , MAXB , 1 , ETAR (:,:, K ), RMS , MW , SIG ) WRITE ( * , '(A12,I3,3F12.4)' ) ' ETAR: ' , K , RMS , MW , SIG CALL STATIS ( MAXL , MAXB , 1 , ETA (:,:, K ) - ETAR (:,:, K ), RMS , MW , SIG ) WRITE ( * , '(A12,I3,3F12.4)' ) 'ETA DIFF: ' , K , RMS , MW , SIG END DO DO K = 1 , MLEVEL WRITE ( * , '(I3,2F12.4)' ) K , ETA ( 1 , MAXB / 2 , K ), ETAR ( 1 , MAXB / 2 , K ) END DO ELSE ETA = ETAR END IF END IF ALLOCATE ( T ( MAXL , MAXB , MLEVEL )) ALLOCATE ( QA ( MAXL , MAXB , MLEVEL )) !------------------------------------------------------------------ !! READING OF T !------------------------------------------------------------------ ! OPENING OF UNBLOCKED GRIB FILE FILENAME = 'fort.11' CALL READLATLON ( FILENAME , T , MAXL , MAXB , MLEVEL ,( / 130 / )) !------------------------------------------------------------------ !! READING OF SPECIFIC HUMIDITY !------------------------------------------------------------------ FILENAME = 'fort.17' CALL READLATLON ( FILENAME , QA , MAXL , MAXB , MLEVEL ,( / 133 / )) !------------------------------------------------------------------ ! TEST READING OF UV from MARS (debug only) !------------------------------------------------------------------ ! FILENAME='fort.22' ! CALL READLATLON(FILENAME,UV2,MAXL,MAXB,2*MLEVEL,2,(/131,132/)) !------------------------------------------------------------------ !! WRITE MODEL LEVEL DATA TO fort.15 !------------------------------------------------------------------ !! Calculation of etadot in CONTGL needed scaled winds (ucosphi,vcosphi) !! Now we are transforming back to the usual winds. DO K = 1 , MLEVEL DO J = 2 , MAXB - 1 COSB = SQRT ( 1.0 - ( BREITE ( J )) * ( BREITE ( J ))) UV (:, J , K ) = UV (:, J , K ) / COSB UV (:, J , MLEVEL + K ) = UV (:, J , MLEVEL + K ) / COSB END DO ! special treatment for poles, if necessary. DO J = 1 , MAXB , MAXB - 1 COSB = SQRT ( 1.0 - ( BREITE ( J )) * ( BREITE ( J ))) IF ( 1.0 - BREITE ( J ) * BREITE ( J ) . GT . 0 . OR . MGAUSS . NE . 1 ) THEN IF ( RLA0 . EQ . - 9 0.0 . AND . J . EQ . MAXB . OR . & RLA1 . EQ . 9 0.0 . AND . J . EQ . 1 ) THEN UV (:, J , K ) = UV (:, J , K ) * 1.D6 UV (:, J , MLEVEL + K ) = UV (:, J , MLEVEL + K ) * 1.D6 ELSE UV (:, J , K ) = UV (:, J , K ) / COSB UV (:, J , MLEVEL + K ) = UV (:, J , MLEVEL + K ) / COSB END IF ELSE HILFUV ( 5 : MAXL ,:) = 0. HILFUV ( 1 : 2 ,:) = 0. IF ( J . EQ . MAXB ) THEN ! Suedpol HILFUV ( 3 : 4 , 1 ) = CUA (:, 4 , K ) HILFUV ( 3 : 4 , 2 ) = CVA (:, 4 , K ) ELSE ! Nordpol HILFUV ( 3 : 4 , 1 ) = CUA (:, 2 , K ) HILFUV ( 3 : 4 , 2 ) = CVA (:, 2 , K ) END IF CALL RFOURTR ( HILFUV (:, 1 ), WSAVE , IFAX , MAXL / 2 - 1 , MAXL , - 1 ) DO I = 0 , MAXL - 1 IF ( MANF + I . LE . MAXL ) THEN UV ( I + 1 , J , K ) = HILFUV ( MANF + I , 1 ) ELSE UV ( I + 1 , J , K ) = HILFUV ( MANF - MAXL + I , 1 ) END IF END DO CALL RFOURTR ( HILFUV (:, 2 ), WSAVE , IFAX , MAXL / 2 - 1 , MAXL , - 1 ) DO I = 0 , MAXL - 1 IF ( MANF + I . LE . MAXL ) THEN UV ( I + 1 , J , MLEVEL + K ) = HILFUV ( MANF + I , 2 ) ELSE UV ( I + 1 , J , MLEVEL + K ) = HILFUV ( MANF - MAXL + I , 2 ) END IF END DO end if END DO END DO ! open output file call grib_open_file ( LUNIT , 'fort.15' , 'w' ) ! we use temperature on lat/lon on model levels as template for model level data LUNIT2 = 0 CALL GRIB_OPEN_FILE ( LUNIT2 , 'fort.11' , 'R' ) CALL GRIB_NEW_FROM_FILE ( LUNIT2 , IGRIB ( 1 ), IRET ) CALL GRIB_CLOSE_FILE ( LUNIT2 ) CALL WRITELATLON & ( LUNIT , IGRIB ( 1 ), OGRIB , UV (:,:, 1 ), MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 131 / )) CALL WRITELATLON & ( LUNIT , IGRIB ( 1 ), OGRIB , UV (:,:, MLEVEL + 1 ), MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 132 / )) IF ( MDPDETA . ne . 1 . AND . MGAUSS . EQ . 0 . and . META . eq . 1 ) THEN CALL WRITELATLON & ( LUNIT , IGRIB ( 1 ), OGRIB , ETA , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 77 / )) ELSE CALL WRITELATLON & ( LUNIT , IGRIB ( 1 ), OGRIB , ETA , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / METAPAR / )) END IF CALL WRITELATLON ( LUNIT , IGRIB ( 1 ), OGRIB , T , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 130 / )) CALL WRITELATLON ( LUNIT , IGRIB ( 1 ), OGRIB , PS , MAXL , MAXB , 1 , '1' , 1 ,( / 134 / )) CALL GRIB_SET ( IGRIB ( 1 ), \"levelType\" , \"ml\" ) CALL GRIB_SET ( IGRIB ( 1 ), \"typeOfLevel\" , \"hybrid\" ) CALL WRITELATLON ( LUNIT , IGRIB ( 1 ), OGRIB , QA , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 133 / )) IF ( MOMEGA . EQ . 1 ) THEN CALL GRIB_OPEN_FILE ( LUNIT2 , 'fort.25' , 'w' ) CALL WRITELATLON & ( LUNIT2 , IGRIB ( 1 ), OGRIB , OMR , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 135 / )) IF ( MOMEGADIFF . EQ . 1 ) THEN CALL WRITELATLON ( LUNIT2 , IGRIB ( 1 ), OGRIB , DPSDT , MAXL , MAXB , 1 , '1' , 1 ,( / 158 / )) OM = OM - OMR CALL WRITELATLON & ( LUNIT2 , IGRIB ( 1 ), OGRIB , OM , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 001 / )) CALL GRIB_CLOSE_FILE ( LUNIT2 ) END IF END IF IF ( META . EQ . 1 . AND . METADIFF . EQ . 1 ) THEN CALL GRIB_OPEN_FILE ( LUNIT2 , 'fort.26' , 'w' ) CALL WRITELATLON & ( LUNIT2 , IGRIB ( 1 ), OGRIB , ETAR , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 135 / )) ! IF (MOMEGADIFF .EQ. 1) THEN CALL WRITELATLON ( LUNIT2 , IGRIB ( 1 ), OGRIB , DPSDT , MAXL , MAXB , 1 , '1' , 1 ,( / 158 / )) OM = ETA - ETAR CALL WRITELATLON & ( LUNIT2 , IGRIB ( 1 ), OGRIB , OM , MAXL , MAXB , MLEVEL , MLEVELIST , 1 ,( / 001 / )) CALL GRIB_CLOSE_FILE ( LUNIT2 ) ! END IF END IF CALL GRIB_CLOSE_FILE ( LUNIT ) 2000 STOP 'SUCCESSFULLY FINISHED calc_etadot: CONGRATULATIONS' 3000 STOP 'ROUTINE calc_etadot: ERROR' 9999 stop 'ROUTINE calc_etadot: ERROR' END !------------------------------------------------------------------ INTEGER FUNCTION IA ( FIELD1 , NI , NJ , NK , G ) !------------------------------------------------------------------ !! Calculate something that is roughly log10( maxval(field1)/g ) [PS] !------------------------------------------------------------------ IMPLICIT NONE INTEGER :: I , J , K INTEGER , INTENT ( IN ) :: NI , NJ , NK REAL , INTENT ( IN ) :: FIELD1 ( NI , NJ , NK ) REAL , INTENT ( IN ) :: G REAL :: RMIN , RMAX , XMAX , A , A1 , A2 RMAX = FIELD1 ( 1 , 1 , 1 ) RMIN = FIELD1 ( 1 , 1 , 1 ) DO 100 K = 1 , NK DO 100 J = 1 , NJ DO 100 I = 1 , NI IF ( FIELD1 ( I , J , K ) . GT . RMAX ) RMAX = FIELD1 ( I , J , K ) IF ( FIELD1 ( I , J , K ) . LT . RMIN ) RMIN = FIELD1 ( I , J , K ) 100 CONTINUE IF ( ABS ( RMIN ) . GT . RMAX . OR . ABS ( RMIN ) . EQ . RMAX ) THEN XMAX = ABS ( RMIN ) ELSE XMAX = RMAX END IF IF ( XMAX . EQ . 0 ) THEN IA = 0 RETURN END IF A1 = LOG10 ( ( G / 1 0.d0 ) / XMAX ) A2 = LOG10 ( G / XMAX ) IF ( A1 . gt . A2 ) THEN A = A2 ELSE A = A1 END IF IF ( A . GT . 0 ) IA = INT ( A ) IF ( A . LT . 0 ) IA = INT ( A - 1.0 ) RETURN END SUBROUTINE STATIS ( NI , NJ , NK , PHI , RMS , MW , SIG ) !------------------------------------------------------------------ !! calculate mean, rms, stdev !------------------------------------------------------------------ IMPLICIT REAL ( A - H , O - Z ) REAL PHI ( NI , NJ , NK ), SIG , MW , RMS , P N = NI * NJ * NK RMS = 0. MW = 0. ! 10.86 sinstead of 11.04 sec DO 10 K = 1 , NK DO 10 J = 1 , NJ DO 10 I = 1 , NI P = PHI ( I , J , K ) RMS = RMS + P * P MW = MW + P 10 CONTINUE RMS = SQRT ( RMS / N ) MW = MW / N IF ( RMS * RMS - MW * MW . LT . 0. ) THEN SIG = 0.0 ELSE SIG = SQRT ( RMS * RMS - MW * MW ) END IF RETURN END","tags":"","loc":"sourcefile/calc_etadot.f90.html","title":"calc_etadot.f90 – Flex_extract: Calculation of etadot"},{"text":"Files dependent on this one sourcefile~~rwgrib2.f90~~AfferentGraph sourcefile~rwgrib2.f90 rwgrib2.f90 sourcefile~calc_etadot.f90 calc_etadot.f90 sourcefile~calc_etadot.f90->sourcefile~rwgrib2.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\n is dependent upon another if the latter must be compiled before the former\n can be. Contents Modules RWGRIB2 Source Code rwgrib2.f90 Source Code MODULE RWGRIB2 CONTAINS SUBROUTINE READLATLON ( FILENAME , FELD , MAXL , MAXB , MLEVEL , MPAR ) !! Read a field from GRIB file on lat-lon grid USE GRIB_API IMPLICIT NONE integer :: ifile integer :: iret integer :: n , mk , parid , nm integer :: i , k integer , dimension (:), allocatable :: igrib integer :: numberOfPointsAlongAParallel integer :: numberOfPointsAlongAMeridian real , dimension (:), allocatable :: values integer :: numberOfValues real , dimension ( maxl , maxb , mlevel ) :: feld integer :: maxl , maxb , mlevel , mstride , mpar (:), irest , div , level integer :: l ( size ( mpar )) character * ( * ) :: filename feld = 0. call grib_open_file ( ifile , TRIM ( FILENAME ), 'r' ) ! count the messages in the file call grib_count_in_file ( ifile , n ) allocate ( igrib ( n )) igrib =- 1 ! Load the messages from the file. DO i = 1 , n call grib_new_from_file ( ifile , igrib ( i ), iret ) END DO ! we can close the file call grib_close_file ( ifile ) nm = size ( mpar ) div = mlevel / nm l = 0 ! Loop on all the messages in memory iloop : DO i = 1 , n ! write(*,*) 'processing message number ',i ! get as a integer call grib_get ( igrib ( i ), 'numberOfPointsAlongAParallel' , & numberOfPointsAlongAParallel ) ! get as a integer call grib_get ( igrib ( i ), 'numberOfPointsAlongAMeridian' , & numberOfPointsAlongAMeridian ) call grib_get ( igrib ( i ), 'numberOfVerticalCoordinateValues' , mk ) call grib_get_size ( igrib ( i ), 'values' , numberOfValues ) ! write(*,*) 'numberOfValues=',numberOfValues allocate ( values ( numberOfValues ), stat = iret ) ! get data values call grib_get ( igrib ( i ), 'values' , values ) call grib_get ( igrib ( i ), 'paramId' , parid ) call grib_get ( igrib ( i ), 'level' , level ) kloop : do k = 1 , nm if ( parid . eq . mpar ( k )) then ! l(k)=l(k)+1 feld (:,:,( k - 1 ) * div + level ) = reshape ( values ,( / maxl , maxb / )) ! print*,(k-1)*div+l(k),parid exit kloop end if end do kloop if ( k . gt . nm . and . parid . ne . mpar ( nm )) then write ( * , * ) k , nm , parid , mpar ( nm ) write ( * , * ) 'ERROR readlatlon: parameter ' , parid , 'is not' , mpar stop end if ! print*,i END DO iloop !! write(*,*) 'readlatlon: ',i-1,' records read' DO i = 1 , n call grib_release ( igrib ( i )) END DO if ( allocated ( values )) deallocate ( values ) deallocate ( igrib ) END SUBROUTINE READLATLON SUBROUTINE WRITELATLON ( iunit , igrib , ogrib , FELD , MAXL , MAXB , MLEVEL ,& MLEVELIST , MSTRIDE , MPAR ) !! write a field on lat-lon grid to GRIB file USE GRIB_API IMPLICIT NONE INTEGER IFIELD , MLEVEL , MNAUF , I , J , K , L , MSTRIDE , IERR , JOUT INTEGER MPAR ( MSTRIDE ), MAXL , MAXB , LEVMIN , LEVMAX INTEGER IUNIT , igrib , ogrib REAL ZSEC4 ( MAXL * MAXB ) REAL FELD ( MAXL , MAXB , MLEVEL ) CHARACTER * ( * ) MLEVELIST INTEGER ILEVEL ( MLEVEL ), MLINDEX ( MLEVEL + 1 ), LLEN ! parse MLEVELIST LLEN = len ( trim ( MLEVELIST )) if ( index ( MLEVELIST , 'to' ) . ne . 0 . or . index ( MLEVELIST , 'TO' ) . ne . 0 ) THEN i = index ( MLEVELIST , '/' ) read ( MLEVELIST ( 1 : i - 1 ), * ) LEVMIN i = index ( MLEVELIST , '/' ,. true .) read ( MLEVELIST ( i + 1 : LLEN ), * ) LEVMAX l = 0 do i = LEVMIN , LEVMAX l = l + 1 ILEVEL ( l ) = i end do else l = 1 MLINDEX ( 1 ) = 0 do i = 1 , LLEN if ( MLEVELIST ( i : i ) . eq . '/' ) THEN l = l + 1 MLINDEX ( l ) = i end if end do MLINDEX ( l + 1 ) = LLEN + 1 do i = 1 , l read ( MLEVELIST ( MLINDEX ( i ) + 1 : MLINDEX ( i + 1 ) - 1 ), * ) ILEVEL ( i ) end do end if DO k = 1 , l call grib_set ( igrib , \"level\" , ILEVEL ( k )) DO j = 1 , MSTRIDE call grib_set ( igrib , \"paramId\" , MPAR ( j )) ! if (MPAR(j) .eq. 87) then ! call grib_set(igrib,\"shortName\",\"etadot\") ! call grib_set(igrib,\"units\",\"Pa,s**-1\") ! end if ! if (MPAR(j) .eq. 77) then ! call grib_set(igrib,\"shortName\",\"etadot\") ! call grib_set(igrib,\"units\",\"s**-1\") ! end if if ( l . ne . mlevel ) then zsec4 ( 1 : maxl * maxb ) = RESHAPE ( FELD (:,:, ILEVEL ( k )),( / maxl * maxb / )) else zsec4 ( 1 : maxl * maxb ) = RESHAPE ( FELD (:,:, k ),( / maxl * maxb / )) end if call grib_set ( igrib , \"values\" , zsec4 ) call grib_write ( igrib , iunit ) END DO END DO END SUBROUTINE WRITELATLON SUBROUTINE READSPECTRAL ( FILENAME , CXMN , MNAUF , MLEVEL , MAXLEV , MPAR , A , B ) !! read a GRIB file in spherical harmonics USE GRIB_API IMPLICIT NONE integer :: ifile integer :: iret integer :: n , mk , div , nm , k integer :: i , j , parid integer , dimension (:), allocatable :: igrib real , dimension (:), allocatable :: values integer :: numberOfValues , maxlev REAL :: A ( MAXLEV + 1 ), B ( MAXLEV + 1 ), pv ( 2 * MAXLEV + 2 ) REAL :: CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , MLEVEL ) integer :: maxl , maxb , mlevel , mstride , mpar (:), mnauf , ioffset , ipar , ilev , l ( size ( mpar )) character * ( * ) :: filename call grib_open_file ( ifile , TRIM ( FILENAME ), 'r' ) ! count the messages in the file call grib_count_in_file ( ifile , n ) allocate ( igrib ( n )) igrib =- 1 ! Load the messages from the file. DO i = 1 , n call grib_new_from_file ( ifile , igrib ( i ), iret ) END DO ! we can close the file call grib_close_file ( ifile ) l = 0 ! Loop on all the messages in memory iloop : DO i = 1 , n ! write(*,*) 'processing message number ',i ! get as a integer call grib_get ( igrib ( i ), 'pentagonalResolutionParameterJ' , j ) call grib_get_size ( igrib ( i ), 'values' , numberOfValues ) ! write(*,*) 'numberOfValues=',numberOfValues call grib_get ( igrib ( i ), 'numberOfVerticalCoordinateValues' , mk ) call grib_get ( igrib ( i ), 'level' , ilev ) call grib_get ( igrib ( i ), 'pv' , pv ) allocate ( values ( numberOfValues ), stat = iret ) ! get data values call grib_get ( igrib ( i ), 'values' , values ) ! IOFFSET=mod(i-1,MSTRIDE)*(mk/2-1) ! CXMN(:,IOFFSET+ilev)=values(1:(MNAUF+1)*(MNAUF+2)) call grib_get ( igrib ( i ), 'paramId' , parid ) nm = size ( mpar ) div = mlevel / nm kloop : do k = 1 , nm if ( parid . eq . mpar ( k )) then l ( k ) = l ( k ) + 1 cxmn (:,( k - 1 ) * div + l ( k )) = values ( 1 :( MNAUF + 1 ) * ( MNAUF + 2 )) ! print*,(k-1)*div+l(k),parid exit kloop end if end do kloop if ( k . gt . nm . and . parid . ne . mpar ( nm )) then write ( * , * ) k , nm , parid , mpar ( nm ) write ( * , * ) 'ERROR readspectral: parameter ' , parid , 'is not' , mpar stop end if ! print*,i END DO iloop !! write(*,*) 'readspectral: ',i-1,' records read' DO i = 1 , n call grib_release ( igrib ( i )) END DO deallocate ( values ) deallocate ( igrib ) A = pv ( 1 : 1 + MAXLEV ) B = pv ( 2 + MAXLEV : 2 * MAXLEV + 2 ) END SUBROUTINE READSPECTRAL END MODULE RWGRIB2","tags":"","loc":"sourcefile/rwgrib2.f90.html","title":"rwgrib2.f90 – Flex_extract: Calculation of etadot"},{"text":"This file depends on sourcefile~~grphreal.f90~~EfferentGraph sourcefile~grphreal.f90 grphreal.f90 sourcefile~phgrreal.f90 phgrreal.f90 sourcefile~grphreal.f90->sourcefile~phgrreal.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\n is dependent upon another if the latter must be compiled before the former\n can be. Files dependent on this one sourcefile~~grphreal.f90~~AfferentGraph sourcefile~grphreal.f90 grphreal.f90 sourcefile~calc_etadot.f90 calc_etadot.f90 sourcefile~calc_etadot.f90->sourcefile~grphreal.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\n is dependent upon another if the latter must be compiled before the former\n can be. Contents Modules GRTOPH Source Code grphreal.f90 Source Code MODULE GRTOPH USE PHTOGR CONTAINS SUBROUTINE GRPH213 ( CXMN , FELD , WSAVE , IFAX , Z , W , MLAT , MNAUF , MAXL , MAXB , MLEVEL ) !! WRONG>>> DIE ROUTINE F]HRT EINE TRANSFORMATION EINER !! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN !! RAUM AUF KUGELKOORDINATEN DURCH ! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE ! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF ! CXM = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld ! FELD = FELD DER METEOROLOGISCHEN VARIABLEN ! WSAVE = Working Array fuer Fouriertransformation ! Z = LEGENDREFUNKTIONSWERTE ! ! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN ! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN ! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN ! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN IMPLICIT REAL ( A - H , O - Z ) ! Anzahl der Gitterpunkte pro Breitenkreis des reduzierten ! Gauss'schen Gitters INTEGER MLAT ( MAXB ), ISIZE , IFAX ( 10 , MAXB ) ! FELD DER LEGENDREPOLYNOME FUER EINE BREITE REAL Z ( MAXB / 2 , 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 ) ! LOGICAL*1 USED(((216*217)/2+1)*160) DIMENSION CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , MLEVEL ) REAL FELD ( MAXL , MLEVEL ) DIMENSION WSAVE ( 8 * MAXB + 15 , MAXB / 2 ) REAL W ( MAXB ) DIMENSION IND ( MAXB ) IND ( 1 ) = 0 DO 6 J = 2 , MAXB / 2 IND ( j ) = IND ( J - 1 ) + MLAT ( J - 1 ) 6 CONTINUE !$OMP PARALLEL DO SCHEDULE(DYNAMIC) DO 16 L = 1 , MLEVEL CALL GRPHSUB ( L , IND , CXMN , FELD , WSAVE , IFAX , Z , W , MLAT , MNAUF , MAXL , MAXB , MLEVEL ) 16 CONTINUE !$omp end parallel do RETURN END SUBROUTINE GRPH213 SUBROUTINE GRPHSUB ( L , IND , CXMN , FELD , WSAVE , IFAX , Z , W , MLAT , MNAUF , MAXL , MAXB , MLEVEL ) !! DIE ROUTINE F]HRT EINE TRANSFORMATION EINER !! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN !! RAUM AUF KUGELKOORDINATEN DURCH ! ! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE ! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF ! CXM = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld ! FELD = FELD DER METEOROLOGISCHEN VARIABLEN ! WSAVE = Working Array fuer Fouriertransformation ! Z = LEGENDREFUNKTIONSWERTE ! ! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN ! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN ! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN ! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN IMPLICIT REAL ( A - H , O - Z ) ! FELD DER FOURIERKOEFFIZIENTEN REAL CXMS ( 4 * ( MNAUF + 1 )) REAL CXMA ( 4 * ( MNAUF + 1 )) REAL , ALLOCATABLE :: CXM (:,:) ! Anzahl der Gitterpunkte pro Breitenkreis des reduzierten ! Gauss'schen Gitters INTEGER MLAT ( MAXB ), ISIZE ! FELD DER LEGENDREPOLYNOME FUER EINE BREITE REAL Z ( MAXB / 2 , 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 ) ! LOGICAL*1 USED(((216*217)/2+1)*160) REAL CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , MLEVEL ) REAL FELD ( MAXL , MLEVEL ) REAL WSAVE ( 8 * MAXB + 15 , MAXB / 2 ) INTEGER IFAX ( 10 , MAXB ) REAL W ( MAXB ) INTEGER IND ( MAXB ) ALLOCATE ( CXM ( 4 * MAXB , MAXB )) DO 5 J = 1 , MAXB / 2 CXMS ( 1 : MLAT ( J )) = FELD ( IND ( J ) + 1 : IND ( J ) + MLAT ( J ), L ) CALL RFOUFTR ( CXMS , WSAVE ( 1 , J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) CXMA ( 1 : MLAT ( J )) = FELD ( MAXL - IND ( J ) - MLAT ( J ) + 1 : MAXL - IND ( J ), L ) CALL RFOUFTR ( CXMA , WSAVE ( 1 , J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) DO 4 I = 1 , 2 * ( MNAUF + 1 ) CXM ( I , J ) = CXMS ( I ) + CXMA ( I ) CXM ( I , MAXB + 1 - J ) = CXMS ( I ) - CXMA ( I ) 4 CONTINUE 5 CONTINUE CALL LGTR213 ( CXMN ( 0 , L ), CXM , Z , W , MLAT , MNAUF , MAXB ) DEALLOCATE ( CXM ) RETURN END SUBROUTINE GRPHSUB ! SUBROUTINE LGTR213 ( CXMN , CXM , Z , W , MLAT , MNAUF , MAXB ) !! DIESE ROUTINE BERECHNET DIE KFFKs CXMN IMPLICIT REAL ( A - H , O - Z ) INTEGER MLAT ( MAXB ) DIMENSION CXM ( 0 : 4 * MAXB - 1 , MAXB ) DIMENSION CXMN ( 0 : 2 * ((( MNAUF + 1 ) * MNAUF ) / 2 + MNAUF ) + 1 ) REAL * 8 Z ( MAXB / 2 , 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 ) REAL * 8 W ( MAXB ), CR , CI , HILF LOGICAL EVEN LL = 0 LLP = 0 DO 1 I = 0 , MNAUF KM = 0 9 KM = KM + 1 IF ( MLAT ( KM ) . LE . 2 * I ) THEN GOTO 9 END IF DO 2 J = I , MNAUF CR = 0 CI = 0 EVEN = MOD ( I + J , 2 ) . EQ . 0 IF ( EVEN ) THEN DO 3 K = KM , MAXB / 2 HILF = W ( K ) * Z ( K , LLP ) CR = CR + CXM ( 2 * I , K ) * HILF CI = CI + CXM ( 2 * I + 1 , K ) * HILF 3 CONTINUE ELSE DO 4 K = KM , MAXB / 2 HILF = W ( K ) * Z ( K , LLP ) CR = CR + CXM ( 2 * I , MAXB + 1 - K ) * HILF CI = CI + CXM ( 2 * I + 1 , MAXB + 1 - K ) * HILF 4 CONTINUE END IF 5 CXMN ( 2 * LL ) = CR CXMN ( 2 * LL + 1 ) = CI LL = LL + 1 LLP = LLP + 1 2 CONTINUE LLP = LLP + 2 1 CONTINUE RETURN END SUBROUTINE LGTR213 SUBROUTINE RFOUFTR ( CXM , TRIGS , IFAX , MNAUF , MAXL , ISIGN ) ! ! BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS IMPLICIT REAL ( A - H , O - Z ) DIMENSION CXM ( 0 : 2 * MAXL - 1 ) DIMENSION FELD ( MAXL ), TRIGS ( 2 * MAXL ) DIMENSION WSAVE ( MAXAUF ) INTEGER IFAX ( 10 ) ! NORMIERUNG... WSAVE ( 1 ) = CXM ( MAXL - 1 ) CXM ( 1 : MAXL ) = CXM ( 0 : MAXL - 1 ) / 2 CXM ( 0 ) = WSAVE ( 1 ) / 2 ! CALL CFFTF(MAXL,CXM,WSAVE) CALL FFT99 ( CXM , WSAVE , TRIGS , IFAX , 1 , 1 , MAXL , 1 , - 1 ) RETURN END SUBROUTINE RFOUFTR END MODULE GRTOPH","tags":"","loc":"sourcefile/grphreal.f90.html","title":"grphreal.f90 – Flex_extract: Calculation of etadot"},{"text":"Files dependent on this one sourcefile~~phgrreal.f90~~AfferentGraph sourcefile~phgrreal.f90 phgrreal.f90 sourcefile~calc_etadot.f90 calc_etadot.f90 sourcefile~calc_etadot.f90->sourcefile~phgrreal.f90 sourcefile~ftrafo.f90 ftrafo.f90 sourcefile~calc_etadot.f90->sourcefile~ftrafo.f90 sourcefile~grphreal.f90 grphreal.f90 sourcefile~calc_etadot.f90->sourcefile~grphreal.f90 sourcefile~ftrafo.f90->sourcefile~phgrreal.f90 sourcefile~grphreal.f90->sourcefile~phgrreal.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\n is dependent upon another if the latter must be compiled before the former\n can be. Contents Modules PHTOGR Source Code phgrreal.f90 Source Code MODULE PHTOGR INTEGER , PARAMETER :: MAXAUF = 36000 CONTAINS SUBROUTINE PHGR213 ( CXMN , FELD , WSAVE , IFAX , Z , MLAT , MNAUF , MAXL , MAXB , MLEVEL ) !! DIE ROUTINE F]HRT EINE TRANSFORMATION EINER !! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN !! RAUM AUF DAS REDUZIERTE GAUSS'SCHE GITTER DURCH ! ! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE ! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF ! FELD = FELD DER METEOROLOGISCHEN VARIABLEN ! WSAVE = Working Array fuer Fouriertransformation ! Z = LEGENDREFUNKTIONSWERTE ! ! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN ! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN ! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN ! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN IMPLICIT NONE ! Anzahl der Gitterpunkte auf jedem Breitenkreis INTEGER MLAT ( MAXB / 2 ) INTEGER K , MAXL , MAXB , MLEVEL , MNAUF INTEGER IND ( MAXB ) ! FELD DER LEGENDREPOLYNOME FUER EINE BREITE REAL Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 , MAXB / 2 ) REAL CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , MLEVEL ) REAL FELD ( MAXL , MLEVEL ) REAL WSAVE ( 8 * MAXB + 15 , MAXB / 2 ) INTEGER :: IFAX ( 10 , MAXB ) IND ( 1 ) = 0 DO 7 K = 2 , MAXB / 2 IND ( K ) = IND ( K - 1 ) + MLAT ( K - 1 ) 7 CONTINUE !$OMP PARALLEL DO SCHEDULE(DYNAMIC) DO 17 K = 1 , MAXB / 2 CALL PHSYM ( K , IND , CXMN , FELD , Z , WSAVE , IFAX , MLAT , MNAUF , MAXL , MAXB , MLEVEL ) 17 CONTINUE !$OMP END PARALLEL DO RETURN END SUBROUTINE PHGR213 SUBROUTINE PHSYM ( K , IND , CXMN , FELD , Z , WSAVE , IFAX , MLAT , MNAUF , MAXL , MAXB , MLEVEL ) IMPLICIT NONE INTEGER MLAT ( MAXB / 2 ) INTEGER K , L , I , J , LLS , LLPS , LL , LLP , MAXL , MAXB , MLEVEL , MNAUF INTEGER IND ( MAXB ) INTEGER :: IFAX ( 10 , MAXB ) ! FELD DER FOURIERKOEFFIZIENTEN REAL :: CXMS ( 0 : MAXAUF - 1 ), CXMA ( 0 : MAXAUF - 1 ) ! FELD DER LEGENDREPOLYNOME FUER EINE BREITE REAL Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 , MAXB / 2 ) REAL ACR , ACI , SCR , SCI REAL CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , MLEVEL ) REAL FELD ( MAXL , MLEVEL ) REAL WSAVE ( 8 * MAXB + 15 , MAXB / 2 ) DO 6 L = 1 , MLEVEL LL = 0 LLP = 0 DO 1 I = 0 , MNAUF SCR = 0.D0 SCI = 0.D0 ACR = 0.D0 ACI = 0.D0 LLS = LL LLPS = LLP IF ( 2 * I + 1 . LT . MLAT ( K )) THEN ! Innerste Schleife aufgespalten um if-Abfrage zu sparen DO 18 J = I , MNAUF , 2 SCR = SCR + Z ( LLP , K ) * CXMN ( 2 * LL , L ) SCI = SCI + Z ( LLP , K ) * CXMN ( 2 * LL + 1 , L ) LL = LL + 2 LLP = LLP + 2 18 CONTINUE LL = LLS + 1 LLP = LLPS + 1 DO 19 J = I + 1 , MNAUF , 2 ACR = ACR + Z ( LLP , K ) * CXMN ( 2 * LL , L ) ACI = ACI + Z ( LLP , K ) * CXMN ( 2 * LL + 1 , L ) LL = LL + 2 LLP = LLP + 2 19 CONTINUE END IF LL = LLS + ( MNAUF - I + 1 ) LLP = LLPS + ( MNAUF - I + 3 ) CXMS ( 2 * I ) = SCR + ACR CXMS ( 2 * I + 1 ) = SCI + ACI CXMA ( 2 * I ) = SCR - ACR CXMA ( 2 * I + 1 ) = SCI - ACI 1 CONTINUE ! CALL FOURTR(CXMS,FELD(IND(k)+1,L),WSAVE(:,K),MNAUF,*MLAT(K),1) ! CALL FOURTR(CXMA,FELD(MAXL-IND(k)-MLAT(K)+1,L),WSAVE(:,K),MNAUF,MLAT(K),1) CALL RFOURTR ( CXMS , WSAVE (:, K ), IFAX (:, K ), MNAUF , MLAT ( K ), 1 ) FELD ( IND ( k ) + 1 : IND ( K ) + MLAT ( K ), L ) = CXMS ( 0 : MLAT ( K ) - 1 ) CALL RFOURTR ( CXMA , WSAVE (:, K ), IFAX (:, K ), MNAUF , MLAT ( K ), 1 ) FELD ( MAXL - IND ( k ) - MLAT ( K ) + 1 : MAXL - IND ( k ), L ) = CXMA ( 0 : MLAT ( K ) - 1 ) ! WRITE(*,*) IND+1,FELD(IND+1,L) 6 CONTINUE END SUBROUTINE PHSYM SUBROUTINE PHGCUT ( CXMN , FELD , WSAVE , IFAX , Z , & MNAUF , MMAX , MAUF , MANF , MAXL , MAXB , MLEVEL ) !! DIE ROUTINE FUEHRT EINE TRANSFORMATION EINER !! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN !! RAUM AUF KUGELKOORDINATEN DURCH. Es kann ein Teilausschnitt !! Der Erde angegeben werden. Diese Routine ist langsamer als phgrph ! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE ! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF ! FELD = FELD DER METEOROLOGISCHEN VARIABLEN ! BREITE = SINUS DER GEOGRAFISCHEN BREITEN ! ! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN ! MAUF ANZAHL DER LAENGEN UND DER FOURIERKOEFFIZIENTEN ! MANF ANFANG DES LAENGENBEREICHS FUER DAS GITTER, ! AUF DAS INTERPOLIERT WERDEN SOLL ! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN ! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN ! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN IMPLICIT REAL ( A - H , O - Z ) ! FELD DER FOURIERKOEFFIZIENTEN ! FELD DER LEGENDREPOLYNOME FUER EINE BREITE REAL Z ( 0 :(( MMAX + 3 ) * ( MMAX + 4 )) / 2 , MAXB ) DIMENSION CXMN ( 0 :( MMAX + 1 ) * ( MMAX + 2 ) - 1 , MLEVEL ) REAL FELD ( MAXL , MAXB , MLEVEL ) DIMENSION WSAVE ( 4 * MAUF + 15 ) INTEGER :: IFAX ( 10 ) LOGICAL SYM ! write(*,*)mauf,mnauf,manf,maxl IF ( MAUF . LE . MNAUF ) WRITE ( * , * ) 'TOO COARSE LONGITUDE RESOLUTION' IF ( MANF . LT . 1 . OR . MAXL . LT . 1 . OR . & MANF . GT . MAUF . OR . MAXL . GT . MAUF ) THEN WRITE ( * , * ) 'WRONG LONGITUDE RANGE' , MANF , MAXL STOP END IF ! Pruefe, ob Ausgabegitter symmetrisch zum Aequator ist ! Wenn ja soll Symmetrie der Legendrepolynome ausgenutzt werden IF ( MAXB . GT . 4 ) THEN SYM = . TRUE . DO 11 J = 5 , 5 IF ( ABS ( ABS ( Z ( 100 , J )) - ABS ( Z ( 100 , MAXB + 1 - J ))) . GT . 1E-11 ) SYM = . FALSE . ! WRITE(*,*) ABS(Z(100,J)),ABS(Z(100,MAXB+1-J)) 11 CONTINUE !! WRITE(*,*) 'Symmetrisch: ',SYM ELSE SYM = . FALSE . END IF IF ( SYM ) THEN !$OMP PARALLEL DO DO J = 1 ,( MAXB + 1 ) / 2 CALL PHSYMCUT ( J , CXMN , FELD , Z , WSAVE , IFAX , MAUF , MNAUF , MAXL , MAXB , MLEVEL , MANF ) END DO !$OMP END PARALLEL DO ELSE !$OMP PARALLEL DO DO J = 1 , MAXB CALL PHGPNS ( CXMN , FELD , Z , WSAVE , IFAX , J , MNAUF , MAUF , MANF , MAXL , MAXB , MLEVEL ) END DO !$OMP END PARALLEL DO END IF RETURN END SUBROUTINE PHGCUT SUBROUTINE PHSYMCUT ( J , CXMN , FELD , Z , WSAVE , IFAX , MAUF , MNAUF , MAXL , MAXB , MLEVEL , MANF ) IMPLICIT REAL ( A - H , O - Z ) ! FELD DER FOURIERKOEFFIZIENTEN REAL :: CXM ( 0 : MAXAUF - 1 ), CXMA ( 0 : MAXAUF - 1 ) ! FELD DER LEGENDREPOLYNOME FUER EINE BREITE REAL Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 , MAXB ) REAL SCR , SCI , ACR , ACI DIMENSION CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , MLEVEL ) REAL FELD ( MAXL , MAXB , MLEVEL ) DIMENSION WSAVE ( 4 * MAUF + 15 ) INTEGER :: IFAX ( 10 ) DO 16 L = 1 , MLEVEL LL = 0 LLP = 0 DO 17 I = 0 , MNAUF SCR = 0.D0 SCI = 0.D0 ACR = 0.D0 ACI = 0.D0 LLS = LL LLPS = LLP ! Innerste Schleife aufgespalten um if-Abfrage zu sparen DO 18 K = I , MNAUF , 2 SCR = SCR + Z ( LLP , J ) * CXMN ( 2 * LL , L ) SCI = SCI + Z ( LLP , J ) * CXMN ( 2 * LL + 1 , L ) LL = LL + 2 LLP = LLP + 2 18 CONTINUE LL = LLS + 1 LLP = LLPS + 1 DO 19 K = I + 1 , MNAUF , 2 ACR = ACR + Z ( LLP , J ) * CXMN ( 2 * LL , L ) ACI = ACI + Z ( LLP , J ) * CXMN ( 2 * LL + 1 , L ) LL = LL + 2 LLP = LLP + 2 19 CONTINUE LL = LLS + MNAUF - I + 1 LLP = LLPS + MNAUF - I + 3 CXM ( 2 * I ) = SCR + ACR CXM ( 2 * I + 1 ) = SCI + ACI CXMA ( 2 * I ) = SCR - ACR CXMA ( 2 * I + 1 ) = SCI - ACI 17 CONTINUE CALL RFOURTR ( CXM , WSAVE , IFAX , MNAUF , MAUF , 1 ) DO 26 I = 0 , MAXL - 1 IF ( MANF + I . LE . MAUF ) THEN FELD ( I + 1 , J , L ) = CXM ( MANF + I - 1 ) ELSE FELD ( I + 1 , J , L ) = CXM ( MANF - MAUF + I - 1 ) END IF 26 CONTINUE CALL RFOURTR ( CXMA , WSAVE , IFAX , MNAUF , MAUF , 1 ) DO 36 I = 0 , MAXL - 1 IF ( MANF + I . LE . MAUF ) THEN FELD ( I + 1 , MAXB + 1 - J , L ) = CXMA ( MANF + I - 1 ) ELSE FELD ( I + 1 , MAXB + 1 - J , L ) = CXMA ( MANF - MAUF + I - 1 ) END IF 36 CONTINUE 16 CONTINUE END SUBROUTINE PHSYMCUT SUBROUTINE PHGPNS ( CXMN , FELD , Z , WSAVE , IFAX , J , MNAUF , MAUF , MANF , MAXL , MAXB , MLEVEL ) IMPLICIT NONE INTEGER , INTENT ( IN ) :: MNAUF , MAUF , MANF , J , MAXL , MAXB , MLEVEL REAL :: CXM ( 0 : MAXAUF - 1 ) REAL , INTENT ( IN ) :: Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 , MAXB ) REAL , INTENT ( IN ) :: CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , MLEVEL ) REAL , INTENT ( IN ) :: WSAVE ( 4 * MAUF + 15 ) REAL :: FELD ( MAXL , MAXB , MLEVEL ) INTEGER :: IFAX ( 10 ) INTEGER I , L DO L = 1 , MLEVEL CALL LEGTR ( CXMN (:, L ), CXM , Z (:, J ), MNAUF , MAUF ) CALL RFOURTR ( CXM , WSAVE , IFAX , MNAUF , MAUF , 1 ) DO I = 0 , MAXL - 1 IF ( MANF + I . LE . MAUF ) THEN FELD ( I + 1 , J , L ) = CXM ( MANF + I - 1 ) ELSE FELD ( I + 1 , J , L ) = CXM ( MANF - MAUF + I - 1 ) END IF END DO END DO END SUBROUTINE PHGPNS SUBROUTINE LEGTR ( CXMN , CXM , Z , MNAUF , MAUF ) !! DIESE ROUTINE BERECHNET DIE FOURIERKOEFFIZIENTEN CXM IMPLICIT NONE INTEGER MNAUF , MAUF , LL , LLP , I , J REAL CXM ( 0 : MAXAUF - 1 ) REAL CXMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 ) REAL Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 ) REAL CI , CR LL = 0 LLP = 0 DO 1 I = 0 , MNAUF CR = 0.D0 CI = 0.D0 DO 2 J = I , MNAUF CR = CR + Z ( LLP ) * CXMN ( 2 * LL ) CI = CI + Z ( LLP ) * CXMN ( 2 * LL + 1 ) LL = LL + 1 LLP = LLP + 1 2 CONTINUE LLP = LLP + 2 CXM ( 2 * I ) = CR CXM ( 2 * I + 1 ) = CI 1 CONTINUE RETURN END SUBROUTINE LEGTR SUBROUTINE RFOURTR ( CXM , TRIGS , IFAX , MNAUF , MAXL , ISIGN ) !! BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS IMPLICIT REAL ( A - H , O - Z ) DIMENSION CXM ( 0 : MAXAUF - 1 ) REAL :: WSAVE ( 2 * MAXL ), TRIGS ( 2 * MAXL ) INTEGER IFAX ( 10 ) DO I = MNAUF + 1 , MAXL - 1 CXM ( 2 * I ) = 0.0 CXM ( 2 * I + 1 ) = 0.0 END DO CALL FFT99 ( CXM , WSAVE , TRIGS , IFAX , 1 , 1 , MAXL , 1 , 1 ) DO I = 0 , MAXL - 1 CXM ( I ) = CXM ( I + 1 ) END DO RETURN END SUBROUTINE RFOURTR SUBROUTINE GAULEG ( X1 , X2 , X , W , N ) !! BERECHNET DIE GAUSS+SCHEN BREITEN IMPLICIT REAL ( A - H , O - Z ) DIMENSION X ( N ), W ( N ) PARAMETER ( EPS = 3.D-14 ) M = ( N + 1 ) / 2 XM = 0.5D0 * ( X2 + X1 ) XL = 0.5D0 * ( X2 - X1 ) DO 12 I = 1 , M Z = DCOS ( 3.141592654D0 * ( I - . 25 D0 ) / ( N + . 5 D0 )) 1 CONTINUE P1 = 1.D0 P2 = 0.D0 DO 11 J = 1 , N P3 = P2 P2 = P1 P1 = (( 2.D0 * J - 1.D0 ) * Z * P2 - ( J - 1.D0 ) * P3 ) / J 11 CONTINUE PP = N * ( Z * P1 - P2 ) / ( Z * Z - 1.D0 ) Z1 = Z Z = Z1 - P1 / PP IF ( ABS ( Z - Z1 ) . GT . EPS ) GO TO 1 X ( I ) = XM - XL * Z X ( N + 1 - I ) = XM + XL * Z W ( I ) = 2.D0 * XL / (( 1.D0 - Z * Z ) * PP * PP ) W ( N + 1 - I ) = W ( I ) 12 CONTINUE RETURN END SUBROUTINE GAULEG SUBROUTINE PLGNFA ( LL , X , Z ) !! PLGNDN BERECHNET ALLE NORMIERTEN ASSOZIIERTEN !! LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) !! UND SCHREIBT SIE IN DAS FELD Z ! Die Polynome sind wie im ECMWF indiziert, d.h. ! P00,P10,P11,P20,P21,P22,... ! Ansonsten ist die Routine analog zu PLGNDN ! X IST DER COSINUS DES ZENITWINKELS ODER ! DER SINUS DER GEOGRAFISCHEN BREITE IMPLICIT REAL ( A - H , O - Z ) DIMENSION Z ( 0 :(( LL + 3 ) * ( LL + 4 )) / 2 ) L = LL + 2 I = 1 Z ( 0 ) = 1.D0 FACT = 1.D0 POT = 1.D0 SOMX2 = DSQRT ( 1.D0 - X * X ) DO 14 J = 0 , L DJ = DBLE ( J ) IF ( J . GT . 0 ) THEN FACT = FACT * ( 2.D0 * DJ - 1.D0 ) / ( 2.D0 * DJ ) POT = POT * SOMX2 Z ( I ) = DSQRT (( 2.D0 * DJ + 1.D0 ) * FACT ) * POT I = I + 1 END IF IF ( J . LT . L ) THEN Z ( I ) = X * DSQRT (( 4.D0 * DJ * DJ + 8.D0 * DJ + 3.D0 ) / ( 2.D0 * DJ + 1.D0 )) * Z ( I - 1 ) I = I + 1 END IF DK = DJ + 2.D0 DO 14 K = J + 2 , L DDK = ( DK * DK - DJ * DJ ) Z ( I ) = X * DSQRT (( 4.D0 * DK * DK - 1.D0 ) / DDK ) * Z ( I - 1 ) - & DSQRT ((( 2.D0 * DK + 1.D0 ) * ( DK - DJ - 1.D0 ) * ( DK + DJ - 1.D0 )) / & (( 2.D0 * DK - 3.D0 ) * DDK )) * Z ( I - 2 ) DK = DK + 1.D0 I = I + 1 14 CONTINUE RETURN END SUBROUTINE PLGNFA SUBROUTINE DPLGND ( MNAUF , Z , DZ ) !! DPLGND BERECHNET DIE ABLEITUNG DER NORMIERTEN ASSOZIIERTEN !! LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) !! UND SCHREIBT SIE IN DAS FELD DZ ! DIE REIHENFOLGE IST ! P00(X),P01(X),P11(X),P02(X),P12(X),P22(X),..PLL(X) IMPLICIT REAL ( A - H , O - Z ) DIMENSION Z ( 0 :(( MNAUF + 3 ) * ( MNAUF + 4 )) / 2 ) DIMENSION DZ ( 0 :(( MNAUF + 2 ) * ( MNAUF + 3 )) / 2 ) IF ( Z ( 0 ) . NE . 1.D0 ) THEN WRITE ( * , * ) 'DPLGND: Z(0) must be 1.0' STOP END IF LLP = 0 LLH = 0 DO 1 I = 0 , MNAUF + 1 DO 2 J = I , MNAUF + 1 IF ( I . EQ . J ) THEN WURZELA = DSQRT ( DBLE (( J + 1 ) * ( J + 1 ) - I * I ) / DBLE ( 4 * ( J + 1 ) * ( J + 1 ) - 1 )) DZ ( LLH ) = DBLE ( J ) * WURZELA * Z ( LLP + 1 ) ELSE WURZELB = DSQRT ( DBLE (( J + 1 ) * ( J + 1 ) - I * I ) / DBLE ( 4 * ( J + 1 ) * ( J + 1 ) - 1 )) DZ ( LLH ) = DBLE ( J ) * WURZELB * Z ( LLP + 1 ) - DBLE ( J + 1 ) * WURZELA * Z ( LLP - 1 ) WURZELA = WURZELB END IF LLH = LLH + 1 LLP = LLP + 1 2 CONTINUE LLP = LLP + 1 1 CONTINUE RETURN END SUBROUTINE DPLGND SUBROUTINE SPFILTER ( FELDMN , MM , MMAX ) !! Spectral Filter of Sardeshmukh and Hoskins (1984, MWR) ! MM=Spectral truncation of field ! MMAX= Spectral truncation of filter IMPLICIT NONE INTEGER MM , MMAX , I , J , K , L REAL FELDMN ( 0 :( MM + 1 ) * ( MM + 2 ) - 1 ) REAL KMAX , SMAX , FAK SMAX = 0.1 KMAX =- ALOG ( SMAX ) KMAX = KMAX / ( float ( MMAX ) * float ( MMAX + 1 )) ** 2 ! WRITE(*,*)'alogsmax',alog(smax),'KMAX:',KMAX L = 0 DO I = 0 , MM DO J = I , MM ! WRITE(*,*) I,J,FELD(K),FELD(K)*EXP(-KMAX*(J*(J+1))**2) IF ( J . LE . MMAX ) THEN ! FAK=EXP(-KMAX*(J*(J+1))**2) FAK = 1.0 FELDMN ( 2 * L ) = FELDMN ( 2 * L ) * FAK FELDMN ( 2 * L + 1 ) = FELDMN ( 2 * L + 1 ) * FAK ELSE FELDMN ( 2 * L ) = 0. FELDMN ( 2 * L + 1 ) = 0. END IF L = L + 1 END DO END DO END SUBROUTINE SPFILTER END MODULE PHTOGR","tags":"","loc":"sourcefile/phgrreal.f90.html","title":"phgrreal.f90 – Flex_extract: Calculation of etadot"},{"text":"Contents Subroutines POSNAM Source Code posnam.f90 Source Code SUBROUTINE POSNAM ( KULNAM , CDNAML ) !! position in namelist file. ! author: Mats Hamrud, ECMWF INTEGER , INTENT ( IN ) :: KULNAM CHARACTER * ( * ), INTENT ( IN ) :: CDNAML CHARACTER * 120 CLINE CHARACTER * 1 CLTEST REWIND ( KULNAM ) ILEN = LEN ( CDNAML ) 102 CONTINUE CLINE = ' ' READ ( KULNAM , '(A)' ) CLINE IND1 = INDEX ( CLINE , '&' // CDNAML ) IF ( IND1 . EQ . 0 ) GO TO 102 CLTEST = CLINE ( IND1 + ILEN + 1 : IND1 + ILEN + 1 ) IF ( LGE ( CLTEST , '0' ) . AND . LLE ( CLTEST , '9' ) . OR . & LGE ( CLTEST , 'A' ) . AND . LLE ( CLTEST , 'Z' )) GOTO 102 BACKSPACE ( KULNAM ) RETURN END SUBROUTINE POSNAM","tags":"","loc":"sourcefile/posnam.f90.html","title":"posnam.f90 – Flex_extract: Calculation of etadot"},{"text":"This file depends on sourcefile~~ftrafo.f90~~EfferentGraph sourcefile~ftrafo.f90 ftrafo.f90 sourcefile~phgrreal.f90 phgrreal.f90 sourcefile~ftrafo.f90->sourcefile~phgrreal.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\n is dependent upon another if the latter must be compiled before the former\n can be. Files dependent on this one sourcefile~~ftrafo.f90~~AfferentGraph sourcefile~ftrafo.f90 ftrafo.f90 sourcefile~calc_etadot.f90 calc_etadot.f90 sourcefile~calc_etadot.f90->sourcefile~ftrafo.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\n is dependent upon another if the latter must be compiled before the former\n can be. Contents Modules FTRAFO Source Code ftrafo.f90 Source Code MODULE FTRAFO !! Implementation of the spectral transformation using reduced the Gaussian grid CONTAINS ! Implementierung der spektralen Transformationsmethode unter Verwendung ! des reduzierten Gauss'schen Gitters SUBROUTINE VDTOUV ( XMN , XLAM , XPHI , GWSAVE , IFAX , P , MLAT , MNAUF , NI , NJ , NK ) !! Berechnung der scale winds aus Vorticity und Divergenz !! uebergibt man in XMN die Divergenz, so wird der divergente Anteil des !! Windes (XPHI=Ud,XPHI=Vd) zurueckgegeben, uebergibt man die Vorticity, so !! erhaelt man den rotationellen Wind (XLAM=Vrot,XPHI=-Urot). !! Summiert man beide, erhaelt man den gesamten Scale wind ! GWSAVE ist ein Hilfsfeld fuer die FFT ! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung ! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis ! MNAUF gibt die spektrale Aufloesung an, ! NI = Anzahl der Gauss'schen Gitterpunkte pro Flaeche ! NJ = Anzahl der Gauss'schen Breiten, ! NK = Anzahl der Niveaus USE PHTOGR IMPLICIT NONE INTEGER J , N , NI , NJ , NK , MNAUF , GGIND ( NJ / 2 ) INTEGER MLAT ( NJ ), IFAX ( 10 , NJ ) REAL XMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , NK ) REAL P ( 0 :( MNAUF + 3 ) * ( MNAUF + 4 ) / 2 , NJ / 2 ) REAL H ( 0 :( MNAUF + 2 ) * ( MNAUF + 3 ) / 2 ) REAL XLAM ( NI , NK ), XPHI ( NI , NK ) REAL GWSAVE ( 8 * NJ + 15 , NJ / 2 ) REAL SCR , SCI , ACR , ACI , MUSCR , MUSCI , MUACR , MUACI REAL RT , IT GGIND ( 1 ) = 0 DO 4 J = 2 , NJ / 2 GGIND ( J ) = GGIND ( J - 1 ) + MLAT ( J - 1 ) 4 CONTINUE !$OMP PARALLEL DO SCHEDULE(DYNAMIC) DO 5 J = 1 , NJ / 2 CALL VDUVSUB ( J , XMN , XLAM , XPHI , GWSAVE , IFAX , P , GGIND ( J ), MLAT , MNAUF , NI , NJ , NK ) 5 CONTINUE !$OMP END PARALLEL DO RETURN END SUBROUTINE VDTOUV SUBROUTINE VDUVSUB ( J , XMN , XLAM , XPHI , GWSAVE , IFAX , P , GGIND , MLAT , MNAUF , NI , NJ , NK ) USE PHTOGR IMPLICIT NONE INTEGER J , K , M , N , NI , NJ , NK , MNAUF , GGIND , LL , LLP , LLH , LLS , LLPS , LLHS INTEGER MLAT ( NJ ), IFAX ( 10 , NJ ) REAL UFOUC ( 0 : MAXAUF ), MUFOUC ( 0 : MAXAUF ) REAL VFOUC ( 0 : MAXAUF ), MVFOUC ( 0 : MAXAUF ) REAL XMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , NK ) REAL P ( 0 :( MNAUF + 3 ) * ( MNAUF + 4 ) / 2 , NJ / 2 ) REAL H ( 0 :( MNAUF + 2 ) * ( MNAUF + 3 ) / 2 ) REAL XLAM ( NI , NK ), XPHI ( NI , NK ) REAL GWSAVE ( 8 * NJ + 15 , NJ / 2 ) REAL ERAD , SCR , SCI , ACR , ACI , MUSCR , MUSCI , MUACR , MUACI REAL FAC ( 0 : MNAUF ), RT , IT ERAD = 636747 0.D0 FAC ( 0 ) = 0.D0 DO 12 N = 1 , MNAUF FAC ( N ) =- ERAD / DBLE ( N ) / DBLE ( N + 1 ) 12 CONTINUE CALL DPLGND ( MNAUF , P ( 0 , J ), H ) DO 3 K = 1 , NK LL = 0 LLP = 0 LLH = 0 DO 2 M = 0 , MNAUF SCR = 0.D0 SCI = 0.D0 ACR = 0.D0 ACI = 0.D0 MUSCR = 0.D0 MUSCI = 0.D0 MUACR = 0.D0 MUACI = 0.D0 LLS = LL LLPS = LLP LLHS = LLH IF ( 2 * M + 1 . LT . MLAT ( J )) THEN DO 1 N = M , MNAUF , 2 RT = XMN ( 2 * LL , K ) * FAC ( N ) IT = XMN ( 2 * LL + 1 , K ) * FAC ( N ) SCR = SCR + RT * P ( LLP , J ) SCI = SCI + IT * P ( LLP , J ) MUACR = MUACR + RT * H ( LLH ) MUACI = MUACI + IT * H ( LLH ) LL = LL + 2 LLP = LLP + 2 LLH = LLH + 2 1 CONTINUE LL = LLS + 1 LLP = LLPS + 1 LLH = LLHS + 1 DO 11 N = M + 1 , MNAUF , 2 RT = XMN ( 2 * LL , K ) * FAC ( N ) IT = XMN ( 2 * LL + 1 , K ) * FAC ( N ) ACR = ACR + RT * P ( LLP , J ) ACI = ACI + IT * P ( LLP , J ) MUSCR = MUSCR + RT * H ( LLH ) MUSCI = MUSCI + IT * H ( LLH ) LL = LL + 2 LLP = LLP + 2 LLH = LLH + 2 11 CONTINUE END IF LL = LLS + ( MNAUF - M + 1 ) LLP = LLPS + ( MNAUF - M + 3 ) LLH = LLHS + ( MNAUF - M + 2 ) UFOUC ( 2 * M ) =- M * ( SCI - ACI ) UFOUC ( 2 * M + 1 ) = M * ( SCR - ACR ) VFOUC ( 2 * M ) =- M * ( SCI + ACI ) VFOUC ( 2 * M + 1 ) = M * ( SCR + ACR ) MUFOUC ( 2 * M ) =- ( MUSCR - MUACR ) MUFOUC ( 2 * M + 1 ) =- ( MUSCI - MUACI ) MVFOUC ( 2 * M ) =- ( MUSCR + MUACR ) MVFOUC ( 2 * M + 1 ) =- ( MUSCI + MUACI ) 2 CONTINUE CALL RFOURTR ( VFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XLAM ( GGIND + 1 : GGIND + MLAT ( J ), K ) = VFOUC ( 0 : MLAT ( J ) - 1 ) CALL RFOURTR ( UFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XLAM ( NI - GGIND - MLAT ( J ) + 1 : NI - GGIND , K ) = UFOUC ( 0 : MLAT ( J ) - 1 ) CALL RFOURTR ( MVFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XPHI ( GGIND + 1 : GGIND + MLAT ( J ), K ) = MVFOUC ( 0 : MLAT ( J ) - 1 ) CALL RFOURTR ( MUFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XPHI ( NI - GGIND - MLAT ( J ) + 1 : NI - GGIND , K ) = MUFOUC ( 0 : MLAT ( J ) - 1 ) 3 CONTINUE RETURN END SUBROUTINE VDUVSUB SUBROUTINE PHGRAD ( XMN , XLAM , XPHI , GWSAVE , IFAX , P , H , MLAT , MNAUF , NI , NJ , NK ) !! Berechnung des Gradienten eines Skalars aus dem Feld des !! Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der !! Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. ! GWSAVE ist ein Hilfsfeld fuer die FFT ! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung ! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis ! MNAUF gibt die spektrale Aufloesung an, ! NI = Anzahl der Gauss'schen Gitterpunkte, ! NJ = Anzahl der Gauss'schen Breiten, ! NK = Anzahl der Niveaus USE PHTOGR IMPLICIT NONE INTEGER J , K , M , N , NI , NJ , NK , MNAUF , GGIND , LL , LLP , LLH , LLS , LLPS , LLHS INTEGER MLAT ( NJ ), IFAX ( 10 , NJ ) REAL UFOUC ( 0 : MAXAUF ), MUFOUC ( 0 : MAXAUF ) REAL VFOUC ( 0 : MAXAUF ), MVFOUC ( 0 : MAXAUF ) REAL XMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , NK ) REAL P ( 0 :( MNAUF + 3 ) * ( MNAUF + 4 ) / 2 , NJ / 2 ) REAL H ( 0 :( MNAUF + 2 ) * ( MNAUF + 3 ) / 2 ) REAL XLAM ( NI , NK ), XPHI ( NI , NK ) REAL GWSAVE ( 8 * NJ + 15 , NJ / 2 ) REAL ERAD REAL SCR , SCI , ACR , ACI , MUSCR , MUSCI , MUACR , MUACI , RT , IT ERAD = 636747 0.0 GGIND = 0 DO 4 J = 1 , NJ / 2 CALL DPLGND ( MNAUF , P ( 0 , J ), H ) DO 3 K = 1 , NK LL = 0 LLP = 0 LLH = 0 DO 2 M = 0 , MNAUF SCR = 0.D0 SCI = 0.D0 ACR = 0.D0 ACI = 0.D0 MUSCR = 0.D0 MUSCI = 0.D0 MUACR = 0.D0 MUACI = 0.D0 LLS = LL LLPS = LLP LLHS = LLH IF ( 2 * M + 1 . LT . MLAT ( J )) THEN DO 1 N = M , MNAUF , 2 RT = XMN ( 2 * LL , K ) IT = XMN ( 2 * LL + 1 , K ) SCR = SCR + RT * P ( LLP , J ) SCI = SCI + IT * P ( LLP , J ) MUACR = MUACR + RT * H ( LLH ) MUACI = MUACI + IT * H ( LLH ) LL = LL + 2 LLP = LLP + 2 LLH = LLH + 2 1 CONTINUE LL = LLS + 1 LLP = LLPS + 1 LLH = LLHS + 1 DO 11 N = M + 1 , MNAUF , 2 RT = XMN ( 2 * LL , K ) IT = XMN ( 2 * LL + 1 , K ) ACR = ACR + RT * P ( LLP , J ) ACI = ACI + IT * P ( LLP , J ) MUSCR = MUSCR + RT * H ( LLH ) MUSCI = MUSCI + IT * H ( LLH ) LL = LL + 2 LLP = LLP + 2 LLH = LLH + 2 11 CONTINUE END IF LL = LLS + ( MNAUF - M + 1 ) LLP = LLPS + ( MNAUF - M + 3 ) LLH = LLHS + ( MNAUF - M + 2 ) UFOUC ( 2 * M ) =- M * ( SCI - ACI ) / ERAD UFOUC ( 2 * M + 1 ) = M * ( SCR - ACR ) / ERAD VFOUC ( 2 * M ) =- M * ( SCI + ACI ) / ERAD VFOUC ( 2 * M + 1 ) = M * ( SCR + ACR ) / ERAD MUFOUC ( 2 * M ) =- ( MUSCR - MUACR ) / ERAD MUFOUC ( 2 * M + 1 ) =- ( MUSCI - MUACI ) / ERAD MVFOUC ( 2 * M ) =- ( MUSCR + MUACR ) / ERAD MVFOUC ( 2 * M + 1 ) =- ( MUSCI + MUACI ) / ERAD 2 CONTINUE CALL RFOURTR ( VFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XLAM ( GGIND + 1 : GGIND + MLAT ( J ), K ) = VFOUC ( 0 : MLAT ( J ) - 1 ) CALL RFOURTR ( UFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XLAM ( NI - GGIND - MLAT ( J ) + 1 : NI - GGIND , K ) = UFOUC ( 0 : MLAT ( J ) - 1 ) CALL RFOURTR ( MVFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XPHI ( GGIND + 1 : GGIND + MLAT ( J ), K ) = MVFOUC ( 0 : MLAT ( J ) - 1 ) CALL RFOURTR ( MUFOUC , GWSAVE (:, J ), IFAX (:, J ), MNAUF , MLAT ( J ), 1 ) XPHI ( NI - GGIND - MLAT ( J ) + 1 : NI - GGIND , K ) = MUFOUC ( 0 : MLAT ( J ) - 1 ) 3 CONTINUE GGIND = GGIND + MLAT ( J ) 4 CONTINUE RETURN END SUBROUTINE PHGRAD SUBROUTINE PHGRACUT ( XMN , XLAM , XPHI , GWSAVE , IFAX , P , H , MAUF , MNAUF , NI , NJ , MANF , NK ) !! Berechnung des Gradienten eines Skalars aus dem Feld des !! Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der !! Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. ! GWSAVE ist ein Hilfsfeld fuer die FFT ! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung ! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis ! MNAUF gibt die spektrale Aufloesung an, ! NI = Anzahl der Gauss'schen Gitterpunkte, ! NJ = Anzahl der Gauss'schen Breiten, ! NK = Anzahl der Niveaus USE PHTOGR IMPLICIT NONE INTEGER J , K , M , N , NI , NJ , NK , MNAUF , GGIND , LL , LLP , LLH , LLS , LLPS , LLHS INTEGER MAUF , MANF , I , IFAX ( 10 ) REAL UFOUC ( 0 : MAXAUF ), MUFOUC ( 0 : MAXAUF ) REAL VFOUC ( 0 : MAXAUF ), MVFOUC ( 0 : MAXAUF ) REAL XMN ( 0 :( MNAUF + 1 ) * ( MNAUF + 2 ) - 1 , NK ) REAL P ( 0 :( MNAUF + 3 ) * ( MNAUF + 4 ) / 2 , NJ ) REAL H ( 0 :( MNAUF + 2 ) * ( MNAUF + 3 ) / 2 ) REAL XLAM ( NI , NJ , NK ), XPHI ( NI , NJ , NK ) REAL HLAM ( MAXAUF , 2 ), HPHI ( MAXAUF , 2 ) REAL GWSAVE ( 4 * MAUF + 15 ) REAL ERAD REAL SCR , SCI , ACR , ACI , MUSCR , MUSCI , MUACR , MUACI , RT , IT ERAD = 636747 0.0 GGIND = 0 DO 4 J = 1 , NJ CALL DPLGND ( MNAUF , P ( 0 , J ), H ) DO 3 K = 1 , NK LL = 0 LLP = 0 LLH = 0 DO 2 M = 0 , MNAUF SCR = 0.D0 SCI = 0.D0 ACR = 0.D0 ACI = 0.D0 MUSCR = 0.D0 MUSCI = 0.D0 MUACR = 0.D0 MUACI = 0.D0 LLS = LL LLPS = LLP LLHS = LLH IF ( 2 * M + 1 . LT . MAUF ) THEN DO 1 N = M , MNAUF , 2 RT = XMN ( 2 * LL , K ) IT = XMN ( 2 * LL + 1 , K ) SCR = SCR + RT * P ( LLP , J ) SCI = SCI + IT * P ( LLP , J ) MUACR = MUACR + RT * H ( LLH ) MUACI = MUACI + IT * H ( LLH ) LL = LL + 2 LLP = LLP + 2 LLH = LLH + 2 1 CONTINUE LL = LLS + 1 LLP = LLPS + 1 LLH = LLHS + 1 DO 11 N = M + 1 , MNAUF , 2 RT = XMN ( 2 * LL , K ) IT = XMN ( 2 * LL + 1 , K ) ACR = ACR + RT * P ( LLP , J ) ACI = ACI + IT * P ( LLP , J ) MUSCR = MUSCR + RT * H ( LLH ) MUSCI = MUSCI + IT * H ( LLH ) LL = LL + 2 LLP = LLP + 2 LLH = LLH + 2 11 CONTINUE END IF LL = LLS + ( MNAUF - M + 1 ) LLP = LLPS + ( MNAUF - M + 3 ) LLH = LLHS + ( MNAUF - M + 2 ) UFOUC ( 2 * M ) =- M * ( SCI - ACI ) / ERAD UFOUC ( 2 * M + 1 ) = M * ( SCR - ACR ) / ERAD VFOUC ( 2 * M ) =- M * ( SCI + ACI ) / ERAD VFOUC ( 2 * M + 1 ) = M * ( SCR + ACR ) / ERAD MUFOUC ( 2 * M ) =- ( MUSCR - MUACR ) / ERAD MUFOUC ( 2 * M + 1 ) =- ( MUSCI - MUACI ) / ERAD MVFOUC ( 2 * M ) =- ( MUSCR + MUACR ) / ERAD MVFOUC ( 2 * M + 1 ) =- ( MUSCI + MUACI ) / ERAD 2 CONTINUE CALL RFOURTR ( VFOUC , GWSAVE , IFAX , MNAUF , MAUF , 1 ) CALL RFOURTR ( MVFOUC , GWSAVE , IFAX , MNAUF , MAUF , 1 ) DO 6 I = 0 , NI - 1 IF ( MANF + I . LE . MAUF ) THEN XLAM ( I + 1 , J , K ) = VFOUC ( MANF + I - 1 ) XPHI ( I + 1 , J , K ) = MVFOUC ( MANF + I - 1 ) ELSE XLAM ( I + 1 , J , K ) = VFOUC ( MANF - MAUF + I - 1 ) XPHI ( I + 1 , J , K ) = MVFOUC ( MANF - MAUF + I - 1 ) END IF 6 CONTINUE 3 CONTINUE GGIND = GGIND + MAUF 4 CONTINUE RETURN END SUBROUTINE PHGRACUT SUBROUTINE CONTGL ( PS , DPSDL , DPSDM , DIV , U , V , BREITE , ETA , MLAT , A , B , NI , NJ , NK ) !! Berechnung der Divergenz aus dem Windfeld (U,V) !! im Phasenraum. Zurueckgegeben werden die Felder der !! Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. ! GWSAVE ist ein Hilfsfeld fuer die FFT ! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung ! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis ! MNAUF gibt die spektrale Aufloesung an, ! NI = Anzahl der Gauss'schen Gitterpunkte, ! NJ = Anzahl der Gauss'schen Breiten, ! NK = Anzahl der Niveaus ! Beachte, dass das Windfeld eine um 1 erhoehte Aufloesung in mu-Richtung hat. IMPLICIT NONE INTEGER NI , NJ , NK , I , J , K , MLAT ( NJ ), L REAL A ( NK + 1 ), B ( NK + 1 ) REAL PS ( NI ), DPSDL ( NI ), DPSDM ( NI ) REAL DIV ( NI , NK ), U ( NI , NK ), V ( NI , NK ), ETA ( NI , NK ) REAL BREITE ( NJ ) REAL DIVT1 , DIVT2 , POB , PUN , DPSDT , COSB L = 0 DO 4 J = 1 , NJ COSB = ( 1.0 - BREITE ( J ) * BREITE ( J )) DO 3 I = 1 , MLAT ( J ) L = L + 1 DIVT1 = 0.0 DIVT2 = 0.0 DO 1 K = 1 , NK POB = A ( K ) + B ( K ) * PS ( L ) PUN = A ( K + 1 ) + B ( K + 1 ) * PS ( L ) DIVT1 = DIVT1 + DIV ( L , K ) * ( PUN - POB ) IF ( COSB . GT . 0. ) THEN DIVT2 = DIVT2 + ( B ( K + 1 ) - B ( K )) * PS ( L ) * & ( U ( L , K ) * DPSDL ( L ) + V ( L , K ) * DPSDM ( L )) / COSB END IF ETA ( L , K ) =- DIVT1 - DIVT2 1 CONTINUE DPSDT = ( - DIVT1 - DIVT2 ) / PS ( L ) DO 2 K = 1 , NK ETA ( L , K ) = ETA ( L , K ) - DPSDT * B ( K + 1 ) * PS ( L ) 2 CONTINUE PS ( L ) = DPSDT * PS ( L ) 3 CONTINUE 4 CONTINUE RETURN END SUBROUTINE CONTGL SUBROUTINE OMEGA ( PS , DPSDL , DPSDM , DIV , U , V , BREITE , E , MLAT , A , B , NGI , NGJ , MKK ) !! calculates $\\omega$ in the hybrid ($\\eta$-) coordinate system ! OMEGA berechnet omega im Hybridkoordinatensystem ! PS ist der Bodendruck, ! DPSDL,DPSDM sind die Komponenten des Gradienten des Logarithmus des ! Bodendrucks ! DIV,U,V sind die horizontale Divergenz und das horizontale Windfeld ! BREITE ist das Feld der Gauss'schen Breiten ! E ist omega, IMPLICIT NONE INTEGER I , J , K , L , NGI , NGJ , MKK , MLAT ( NGJ ) REAL PS ( NGI ), DPSDL ( NGI ), DPSDM ( NGI ), A ( MKK + 1 ), B ( MKK + 1 ) REAL DIV ( NGI , MKK ), U ( NGI , MKK ), V ( NGI , MKK ), E ( NGI , MKK ) REAL BREITE ( NGJ ) REAL DIVT1 , DIVT2 , POB , PUN , DP , X , Y , COSB REAL DIVT3 ( MKK + 2 ) L = 0 DO 4 J = 1 , NGJ COSB = ( 1.0 - BREITE ( J ) * BREITE ( J )) DO 3 I = 1 , MLAT ( J ) L = L + 1 DIVT1 = 0.0 DIVT2 = 0.0 DIVT3 ( 1 ) = 0.0 DO 1 K = 1 , MKK POB = A ( K ) + B ( K ) * PS ( L ) PUN = A ( K + 1 ) + B ( K + 1 ) * PS ( L ) DP = PUN - POB Y = PS ( L ) * ( U ( L , K ) * DPSDL ( L ) + V ( L , K ) * DPSDM ( L )) / COSB IF ( K . LT . 3 ) THEN X = 0.0 ELSE X = ( B ( K + 1 ) - B ( K )) * Y END IF DIVT1 = DIVT1 + DIV ( L , K ) * DP DIVT2 = DIVT2 + X DIVT3 ( K + 1 ) =- DIVT1 - DIVT2 IF ( K . GT . 1 ) THEN E ( L , K ) = 0.5 * ( POB + PUN ) / & DP * Y * (( B ( K + 1 ) - B ( K )) + ( A ( K + 1 ) * B ( K ) - A ( K ) * B ( K + 1 )) / DP * LOG ( PUN / POB )) ELSE E ( L , K ) = 0.0 END IF E ( L , K ) = E ( L , K ) + 0.5 * ( DIVT3 ( K ) + DIVT3 ( K + 1 )) 1 CONTINUE 3 CONTINUE 4 CONTINUE RETURN END SUBROUTINE OMEGA END MODULE FTRAFO","tags":"","loc":"sourcefile/ftrafo.f90.html","title":"ftrafo.f90 – Flex_extract: Calculation of etadot"},{"text":"function IA(FIELD1, NI, NJ, NK, G) Calculate something that is roughly log10( maxval(field1)/g ) [PS] Arguments Type Intent Optional Attributes Name real, intent(in) :: FIELD1 (NI,NJ,NK) integer, intent(in) :: NI integer, intent(in) :: NJ integer, intent(in) :: NK real, intent(in) :: G Return Value integer Contents None","tags":"","loc":"proc/ia.html","title":"IA – Flex_extract: Calculation of etadot"},{"text":"subroutine STATIS(NI, NJ, NK, PHI, RMS, MW, SIG) calculate mean, rms, stdev Arguments Type Intent Optional Attributes Name integer :: NI integer :: NJ integer :: NK real :: PHI (NI,NJ,NK) real :: RMS real :: MW real :: SIG Called by proc~~statis~~CalledByGraph proc~statis STATIS program~calc_etadot calc_etadot program~calc_etadot->proc~statis Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/statis.html","title":"STATIS – Flex_extract: Calculation of etadot"},{"text":"subroutine POSNAM(KULNAM, CDNAML) position in namelist file. Arguments Type Intent Optional Attributes Name integer, intent(in) :: KULNAM character(len=*), intent(in) :: CDNAML Called by proc~~posnam~~CalledByGraph proc~posnam POSNAM program~calc_etadot calc_etadot program~calc_etadot->proc~posnam Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/posnam.html","title":"POSNAM – Flex_extract: Calculation of etadot"},{"text":"public subroutine READLATLON(filename, feld, maxl, maxb, mlevel, mpar) Uses GRIB_API proc~~readlatlon~~UsesGraph proc~readlatlon READLATLON GRIB_API GRIB_API proc~readlatlon->GRIB_API Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Read a field from GRIB file on lat-lon grid write( , ) 'readlatlon: ',i-1,' records read' Arguments Type Intent Optional Attributes Name character(len=*) :: filename real, dimension(maxl,maxb,mlevel) :: feld integer :: maxl integer :: maxb integer :: mlevel integer :: mpar (:) Calls proc~~readlatlon~~CallsGraph proc~readlatlon READLATLON grib_count_in_file grib_count_in_file proc~readlatlon->grib_count_in_file grib_close_file grib_close_file proc~readlatlon->grib_close_file Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~readlatlon~~CalledByGraph proc~readlatlon READLATLON program~calc_etadot calc_etadot program~calc_etadot->proc~readlatlon Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/readlatlon.html","title":"READLATLON – Flex_extract: Calculation of etadot"},{"text":"public subroutine WRITELATLON(IUNIT, igrib, ogrib, FELD, MAXL, MAXB, MLEVEL, MLEVELIST, MSTRIDE, MPAR) Uses GRIB_API proc~~writelatlon~~UsesGraph proc~writelatlon WRITELATLON GRIB_API GRIB_API proc~writelatlon->GRIB_API Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. write a field on lat-lon grid to GRIB file Arguments Type Intent Optional Attributes Name integer :: IUNIT integer :: igrib integer :: ogrib real :: FELD (MAXL,MAXB,MLEVEL) integer :: MAXL integer :: MAXB integer :: MLEVEL character(len=*) :: MLEVELIST integer :: MSTRIDE integer :: MPAR (MSTRIDE) Calls proc~~writelatlon~~CallsGraph proc~writelatlon WRITELATLON grib_write grib_write proc~writelatlon->grib_write grib_set grib_set proc~writelatlon->grib_set Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/writelatlon.html","title":"WRITELATLON – Flex_extract: Calculation of etadot"},{"text":"public subroutine READSPECTRAL(filename, CXMN, mnauf, mlevel, maxlev, mpar, A, B) Uses GRIB_API proc~~readspectral~~UsesGraph proc~readspectral READSPECTRAL GRIB_API GRIB_API proc~readspectral->GRIB_API Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. read a GRIB file in spherical harmonics write( , ) 'readspectral: ',i-1,' records read' Arguments Type Intent Optional Attributes Name character(len=*) :: filename real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) integer :: mnauf integer :: mlevel integer :: maxlev integer :: mpar (:) real :: A (MAXLEV+1) real :: B (MAXLEV+1) Calls proc~~readspectral~~CallsGraph proc~readspectral READSPECTRAL grib_count_in_file grib_count_in_file proc~readspectral->grib_count_in_file grib_close_file grib_close_file proc~readspectral->grib_close_file Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~readspectral~~CalledByGraph proc~readspectral READSPECTRAL program~calc_etadot calc_etadot program~calc_etadot->proc~readspectral Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/readspectral.html","title":"READSPECTRAL – Flex_extract: Calculation of etadot"},{"text":"public subroutine GRPH213(CXMN, FELD, WSAVE, IFAX, Z, W, MLAT, MNAUF, MAXL, MAXB, MLEVEL) WRONG>>> DIE ROUTINE F]HRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF KUGELKOORDINATEN DURCH Arguments Type Intent Optional Attributes Name real :: CXMN real :: FELD (MAXL,MLEVEL) real :: WSAVE integer :: IFAX (10,MAXB) real :: Z (MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) real :: W (MAXB) integer :: MLAT (MAXB) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL Calls proc~~grph213~~CallsGraph proc~grph213 GRPH213 ind ind proc~grph213->ind proc~grphsub GRPHSUB proc~grph213->proc~grphsub Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~grph213~~CalledByGraph proc~grph213 GRPH213 program~calc_etadot calc_etadot program~calc_etadot->proc~grph213 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/grph213.html","title":"GRPH213 – Flex_extract: Calculation of etadot"},{"text":"public subroutine GRPHSUB(L, IND, CXMN, FELD, WSAVE, IFAX, Z, W, MLAT, MNAUF, MAXL, MAXB, MLEVEL) DIE ROUTINE F]HRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF KUGELKOORDINATEN DURCH Arguments Type Intent Optional Attributes Name integer :: L integer :: IND (MAXB) real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MLEVEL) real :: WSAVE (8*MAXB+15,MAXB/2) integer :: IFAX (10,MAXB) real :: Z (MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) real :: W (MAXB) integer :: MLAT (MAXB) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL Called by proc~~grphsub~~CalledByGraph proc~grphsub GRPHSUB proc~grph213 GRPH213 proc~grph213->proc~grphsub program~calc_etadot calc_etadot program~calc_etadot->proc~grph213 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/grphsub.html","title":"GRPHSUB – Flex_extract: Calculation of etadot"},{"text":"public subroutine LGTR213(CXMN, CXM, Z, W, MLAT, MNAUF, MAXB) DIESE ROUTINE BERECHNET DIE KFFKs CXMN Arguments Type Intent Optional Attributes Name real :: CXMN real :: CXM real(kind=8) :: Z (MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) real(kind=8) :: W (MAXB) integer :: MLAT (MAXB) integer :: MNAUF integer :: MAXB Contents None","tags":"","loc":"proc/lgtr213.html","title":"LGTR213 – Flex_extract: Calculation of etadot"},{"text":"public subroutine RFOUFTR(CXM, TRIGS, IFAX, MNAUF, MAXL, ISIGN) Arguments Type Intent Optional Attributes Name real :: CXM real :: TRIGS integer :: IFAX (10) integer :: MNAUF integer :: MAXL integer :: ISIGN Calls proc~~rfouftr~~CallsGraph proc~rfouftr RFOUFTR wsave wsave proc~rfouftr->wsave fft99 fft99 proc~rfouftr->fft99 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/rfouftr.html","title":"RFOUFTR – Flex_extract: Calculation of etadot"},{"text":"public subroutine PHGR213(CXMN, FELD, WSAVE, IFAX, Z, MLAT, MNAUF, MAXL, MAXB, MLEVEL) DIE ROUTINE F]HRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF DAS REDUZIERTE GAUSS'SCHE GITTER DURCH Arguments Type Intent Optional Attributes Name real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MLEVEL) real :: WSAVE (8*MAXB+15,MAXB/2) integer :: IFAX (10,MAXB) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2) integer :: MLAT (MAXB/2) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL Calls proc~~phgr213~~CallsGraph proc~phgr213 PHGR213 proc~phsym PHSYM proc~phgr213->proc~phsym Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~phgr213~~CalledByGraph proc~phgr213 PHGR213 program~calc_etadot calc_etadot program~calc_etadot->proc~phgr213 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/phgr213.html","title":"PHGR213 – Flex_extract: Calculation of etadot"},{"text":"public subroutine PHSYM(K, IND, CXMN, FELD, Z, WSAVE, IFAX, MLAT, MNAUF, MAXL, MAXB, MLEVEL) Arguments Type Intent Optional Attributes Name integer :: K integer :: IND (MAXB) real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MLEVEL) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2) real :: WSAVE (8*MAXB+15,MAXB/2) integer :: IFAX (10,MAXB) integer :: MLAT (MAXB/2) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL Called by proc~~phsym~~CalledByGraph proc~phsym PHSYM proc~phgr213 PHGR213 proc~phgr213->proc~phsym program~calc_etadot calc_etadot program~calc_etadot->proc~phgr213 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/phsym.html","title":"PHSYM – Flex_extract: Calculation of etadot"},{"text":"public subroutine PHGCUT(CXMN, FELD, WSAVE, IFAX, Z, MNAUF, MMAX, MAUF, MANF, MAXL, MAXB, MLEVEL) DIE ROUTINE FUEHRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF KUGELKOORDINATEN DURCH. Es kann ein Teilausschnitt\n Der Erde angegeben werden. Diese Routine ist langsamer als phgrph WRITE(*,*) 'Symmetrisch: ',SYM Arguments Type Intent Optional Attributes Name real :: CXMN real :: FELD (MAXL,MAXB,MLEVEL) real :: WSAVE integer :: IFAX (10) real :: Z (0:((MMAX+3)*(MMAX+4))/2,MAXB) integer :: MNAUF integer :: MMAX integer :: MAUF integer :: MANF integer :: MAXL integer :: MAXB integer :: MLEVEL Calls proc~~phgcut~~CallsGraph proc~phgcut PHGCUT proc~phsymcut PHSYMCUT proc~phgcut->proc~phsymcut proc~phgpns PHGPNS proc~phgcut->proc~phgpns proc~rfourtr RFOURTR proc~phsymcut->proc~rfourtr proc~phgpns->proc~rfourtr fft99 fft99 proc~rfourtr->fft99 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~phgcut~~CalledByGraph proc~phgcut PHGCUT program~calc_etadot calc_etadot program~calc_etadot->proc~phgcut Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/phgcut.html","title":"PHGCUT – Flex_extract: Calculation of etadot"},{"text":"public subroutine PHSYMCUT(J, CXMN, FELD, Z, WSAVE, IFAX, MAUF, MNAUF, MAXL, MAXB, MLEVEL, MANF) Arguments Type Intent Optional Attributes Name integer :: J real :: CXMN real :: FELD (MAXL,MAXB,MLEVEL) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB) real :: WSAVE integer :: IFAX (10) integer :: MAUF integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL integer :: MANF Calls proc~~phsymcut~~CallsGraph proc~phsymcut PHSYMCUT proc~rfourtr RFOURTR proc~phsymcut->proc~rfourtr fft99 fft99 proc~rfourtr->fft99 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~phsymcut~~CalledByGraph proc~phsymcut PHSYMCUT proc~phgcut PHGCUT proc~phgcut->proc~phsymcut program~calc_etadot calc_etadot program~calc_etadot->proc~phgcut Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/phsymcut.html","title":"PHSYMCUT – Flex_extract: Calculation of etadot"},{"text":"public subroutine PHGPNS(CXMN, FELD, Z, WSAVE, IFAX, J, MNAUF, MAUF, MANF, MAXL, MAXB, MLEVEL) Arguments Type Intent Optional Attributes Name real, intent(in) :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MAXB,MLEVEL) real, intent(in) :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB) real, intent(in) :: WSAVE (4*MAUF+15) integer :: IFAX (10) integer, intent(in) :: J integer, intent(in) :: MNAUF integer, intent(in) :: MAUF integer, intent(in) :: MANF integer, intent(in) :: MAXL integer, intent(in) :: MAXB integer, intent(in) :: MLEVEL Calls proc~~phgpns~~CallsGraph proc~phgpns PHGPNS proc~rfourtr RFOURTR proc~phgpns->proc~rfourtr fft99 fft99 proc~rfourtr->fft99 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~phgpns~~CalledByGraph proc~phgpns PHGPNS proc~phgcut PHGCUT proc~phgcut->proc~phgpns program~calc_etadot calc_etadot program~calc_etadot->proc~phgcut Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/phgpns.html","title":"PHGPNS – Flex_extract: Calculation of etadot"},{"text":"public subroutine LEGTR(CXMN, CXM, Z, MNAUF, MAUF) DIESE ROUTINE BERECHNET DIE FOURIERKOEFFIZIENTEN CXM Arguments Type Intent Optional Attributes Name real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1) real :: CXM (0:MAXAUF-1) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2) integer :: MNAUF integer :: MAUF Contents None","tags":"","loc":"proc/legtr.html","title":"LEGTR – Flex_extract: Calculation of etadot"},{"text":"public subroutine RFOURTR(CXM, TRIGS, IFAX, MNAUF, MAXL, ISIGN) BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS Arguments Type Intent Optional Attributes Name real :: CXM real :: TRIGS (2*MAXL) integer :: IFAX (10) integer :: MNAUF integer :: MAXL integer :: ISIGN Calls proc~~rfourtr~~CallsGraph proc~rfourtr RFOURTR fft99 fft99 proc~rfourtr->fft99 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~rfourtr~~CalledByGraph proc~rfourtr RFOURTR proc~phsymcut PHSYMCUT proc~phsymcut->proc~rfourtr proc~phgpns PHGPNS proc~phgpns->proc~rfourtr proc~phgracut PHGRACUT proc~phgracut->proc~rfourtr proc~phgcut PHGCUT proc~phgcut->proc~phsymcut proc~phgcut->proc~phgpns program~calc_etadot calc_etadot program~calc_etadot->proc~phgcut Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/rfourtr.html","title":"RFOURTR – Flex_extract: Calculation of etadot"},{"text":"public subroutine GAULEG(X1, X2, X, W, N) BERECHNET DIE GAUSS+SCHEN BREITEN Arguments Type Intent Optional Attributes Name real :: X1 real :: X2 real :: X real :: W integer :: N Calls proc~~gauleg~~CallsGraph proc~gauleg GAULEG dcos dcos proc~gauleg->dcos Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Called by proc~~gauleg~~CalledByGraph proc~gauleg GAULEG program~calc_etadot calc_etadot program~calc_etadot->proc~gauleg Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/gauleg.html","title":"GAULEG – Flex_extract: Calculation of etadot"},{"text":"public subroutine PLGNFA(LL, X, Z) PLGNDN BERECHNET ALLE NORMIERTEN ASSOZIIERTEN\n LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X)\n UND SCHREIBT SIE IN DAS FELD Z Arguments Type Intent Optional Attributes Name integer :: LL real :: X real :: Z Contents None","tags":"","loc":"proc/plgnfa.html","title":"PLGNFA – Flex_extract: Calculation of etadot"},{"text":"public subroutine DPLGND(MNAUF, Z, DZ) DPLGND BERECHNET DIE ABLEITUNG DER NORMIERTEN ASSOZIIERTEN\n LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X)\n UND SCHREIBT SIE IN DAS FELD DZ Arguments Type Intent Optional Attributes Name integer :: MNAUF real :: Z real :: DZ Contents None","tags":"","loc":"proc/dplgnd.html","title":"DPLGND – Flex_extract: Calculation of etadot"},{"text":"public subroutine SPFILTER(FELDMN, MM, MMAX) Spectral Filter of Sardeshmukh and Hoskins (1984, MWR) Arguments Type Intent Optional Attributes Name real :: FELDMN (0:(MM+1)*(MM+2)-1) integer :: MM integer :: MMAX Calls proc~~spfilter~~CallsGraph proc~spfilter SPFILTER float float proc~spfilter->float alog alog proc~spfilter->alog Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/spfilter.html","title":"SPFILTER – Flex_extract: Calculation of etadot"},{"text":"public subroutine VDTOUV(XMN, XLAM, XPHI, GWSAVE, IFAX, P, MLAT, MNAUF, NI, NJ, NK) Uses PHTOGR proc~~vdtouv~~UsesGraph proc~vdtouv VDTOUV module~phtogr PHTOGR proc~vdtouv->module~phtogr Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Berechnung der scale winds aus Vorticity und Divergenz\n uebergibt man in XMN die Divergenz, so wird der divergente Anteil des\n Windes (XPHI=Ud,XPHI=Vd) zurueckgegeben, uebergibt man die Vorticity, so\n erhaelt man den rotationellen Wind (XLAM=Vrot,XPHI=-Urot).\n Summiert man beide, erhaelt man den gesamten Scale wind Arguments Type Intent Optional Attributes Name real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NK) real :: XPHI (NI,NK) real :: GWSAVE (8*NJ+15,NJ/2) integer :: IFAX (10,NJ) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) integer :: MLAT (NJ) integer :: MNAUF integer :: NI integer :: NJ integer :: NK Contents None","tags":"","loc":"proc/vdtouv.html","title":"VDTOUV – Flex_extract: Calculation of etadot"},{"text":"public subroutine VDUVSUB(J, XMN, XLAM, XPHI, GWSAVE, IFAX, P, GGIND, MLAT, MNAUF, NI, NJ, NK) Uses PHTOGR proc~~vduvsub~~UsesGraph proc~vduvsub VDUVSUB module~phtogr PHTOGR proc~vduvsub->module~phtogr Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Arguments Type Intent Optional Attributes Name integer :: J real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NK) real :: XPHI (NI,NK) real :: GWSAVE (8*NJ+15,NJ/2) integer :: IFAX (10,NJ) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) integer :: GGIND integer :: MLAT (NJ) integer :: MNAUF integer :: NI integer :: NJ integer :: NK Contents None","tags":"","loc":"proc/vduvsub.html","title":"VDUVSUB – Flex_extract: Calculation of etadot"},{"text":"public subroutine PHGRAD(XMN, XLAM, XPHI, GWSAVE, IFAX, P, H, MLAT, MNAUF, NI, NJ, NK) Uses PHTOGR proc~~phgrad~~UsesGraph proc~phgrad PHGRAD module~phtogr PHTOGR proc~phgrad->module~phtogr Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Berechnung des Gradienten eines Skalars aus dem Feld des\n Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der\n Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. Arguments Type Intent Optional Attributes Name real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NK) real :: XPHI (NI,NK) real :: GWSAVE (8*NJ+15,NJ/2) integer :: IFAX (10,NJ) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) real :: H (0:(MNAUF+2)*(MNAUF+3)/2) integer :: MLAT (NJ) integer :: MNAUF integer :: NI integer :: NJ integer :: NK Called by proc~~phgrad~~CalledByGraph proc~phgrad PHGRAD program~calc_etadot calc_etadot program~calc_etadot->proc~phgrad Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/phgrad.html","title":"PHGRAD – Flex_extract: Calculation of etadot"},{"text":"public subroutine PHGRACUT(XMN, XLAM, XPHI, GWSAVE, IFAX, P, H, MAUF, MNAUF, NI, NJ, MANF, NK) Uses PHTOGR proc~~phgracut~~UsesGraph proc~phgracut PHGRACUT module~phtogr PHTOGR proc~phgracut->module~phtogr Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Berechnung des Gradienten eines Skalars aus dem Feld des\n Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der\n Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. Arguments Type Intent Optional Attributes Name real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NJ,NK) real :: XPHI (NI,NJ,NK) real :: GWSAVE (4*MAUF+15) integer :: IFAX (10) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ) real :: H (0:(MNAUF+2)*(MNAUF+3)/2) integer :: MAUF integer :: MNAUF integer :: NI integer :: NJ integer :: MANF integer :: NK Calls proc~~phgracut~~CallsGraph proc~phgracut PHGRACUT proc~rfourtr RFOURTR proc~phgracut->proc~rfourtr fft99 fft99 proc~rfourtr->fft99 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents None","tags":"","loc":"proc/phgracut.html","title":"PHGRACUT – Flex_extract: Calculation of etadot"},{"text":"public subroutine CONTGL(PS, DPSDL, DPSDM, DIV, U, V, BREITE, ETA, MLAT, A, B, NI, NJ, NK) Berechnung der Divergenz aus dem Windfeld (U,V)\n im Phasenraum. Zurueckgegeben werden die Felder der\n Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. Arguments Type Intent Optional Attributes Name real :: PS (NI) real :: DPSDL (NI) real :: DPSDM (NI) real :: DIV (NI,NK) real :: U (NI,NK) real :: V (NI,NK) real :: BREITE (NJ) real :: ETA (NI,NK) integer :: MLAT (NJ) real :: A (NK+1) real :: B (NK+1) integer :: NI integer :: NJ integer :: NK Contents None","tags":"","loc":"proc/contgl.html","title":"CONTGL – Flex_extract: Calculation of etadot"},{"text":"public subroutine OMEGA(PS, DPSDL, DPSDM, DIV, U, V, BREITE, E, MLAT, A, B, NGI, NGJ, MKK) calculates $\\omega$ in the hybrid ($\\eta$-) coordinate system Arguments Type Intent Optional Attributes Name real :: PS (NGI) real :: DPSDL (NGI) real :: DPSDM (NGI) real :: DIV (NGI,MKK) real :: U (NGI,MKK) real :: V (NGI,MKK) real :: BREITE (NGJ) real :: E (NGI,MKK) integer :: MLAT (NGJ) real :: A (MKK+1) real :: B (MKK+1) integer :: NGI integer :: NGJ integer :: MKK Contents None","tags":"","loc":"proc/omega.html","title":"OMEGA – Flex_extract: Calculation of etadot"},{"text":"Used by module~~rwgrib2~~UsedByGraph module~rwgrib2 RWGRIB2 program~calc_etadot calc_etadot program~calc_etadot->module~rwgrib2 Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Contents Subroutines READLATLON WRITELATLON READSPECTRAL Subroutines public subroutine READLATLON (filename, feld, maxl, maxb, mlevel, mpar) Read a field from GRIB file on lat-lon grid Read more… Arguments Type Intent Optional Attributes Name character(len=*) :: filename real, dimension(maxl,maxb,mlevel) :: feld integer :: maxl integer :: maxb integer :: mlevel integer :: mpar (:) public subroutine WRITELATLON (IUNIT, igrib, ogrib, FELD, MAXL, MAXB, MLEVEL, MLEVELIST, MSTRIDE, MPAR) write a field on lat-lon grid to GRIB file Arguments Type Intent Optional Attributes Name integer :: IUNIT integer :: igrib integer :: ogrib real :: FELD (MAXL,MAXB,MLEVEL) integer :: MAXL integer :: MAXB integer :: MLEVEL character(len=*) :: MLEVELIST integer :: MSTRIDE integer :: MPAR (MSTRIDE) public subroutine READSPECTRAL (filename, CXMN, mnauf, mlevel, maxlev, mpar, A, B) read a GRIB file in spherical harmonics Read more… Arguments Type Intent Optional Attributes Name character(len=*) :: filename real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) integer :: mnauf integer :: mlevel integer :: maxlev integer :: mpar (:) real :: A (MAXLEV+1) real :: B (MAXLEV+1)","tags":"","loc":"module/rwgrib2.html","title":"RWGRIB2 – Flex_extract: Calculation of etadot"},{"text":"Uses PHTOGR module~~grtoph~~UsesGraph module~grtoph GRTOPH module~phtogr PHTOGR module~grtoph->module~phtogr Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Used by module~~grtoph~~UsedByGraph module~grtoph GRTOPH program~calc_etadot calc_etadot program~calc_etadot->module~grtoph Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Contents Subroutines GRPH213 GRPHSUB LGTR213 RFOUFTR Subroutines public subroutine GRPH213 (CXMN, FELD, WSAVE, IFAX, Z, W, MLAT, MNAUF, MAXL, MAXB, MLEVEL) WRONG>>> DIE ROUTINE F]HRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF KUGELKOORDINATEN DURCH Arguments Type Intent Optional Attributes Name real :: CXMN real :: FELD (MAXL,MLEVEL) real :: WSAVE integer :: IFAX (10,MAXB) real :: Z (MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) real :: W (MAXB) integer :: MLAT (MAXB) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL public subroutine GRPHSUB (L, IND, CXMN, FELD, WSAVE, IFAX, Z, W, MLAT, MNAUF, MAXL, MAXB, MLEVEL) DIE ROUTINE F]HRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF KUGELKOORDINATEN DURCH Arguments Type Intent Optional Attributes Name integer :: L integer :: IND (MAXB) real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MLEVEL) real :: WSAVE (8*MAXB+15,MAXB/2) integer :: IFAX (10,MAXB) real :: Z (MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) real :: W (MAXB) integer :: MLAT (MAXB) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL public subroutine LGTR213 (CXMN, CXM, Z, W, MLAT, MNAUF, MAXB) Read more… Arguments Type Intent Optional Attributes Name real :: CXMN real :: CXM real(kind=8) :: Z (MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) real(kind=8) :: W (MAXB) integer :: MLAT (MAXB) integer :: MNAUF integer :: MAXB public subroutine RFOUFTR (CXM, TRIGS, IFAX, MNAUF, MAXL, ISIGN) Arguments Type Intent Optional Attributes Name real :: CXM real :: TRIGS integer :: IFAX (10) integer :: MNAUF integer :: MAXL integer :: ISIGN","tags":"","loc":"module/grtoph.html","title":"GRTOPH – Flex_extract: Calculation of etadot"},{"text":"Used by module~~phtogr~~UsedByGraph module~phtogr PHTOGR proc~vduvsub VDUVSUB proc~vduvsub->module~phtogr program~calc_etadot calc_etadot program~calc_etadot->module~phtogr module~grtoph GRTOPH program~calc_etadot->module~grtoph proc~phgrad PHGRAD proc~phgrad->module~phtogr module~grtoph->module~phtogr proc~vdtouv VDTOUV proc~vdtouv->module~phtogr proc~phgracut PHGRACUT proc~phgracut->module~phtogr Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Contents Variables MAXAUF Subroutines PHGR213 PHSYM PHGCUT PHSYMCUT PHGPNS LEGTR RFOURTR GAULEG PLGNFA DPLGND SPFILTER Variables Type Visibility Attributes Name Initial integer, public, parameter :: MAXAUF = 36000 Subroutines public subroutine PHGR213 (CXMN, FELD, WSAVE, IFAX, Z, MLAT, MNAUF, MAXL, MAXB, MLEVEL) DIE ROUTINE F]HRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF DAS REDUZIERTE GAUSS'SCHE GITTER DURCH Arguments Type Intent Optional Attributes Name real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MLEVEL) real :: WSAVE (8*MAXB+15,MAXB/2) integer :: IFAX (10,MAXB) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2) integer :: MLAT (MAXB/2) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL public subroutine PHSYM (K, IND, CXMN, FELD, Z, WSAVE, IFAX, MLAT, MNAUF, MAXL, MAXB, MLEVEL) Arguments Type Intent Optional Attributes Name integer :: K integer :: IND (MAXB) real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MLEVEL) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2) real :: WSAVE (8*MAXB+15,MAXB/2) integer :: IFAX (10,MAXB) integer :: MLAT (MAXB/2) integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL public subroutine PHGCUT (CXMN, FELD, WSAVE, IFAX, Z, MNAUF, MMAX, MAUF, MANF, MAXL, MAXB, MLEVEL) DIE ROUTINE FUEHRT EINE TRANSFORMATION EINER\n FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN\n RAUM AUF KUGELKOORDINATEN DURCH. Es kann ein Teilausschnitt\n Der Erde angegeben werden. Diese Routine ist langsamer als phgrph Read more… Arguments Type Intent Optional Attributes Name real :: CXMN real :: FELD (MAXL,MAXB,MLEVEL) real :: WSAVE integer :: IFAX (10) real :: Z (0:((MMAX+3)*(MMAX+4))/2,MAXB) integer :: MNAUF integer :: MMAX integer :: MAUF integer :: MANF integer :: MAXL integer :: MAXB integer :: MLEVEL public subroutine PHSYMCUT (J, CXMN, FELD, Z, WSAVE, IFAX, MAUF, MNAUF, MAXL, MAXB, MLEVEL, MANF) Arguments Type Intent Optional Attributes Name integer :: J real :: CXMN real :: FELD (MAXL,MAXB,MLEVEL) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB) real :: WSAVE integer :: IFAX (10) integer :: MAUF integer :: MNAUF integer :: MAXL integer :: MAXB integer :: MLEVEL integer :: MANF public subroutine PHGPNS (CXMN, FELD, Z, WSAVE, IFAX, J, MNAUF, MAUF, MANF, MAXL, MAXB, MLEVEL) Arguments Type Intent Optional Attributes Name real, intent(in) :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) real :: FELD (MAXL,MAXB,MLEVEL) real, intent(in) :: Z (0:((MNAUF+3)*(MNAUF+4))/2,MAXB) real, intent(in) :: WSAVE (4*MAUF+15) integer :: IFAX (10) integer, intent(in) :: J integer, intent(in) :: MNAUF integer, intent(in) :: MAUF integer, intent(in) :: MANF integer, intent(in) :: MAXL integer, intent(in) :: MAXB integer, intent(in) :: MLEVEL public subroutine LEGTR (CXMN, CXM, Z, MNAUF, MAUF) DIESE ROUTINE BERECHNET DIE FOURIERKOEFFIZIENTEN CXM Arguments Type Intent Optional Attributes Name real :: CXMN (0:(MNAUF+1)*(MNAUF+2)-1) real :: CXM (0:MAXAUF-1) real :: Z (0:((MNAUF+3)*(MNAUF+4))/2) integer :: MNAUF integer :: MAUF public subroutine RFOURTR (CXM, TRIGS, IFAX, MNAUF, MAXL, ISIGN) Read more… Arguments Type Intent Optional Attributes Name real :: CXM real :: TRIGS (2*MAXL) integer :: IFAX (10) integer :: MNAUF integer :: MAXL integer :: ISIGN public subroutine GAULEG (X1, X2, X, W, N) BERECHNET DIE GAUSS+SCHEN BREITEN Arguments Type Intent Optional Attributes Name real :: X1 real :: X2 real :: X real :: W integer :: N public subroutine PLGNFA (LL, X, Z) PLGNDN BERECHNET ALLE NORMIERTEN ASSOZIIERTEN\n LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X)\n UND SCHREIBT SIE IN DAS FELD Z Arguments Type Intent Optional Attributes Name integer :: LL real :: X real :: Z public subroutine DPLGND (MNAUF, Z, DZ) DPLGND BERECHNET DIE ABLEITUNG DER NORMIERTEN ASSOZIIERTEN\n LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X)\n UND SCHREIBT SIE IN DAS FELD DZ Arguments Type Intent Optional Attributes Name integer :: MNAUF real :: Z real :: DZ public subroutine SPFILTER (FELDMN, MM, MMAX) Spectral Filter of Sardeshmukh and Hoskins (1984, MWR) Arguments Type Intent Optional Attributes Name real :: FELDMN (0:(MM+1)*(MM+2)-1) integer :: MM integer :: MMAX","tags":"","loc":"module/phtogr.html","title":"PHTOGR – Flex_extract: Calculation of etadot"},{"text":"Implementation of the spectral transformation using reduced the Gaussian grid Used by module~~ftrafo~~UsedByGraph module~ftrafo FTRAFO program~calc_etadot calc_etadot program~calc_etadot->module~ftrafo Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Contents Subroutines VDTOUV VDUVSUB PHGRAD PHGRACUT CONTGL OMEGA Subroutines public subroutine VDTOUV (XMN, XLAM, XPHI, GWSAVE, IFAX, P, MLAT, MNAUF, NI, NJ, NK) Berechnung der scale winds aus Vorticity und Divergenz\n uebergibt man in XMN die Divergenz, so wird der divergente Anteil des\n Windes (XPHI=Ud,XPHI=Vd) zurueckgegeben, uebergibt man die Vorticity, so\n erhaelt man den rotationellen Wind (XLAM=Vrot,XPHI=-Urot).\n Summiert man beide, erhaelt man den gesamten Scale wind Arguments Type Intent Optional Attributes Name real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NK) real :: XPHI (NI,NK) real :: GWSAVE (8*NJ+15,NJ/2) integer :: IFAX (10,NJ) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) integer :: MLAT (NJ) integer :: MNAUF integer :: NI integer :: NJ integer :: NK public subroutine VDUVSUB (J, XMN, XLAM, XPHI, GWSAVE, IFAX, P, GGIND, MLAT, MNAUF, NI, NJ, NK) Arguments Type Intent Optional Attributes Name integer :: J real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NK) real :: XPHI (NI,NK) real :: GWSAVE (8*NJ+15,NJ/2) integer :: IFAX (10,NJ) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) integer :: GGIND integer :: MLAT (NJ) integer :: MNAUF integer :: NI integer :: NJ integer :: NK public subroutine PHGRAD (XMN, XLAM, XPHI, GWSAVE, IFAX, P, H, MLAT, MNAUF, NI, NJ, NK) Berechnung des Gradienten eines Skalars aus dem Feld des\n Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der\n Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. Arguments Type Intent Optional Attributes Name real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NK) real :: XPHI (NI,NK) real :: GWSAVE (8*NJ+15,NJ/2) integer :: IFAX (10,NJ) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) real :: H (0:(MNAUF+2)*(MNAUF+3)/2) integer :: MLAT (NJ) integer :: MNAUF integer :: NI integer :: NJ integer :: NK public subroutine PHGRACUT (XMN, XLAM, XPHI, GWSAVE, IFAX, P, H, MAUF, MNAUF, NI, NJ, MANF, NK) Berechnung des Gradienten eines Skalars aus dem Feld des\n Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der\n Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. Arguments Type Intent Optional Attributes Name real :: XMN (0:(MNAUF+1)*(MNAUF+2)-1,NK) real :: XLAM (NI,NJ,NK) real :: XPHI (NI,NJ,NK) real :: GWSAVE (4*MAUF+15) integer :: IFAX (10) real :: P (0:(MNAUF+3)*(MNAUF+4)/2,NJ) real :: H (0:(MNAUF+2)*(MNAUF+3)/2) integer :: MAUF integer :: MNAUF integer :: NI integer :: NJ integer :: MANF integer :: NK public subroutine CONTGL (PS, DPSDL, DPSDM, DIV, U, V, BREITE, ETA, MLAT, A, B, NI, NJ, NK) Berechnung der Divergenz aus dem Windfeld (U,V)\n im Phasenraum. Zurueckgegeben werden die Felder der\n Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. Arguments Type Intent Optional Attributes Name real :: PS (NI) real :: DPSDL (NI) real :: DPSDM (NI) real :: DIV (NI,NK) real :: U (NI,NK) real :: V (NI,NK) real :: BREITE (NJ) real :: ETA (NI,NK) integer :: MLAT (NJ) real :: A (NK+1) real :: B (NK+1) integer :: NI integer :: NJ integer :: NK public subroutine OMEGA (PS, DPSDL, DPSDM, DIV, U, V, BREITE, E, MLAT, A, B, NGI, NGJ, MKK) calculates $\\omega$ in the hybrid ($\\eta$-) coordinate system Arguments Type Intent Optional Attributes Name real :: PS (NGI) real :: DPSDL (NGI) real :: DPSDM (NGI) real :: DIV (NGI,MKK) real :: U (NGI,MKK) real :: V (NGI,MKK) real :: BREITE (NGJ) real :: E (NGI,MKK) integer :: MLAT (NGJ) real :: A (MKK+1) real :: B (MKK+1) integer :: NGI integer :: NGJ integer :: MKK","tags":"","loc":"module/ftrafo.html","title":"FTRAFO – Flex_extract: Calculation of etadot"},{"text":"Uses PHTOGR GRTOPH FTRAFO RWGRIB2 GRIB_API program~~calc_etadot~~UsesGraph program~calc_etadot calc_etadot module~phtogr PHTOGR program~calc_etadot->module~phtogr module~rwgrib2 RWGRIB2 program~calc_etadot->module~rwgrib2 module~ftrafo FTRAFO program~calc_etadot->module~ftrafo module~grtoph GRTOPH program~calc_etadot->module~grtoph GRIB_API GRIB_API program~calc_etadot->GRIB_API module~grtoph->module~phtogr Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\n descended from. Dashed arrows point from a module or program unit to \n modules which it uses. Prepare input data for FLEXPART, esp. vertical velocity as \n etadot or etadot * dp/deta author: L. Haimberger\n date: 03/2010\n version: V4.0 Program calc_etadot Prepares input data for POP model meteorological preprocessor Calculation of etapoint on a regular \\lambda-\\phi grid and writing U,V,ETAPOINT,T,PS,Q,SD,MSL,TCC,10U, 10V, 2T,2D,LSP,CP,SSHF,SSR, \n EWSS,NSSS to an output file (input and output in GRIB 1 or 2 format). etapoint is defined as the total time derivative of \n ECMWF vertical coordinate eta multiplied by the derivative\n of pressure with respect to eta: \\frac{\\mathrm{d}\\eta}{\\mathrm{d}t}\\frac{\\partial p}{\\partial \\eta} Version history and authors: 04/1994: Leopold Haimberger, Gerhard Wotawa 2003-05-11: Alexander Beck 12/2006: L. Haimberger V2.0,\n handle arbitrary regular grids and T799 resolution data 03/2010: L. Haimberger V4.0,\n handle GRIB edition 2 fields and T1279 resolution data 04-06/2019: Petra Seibert, \n beautify code and add FORD documentation # Input required: UNIT FILE PARAMETER(S) DATA REPRESENTATION\n\n 11 fort.11 T,U,V regular lambda phi grid\n 12 fort.12 D regular lambda phi grid \n 13 fort.13 LNSP spherical harmonics\n 14 fort.14 SD,MSL,TCC,10U, \n 10V,2T,2D regular lambda phi grid \n 16 fort.16 LSP,CP,SSHF, \n SSR,EWSS,NSSS regular lambda phi grid\n 17 fort.17 Q regular lambda phi grid Output produced: UNIT FILE PARAMETER(S) DATA REPRESENTATION\n\n15 fort.15 `U,V,ETA,T,PS, \n `Q,SD,MSL,TCC,` \n `10U,10V,2T,2D,` regular lambda phi grid \n `LSP,CP,SSHF,` \n `SSR,EWSS,NSSS` ALLOCATE VARIABLES Initialisieren Legendretransformation auf das LaT/LON Gitter Initialisation of fields for FFT and Legendre transformation\n to Gaussian grid and back to phase space\n read LNSP in SH\n read u,v in SH\n Transformieren des Windes auf das Gaussgitter read DIV in SH\n Transformieren der horizontalen Divergenz auf das Gaussgitter Berechnung des Gradienten des Logarithmus des Bodendrucks auf dem Gaussgitter Berechnung der Vertikalgeschwindigkeit auf dem Gaussgitter Berechnung von Omega auf dem Gaussgitter READING OF SURFACE PRESSURE READING OF U,V READING OF LNSP on grid READING OF DIVERGENCE Initialisieren Legendretransformation auf das LaT/LON Gitter\n Without Gaussian grid calculation Legendre Polynomials are calculated\n only for one latitude to save space CREATE FILE VERTICAL.EC NEEDED BY POP MODEL READING OF T READING OF SPECIFIC HUMIDITY WRITE MODEL LEVEL DATA TO fort.15 Calculation of etadot in CONTGL needed scaled winds (ucosphi,vcosphi)\n Now we are transforming back to the usual winds. Calls program~~calc_etadot~~CallsGraph program~calc_etadot calc_etadot proc~readspectral READSPECTRAL program~calc_etadot->proc~readspectral proc~phgcut PHGCUT program~calc_etadot->proc~phgcut proc~grph213 GRPH213 program~calc_etadot->proc~grph213 grib_close_file grib_close_file program~calc_etadot->grib_close_file proc~statis STATIS program~calc_etadot->proc~statis proc~phgr213 PHGR213 program~calc_etadot->proc~phgr213 proc~gauleg GAULEG program~calc_etadot->proc~gauleg grib_open_file grib_open_file program~calc_etadot->grib_open_file set99 set99 program~calc_etadot->set99 proc~posnam POSNAM program~calc_etadot->proc~posnam proc~readlatlon READLATLON program~calc_etadot->proc~readlatlon proc~phgrad PHGRAD program~calc_etadot->proc~phgrad proc~readspectral->grib_close_file grib_count_in_file grib_count_in_file proc~readspectral->grib_count_in_file proc~phsymcut PHSYMCUT proc~phgcut->proc~phsymcut proc~phgpns PHGPNS proc~phgcut->proc~phgpns proc~grphsub GRPHSUB proc~grph213->proc~grphsub ind ind proc~grph213->ind proc~phsym PHSYM proc~phgr213->proc~phsym dcos dcos proc~gauleg->dcos proc~readlatlon->grib_close_file proc~readlatlon->grib_count_in_file proc~rfourtr RFOURTR proc~phsymcut->proc~rfourtr proc~phgpns->proc~rfourtr fft99 fft99 proc~rfourtr->fft99 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \n arrows point from an interface to procedures which implement that interface.\n This could include the module procedures in a generic interface or the\n implementation in a submodule of an interface in a parent module. Contents Variables LNPS Z T UV UV2 QA OM OMR DIV ETA ETAR DPSDL DPSDM PS DPSDT SURF FLUX OROLSM WSAVE H SINL COSL WSAVE2 BREITE GBREITE AK BK pv X1 X2 RMS MW SIG LAM CUA CVA P PP P2 XMN HILFUV LNPMN LNPMN2 LNPMN3 WEIGHT UGVG DG ETAG GWSAVE PSG HILF MLAT MPSURF MPFLUX MPORO MPAR GIFAX PI COSB DAK DBK P00 URLAR8 JMIN1 LLLAR8 MAXBMIN1 PIR8 DCOSB I J K L IERR M LTEST MK NGI NGJ MFLUX MSURF MORO LUNIT LUNIT2 MAXL MAXB MLEVEL LEVOUT LEVMIN LEVMAX MOMEGA MOMEGADIFF MGAUSS MSMOOTH MNAUF META METADIFF MDPDETA METAPAR RLO0 RLO1 RLA0 RLA1 MLEVELIST MAUF MANF IFAX IGRIB iret ogrib FILENAME Variables Type Attributes Name Initial real, ALLOCATABLE, DIMENSION (:,:) :: LNPS real, ALLOCATABLE, DIMENSION (:,:) :: Z real, ALLOCATABLE, DIMENSION (:,:,:) :: T real, ALLOCATABLE, DIMENSION (:,:,:) :: UV real, ALLOCATABLE, DIMENSION (:,:,:) :: UV2 real, ALLOCATABLE, DIMENSION (:,:,:) :: QA real, ALLOCATABLE, DIMENSION (:,:,:) :: OM real, ALLOCATABLE, DIMENSION (:,:,:) :: OMR real, ALLOCATABLE, DIMENSION (:,:,:) :: DIV real, ALLOCATABLE, DIMENSION (:,:,:) :: ETA real, ALLOCATABLE, DIMENSION (:,:,:) :: ETAR real, ALLOCATABLE, DIMENSION (:,:) :: DPSDL real, ALLOCATABLE, DIMENSION (:,:) :: DPSDM real, ALLOCATABLE, DIMENSION (:,:,:) :: PS real, ALLOCATABLE, DIMENSION (:,:,:) :: DPSDT real, ALLOCATABLE, DIMENSION (:,:,:) :: SURF real, ALLOCATABLE, DIMENSION (:,:,:) :: FLUX real, ALLOCATABLE, DIMENSION (:,:,:) :: OROLSM real, ALLOCATABLE, DIMENSION (:) :: WSAVE real, ALLOCATABLE, DIMENSION (:) :: H real, ALLOCATABLE, DIMENSION (:) :: SINL real, ALLOCATABLE, DIMENSION (:) :: COSL real, ALLOCATABLE, DIMENSION (:) :: WSAVE2 real, ALLOCATABLE, DIMENSION (:) :: BREITE real, ALLOCATABLE, DIMENSION (:) :: GBREITE real, ALLOCATABLE, DIMENSION (:) :: AK real, ALLOCATABLE, DIMENSION (:) :: BK real, ALLOCATABLE, DIMENSION (:) :: pv real :: X1 real :: X2 real :: RMS real :: MW real :: SIG real :: LAM real, ALLOCATABLE :: CUA (:,:,:) real, ALLOCATABLE :: CVA (:,:,:) real, ALLOCATABLE, DIMENSION (:,:) :: P real, ALLOCATABLE, DIMENSION (:,:) :: PP real, ALLOCATABLE, DIMENSION (:,:) :: P2 real, ALLOCATABLE, DIMENSION (:,:) :: XMN real, ALLOCATABLE, DIMENSION (:,:) :: HILFUV real, ALLOCATABLE, DIMENSION (:) :: LNPMN real, ALLOCATABLE, DIMENSION (:) :: LNPMN2 real, ALLOCATABLE, DIMENSION (:) :: LNPMN3 real, ALLOCATABLE, DIMENSION (:) :: WEIGHT real, ALLOCATABLE, DIMENSION (:,:) :: UGVG real, ALLOCATABLE, DIMENSION (:,:) :: DG real, ALLOCATABLE, DIMENSION (:,:) :: ETAG real, ALLOCATABLE, DIMENSION (:,:) :: GWSAVE real, ALLOCATABLE, DIMENSION (:) :: PSG real, ALLOCATABLE, DIMENSION (:) :: HILF integer, ALLOCATABLE, DIMENSION (:) :: MLAT integer, ALLOCATABLE, DIMENSION (:) :: MPSURF integer, ALLOCATABLE, DIMENSION (:) :: MPFLUX integer, ALLOCATABLE, DIMENSION (:) :: MPORO integer, ALLOCATABLE, DIMENSION (:) :: MPAR integer, ALLOCATABLE :: GIFAX (:,:) real :: PI real :: COSB real :: DAK real :: DBK real :: P00 real :: URLAR8 real :: JMIN1 real :: LLLAR8 real :: MAXBMIN1 real :: PIR8 real :: DCOSB integer :: I integer :: J integer :: K integer :: L integer :: IERR integer :: M integer :: LTEST integer :: MK integer :: NGI integer :: NGJ integer :: MFLUX integer :: MSURF integer :: MORO integer :: LUNIT integer :: LUNIT2 integer :: MAXL integer :: MAXB integer :: MLEVEL integer :: LEVOUT integer :: LEVMIN integer :: LEVMAX integer :: MOMEGA integer :: MOMEGADIFF integer :: MGAUSS integer :: MSMOOTH integer :: MNAUF integer :: META integer :: METADIFF integer :: MDPDETA integer :: METAPAR real :: RLO0 real :: RLO1 real :: RLA0 real :: RLA1 character(len=300) :: MLEVELIST integer :: MAUF integer :: MANF integer :: IFAX (10) integer :: IGRIB (1) integer :: iret integer :: ogrib character(len=80) :: FILENAME","tags":"","loc":"program/calc_etadot.html","title":"calc_etadot – Flex_extract: Calculation of etadot"}]} \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/Fortran/tipuesearch/tipuesearch_set.js b/Documentation/html/Documentation/Api/Fortran/tipuesearch/tipuesearch_set.js new file mode 100644 index 0000000000000000000000000000000000000000..de17a4cd0a936c787a20cd781856e7788b11fc60 --- /dev/null +++ b/Documentation/html/Documentation/Api/Fortran/tipuesearch/tipuesearch_set.js @@ -0,0 +1,23 @@ + +/* +Tipue Search 4.0 +Copyright (c) 2014 Tipue +Tipue Search is released under the MIT License +http://www.tipue.com/search +*/ + + +var tipuesearch_stop_words = ["and", "be", "by", "do", "for", "he", "how", "if", "is", "it", "my", "not", "of", "or", "the", "to", "up", "what", "when", "use", "who", "she", "my", "his", "her"]; + +var tipuesearch_replace = {"words": [ + {"word": "tipua", "replace_with": "tipue"}, + {"word": "javscript", "replace_with": "javascript"} +]}; + +var tipuesearch_stem = {"words": [ + {"word": "e-mail", "stem": "email"}, + {"word": "javascript", "stem": "script"}, + {"word": "procedure", "stem": "subroutine"}, + {"word": "procedure", "stem": "function"} +]}; + diff --git a/Documentation/html/Documentation/Api/api_fortran.html b/Documentation/html/Documentation/Api/api_fortran.html new file mode 100644 index 0000000000000000000000000000000000000000..dc27ebe9984dd3ed59d7ac9fe9888d42f91dcdb7 --- /dev/null +++ b/Documentation/html/Documentation/Api/api_fortran.html @@ -0,0 +1,241 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Fortran’s Auto Generated Documentation — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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="Evaluation" href="../../evaluation.html" /> + <link rel="prev" title="Python’s Auto Generated Documentation" href="api_python.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../overview.html">Overview</a></li> +<li class="toctree-l2"><a class="reference internal" href="../input.html">Control & Input Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="../api.html">Auto Generated Documentation</a><ul class="current"> +<li class="toctree-l3"><a class="reference internal" href="api_python.html">Python’s Auto Generated Documentation</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Fortran’s Auto Generated Documentation</a><ul class="simple"> +</ul> +</li> +</ul> +</li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <li><a href="../api.html">Auto Generated Documentation</a> »</li> + + <li>Fortran’s Auto Generated Documentation</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Api/api_fortran.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="fortran-s-auto-generated-documentation"> +<h1>Fortran’s Auto Generated Documentation<a class="headerlink" href="#fortran-s-auto-generated-documentation" title="Permalink to this headline">¶</a></h1> +<p>Link to other documentation!</p> +<p>…. f:autoprogram:: preconvert</p> +<div class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="../../evaluation.html" class="btn btn-neutral float-right" title="Evaluation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="api_python.html" class="btn btn-neutral float-left" title="Python’s Auto Generated Documentation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Api/api_python.html b/Documentation/html/Documentation/Api/api_python.html new file mode 100644 index 0000000000000000000000000000000000000000..6aa27cf7d0f36ceb1db362a84b92cb18e0dcb145 --- /dev/null +++ b/Documentation/html/Documentation/Api/api_python.html @@ -0,0 +1,4248 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Python’s Auto Generated Documentation — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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="Fortran’s Auto Generated Documentation" href="api_fortran.html" /> + <link rel="prev" title="Auto Generated Documentation" href="../api.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../overview.html">Overview</a></li> +<li class="toctree-l2"><a class="reference internal" href="../input.html">Control & Input Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="../api.html">Auto Generated Documentation</a><ul class="current"> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Python’s Auto Generated Documentation</a><ul> +<li class="toctree-l4"><a class="reference internal" href="#programs">Programs</a></li> +<li class="toctree-l4"><a class="reference internal" href="#classes">Classes</a></li> +<li class="toctree-l4"><a class="reference internal" href="#modules">Modules</a></li> +</ul> +</li> +<li class="toctree-l3"><a class="reference internal" href="api_fortran.html">Fortran’s Auto Generated Documentation</a></li> +</ul> +</li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <li><a href="../api.html">Auto Generated Documentation</a> »</li> + + <li>Python’s Auto Generated Documentation</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Api/api_python.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="python-s-auto-generated-documentation"> +<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> +</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> +</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> +</ul> +</li> +</ul> +</div> +<div class="section" id="programs"> +<h2><a class="toc-backref" href="#id3">Programs</a><a class="headerlink" href="#programs" title="Permalink to this headline">¶</a></h2> +<div class="section" id="module-install"> +<span id="install"></span><h3><a class="toc-backref" href="#id4">install</a><a class="headerlink" href="#module-install" title="Permalink to this headline">¶</a></h3> +<p>This script installs the flex_extract program.</p> +<p>Depending on the selected installation environment (locally or on the +ECMWF server ecgate or cca) the program extracts the commandline +arguments and the CONTROL file parameter and prepares the corresponding +environment. +The necessary files are collected in a tar-ball and placed +at the target location. There its untared, the environment variables will +be set and the Fortran code will be compiled. +If the ECMWF environment is selected a job script is prepared and submitted +for the remaining configurations after putting the tar-ball to the +target ECMWF server.</p> +<p>Type: install.py –help +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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</dd></dl> + +</div> +<div class="section" id="module-submit"> +<span id="submit"></span><h3><a class="toc-backref" href="#id5">submit</a><a class="headerlink" href="#module-submit" title="Permalink to this headline">¶</a></h3> +<p>This script allows the user to extract meteorological fields from the ECMWF.</p> +<p>It prepares the settings for retrieving the data from ECMWF servers and +process the resulting files to prepare them for the use with FLEXPART or +FLEXTRA.</p> +<p>If it is supposed to work locally then it works through the necessary +functions get_mars_data and prepare_flexpart. Otherwise it prepares +a job script (korn shell) which will do the necessary work on the +ECMWF server. This script will de submitted via the ecaccess command +ecaccess-job-submit.</p> +<p>This file can also be imported as a module which then contains the following +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> +</ul> +</div></blockquote> +<p>Type: submit.py –help +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> +<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” +or “queue=cca”.</p> +</dd></dl> + +<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> +<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 +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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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 +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> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</div> +</div> +<div class="section" id="classes"> +<h2><a class="toc-backref" href="#id6">Classes</a><a class="headerlink" href="#classes" title="Permalink to this headline">¶</a></h2> +<div class="section" id="module-ControlFile"> +<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> +<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 +from the MARS archive for driving FLEXPART are set in a CONTROL file. +Some specific parameters like the start and end dates can be overwritten +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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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”, +“DESTINATION” and “GATEWAY” with its corresponding values. +They were read from the file “ECMWF_ENV”.</td> +</tr> +</tbody> +</table> +</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> +<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. +Used to check if ecuid, ecgid, gateway and destination +are set correctly and are not empty.</td> +</tr> +</tbody> +</table> +</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> +<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 +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> +</dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-EcFlexpart"> +<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> +<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 +instance with all the parameter and settings necessary for retrieving +MARS data and modifing them so they are fitting FLEXPART needs. The class +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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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 +parameter “inputfiles” to seperate specific parameters into fort.* +files. Afterwards the FORTRAN program is called to convert +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 +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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 +directory if its not equal to the input directory. +The following modifications might be done if +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> +</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> +<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 +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. +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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-GribUtil"> +<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> +<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 +direct connection with the grib files. This class provides some higher +functions which apply a set of GRIB API tools together in the respective +context. So, the class initially contains a list of grib files (their +names) and the using program then applies the methods directly on the +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> +<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 +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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</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></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> +<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> +</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></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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-MarsRetrieval"> +<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> +<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 +by displaying the selected parameters and their values and the actual +retrievement of the data through a mars request or a Python web api +interface. The initialization already expects all the keyword values.</p> +<p>A description of MARS keywords/arguments and examples of their +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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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 +are taken from the defined class attributes.</p> +</dd></dl> + +<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> +<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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-UioFiles"> +<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> +<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> +<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> +</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> +<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> +</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> +<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> +</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> +<dd><p>Deletes the files.</p> +</dd></dl> + +</dd></dl> + +</div> +</div> +<div class="section" id="modules"> +<h2><a class="toc-backref" href="#id12">Modules</a><a class="headerlink" href="#modules" title="Permalink to this headline">¶</a></h2> +<div class="section" id="module-get_mars_data"> +<span id="get-mars-data"></span><h3><a class="toc-backref" href="#id13">get_mars_data</a><a class="headerlink" href="#module-get_mars_data" title="Permalink to this headline">¶</a></h3> +<p>This script extracts MARS data from ECMWF servers.</p> +<p>At first, the necessary parameters from command line and CONTROL files are +extracted. They define the data set to be extracted from MARS.</p> +<p>This file can also be imported as a module and contains the following +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> +</ul> +</div></blockquote> +<p>Type: get_mars_data.py –help +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> +<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> +</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></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> +<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 +the rest of the parameter list. +Default value is False.</li> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</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> +<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> +</dd></dl> + +<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> +<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 +beginning and at the end (used for complete disaggregation of +original period)</p> +<p>If forecast data longer than 24h are to be retrieved, then +collect accumulation data (flux data) with the exact start and end date +(disaggregation will be done for the exact time period with +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 +the rest of the parameter list. +Default value is False.</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> +</ul> +</p> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</dd></dl> + +</div> +<div class="section" id="module-prepare_flexpart"> +<span id="prepare-flexpart"></span><h3><a class="toc-backref" href="#id14">prepare_flexpart</a><a class="headerlink" href="#module-prepare_flexpart" title="Permalink to this headline">¶</a></h3> +<p>This script prepares the final version of the grib files which are +then used by FLEXPART.</p> +<p>It converts the bunch of grib files extracted via get_mars_data before, +by doing the necessary conversion to get consistent grids or the +disaggregation of flux data. Finally, the data fields are combined +in files per available hour with the naming convention xxYYMMDDHH, +where xx should be 2 arbitrary letters (mostly xx is chosen to be “EN”).</p> +<p>This file can also be imported as a module which then contains the following +functions:</p> +<blockquote> +<div><ul class="simple"> +<li>main</li> +<li>prepare_flexpart</li> +</ul> +</div></blockquote> +<p>Type: prepare_flexpart.py –help +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> +<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> +</dd></dl> + +<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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</div> +<div class="section" id="module-tools"> +<span id="tools"></span><h3><a class="toc-backref" href="#id15">tools</a><a class="headerlink" href="#module-tools" title="Permalink to this headline">¶</a></h3> +<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> +<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> +</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> +<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 +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> +</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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</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> +<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. +‘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 +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> +</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></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> +<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. +‘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> +</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> +<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> +</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></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> +<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. +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> +</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> +<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> +</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> +<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> +</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> +<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”, +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> +</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> +<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> +</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> +<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> +</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> +<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>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: +<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> +</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. +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></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> +<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 +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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</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> +<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. +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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</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> +<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 +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> +</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></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> +<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 +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. +The key is the parameter number and the value is the +short name of the parameter.</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 +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></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> +<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 +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. +The key is the parameter number and the value is the +short name of the parameter.</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 +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></dl> + +</div> +<div class="section" id="module-checks"> +<span id="checks"></span><h3><a class="toc-backref" href="#id16">checks</a><a class="headerlink" href="#module-checks" title="Permalink to this headline">¶</a></h3> +<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> +<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> +</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></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> +<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> +</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></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> +<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> +</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></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> +<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> +</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> +<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 +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> +</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></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> +<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> +</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> +<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> +</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> +</ul> +</p> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +</ul> +</p> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</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 +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 +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> +</ul> +</p> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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. +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. +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> +</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> +<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> +</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. +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></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> +<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> +</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> +<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> +</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> +</ul> +</p> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</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> +<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. +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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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. +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> +</ul> +</td> +</tr> +</tbody> +</table> +</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> +<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> +</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> +<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> +</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> +<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> +</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></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> +</ul> +</dd> +</dl> +<p>Different versions of disaggregation is provided for rainfall +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> +<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 +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>(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 +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. +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> +<p class="rubric">References</p> +<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</p> +</dd></dl> + +<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> +<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 +of the fluxes within each timespan. +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> +<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> +</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> +<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 +of the fluxes within each timespan. +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> +<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> +</dl> +</div> +</dd></dl> + +<div class="toctree-wrapper compound"> +</div> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="api_fortran.html" class="btn btn-neutral float-right" title="Fortran’s Auto Generated Documentation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="../api.html" class="btn btn-neutral float-left" title="Auto Generated Documentation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Input/changes.html b/Documentation/html/Documentation/Input/changes.html new file mode 100644 index 0000000000000000000000000000000000000000..a43223a3721dd8e7b869e0fc7ae41b42d6fd8185 --- /dev/null +++ b/Documentation/html/Documentation/Input/changes.html @@ -0,0 +1,260 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>CONTROL file changes — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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="ECMWF User Credential file ECMWF_ENV" href="ecmwf_env.html" /> + <link rel="prev" title="CONTROL file examples" href="examples.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../overview.html">Overview</a></li> +<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="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> +<li class="toctree-l3"><a class="reference internal" href="control_params.html">The CONTROL parameters</a></li> +<li class="toctree-l3"><a class="reference internal" href="examples.html">CONTROL file examples</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">CONTROL file changes</a><ul class="simple"> +</ul> +</li> +<li class="toctree-l3"><a class="reference internal" href="ecmwf_env.html">ECMWF User Credential file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="templates.html">Templates</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="../api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <li><a href="../input.html">Control & Input Data</a> »</li> + + <li>CONTROL file changes</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Input/changes.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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> +</ul> +</dd> +</dl> +<div class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="ecmwf_env.html" class="btn btn-neutral float-right" title="ECMWF User Credential file ECMWF_ENV" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="examples.html" class="btn btn-neutral float-left" title="CONTROL file examples" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Input/compilejob.html b/Documentation/html/Documentation/Input/compilejob.html new file mode 100644 index 0000000000000000000000000000000000000000..c31aa5aaf093fb884b925055b77f9997d97fc0ff --- /dev/null +++ b/Documentation/html/Documentation/Input/compilejob.html @@ -0,0 +1,347 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>The Compilation Jobscript compilejob.ksh — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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="prev" title="The Installation Script - setup.sh" href="setup.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../overview.html">Overview</a></li> +<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 current"><a class="current reference internal" href="#">The Compilation Jobscript <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code></a><ul> +<li class="toctree-l4"><a class="reference internal" href="#what-does-the-compilation-script-do">What does the compilation script do?</a></li> +<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="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> +<li class="toctree-l3"><a class="reference internal" href="control_params.html">The CONTROL parameters</a></li> +<li class="toctree-l3"><a class="reference internal" href="examples.html">CONTROL file examples</a></li> +<li class="toctree-l3"><a class="reference internal" href="changes.html">CONTROL file changes</a></li> +<li class="toctree-l3"><a class="reference internal" href="ecmwf_env.html">ECMWF User Credential file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="templates.html">Templates</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="../api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <li><a href="../input.html">Control & Input Data</a> »</li> + + <li>The Compilation Jobscript <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code></li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Input/compilejob.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="the-compilation-jobscript-compilejob-ksh"> +<h1>The Compilation Jobscript <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code><a class="headerlink" href="#the-compilation-jobscript-compilejob-ksh" title="Permalink to this headline">¶</a></h1> +<p>The compilejob is a Korn-shell script which will be created during the installation process for the application modes <strong>remote</strong> and <strong>gateway</strong> from a template called <code class="docutils literal notranslate"><span class="pre">compilejob.template</span></code> in the template directory.</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> +<p>The jobscript has a number of settings for the batch system which are fixed and differentiates between the <em>ecgate</em> and the <em>cca/ccb</em> +server system to load the necessary modules for the environment when submitted to the batch queue.</p> +<p>The submission is done by the <code class="docutils literal notranslate"><span class="pre">ECaccess</span></code> tool from within <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> with the command <code class="docutils literal notranslate"><span class="pre">ecaccess-job-submit</span></code>.</p> +<div class="section" id="what-does-the-compilation-script-do"> +<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> +</ol> +</div></blockquote> +</div> +<div class="section" id="example-compilejob-ksh"> +<h2>Example <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code><a class="headerlink" href="#example-compilejob-ksh" title="Permalink to this headline">¶</a></h2> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="ch">#!/bin/ksh</span> + +<span class="c1"># ON ECGB:</span> +<span class="c1"># start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server</span> +<span class="c1"># start with sbatch NAME_OF_THIS_FILE directly on machine</span> + +<span class="c1">#SBATCH --workdir=/scratch/ms/at/km4a</span> +<span class="c1">#SBATCH --qos=normal</span> +<span class="c1">#SBATCH --job-name=flex_ecmwf</span> +<span class="c1">#SBATCH --output=flex_ecmwf.%j.out</span> +<span class="c1">#SBATCH --error=flex_ecmwf.%j.out</span> +<span class="c1">#SBATCH --mail-type=FAIL</span> +<span class="c1">#SBATCH --time=12:00:00</span> + +<span class="c1">## CRAY specific batch requests</span> +<span class="c1">##PBS -N flex_ecmwf</span> +<span class="c1">##PBS -q ns</span> +<span class="c1">##PBS -S /usr/bin/ksh</span> +<span class="c1">##PBS -o /scratch/ms/at/km4a/flex_ecmwf.${Jobname}.${Job_ID}.out</span> +<span class="c1"># job output is in .ecaccess_DO_NOT_REMOVE</span> +<span class="c1">##PBS -j oe</span> +<span class="c1">##PBS -V</span> +<span class="c1">##PBS -l EC_threads_per_task=1</span> +<span class="c1">##PBS -l EC_memory_per_task=3200MB</span> + +<span class="nb">set</span> -x +<span class="nb">export</span> <span class="nv">VERSION</span><span class="o">=</span><span class="m">7</span>.1 +<span class="k">case</span> <span class="si">${</span><span class="nv">HOST</span><span class="si">}</span> in + *ecg*<span class="o">)</span> + module unload grib_api + module unload eccodes + module unload python + module unload emos + module load python3 + 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="p">;;</span> + *cca*<span class="o">)</span> + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + module load eccodes/2.12.0 + module load emos + <span class="nb">echo</span> <span class="si">${</span><span class="nv">GROUP</span><span class="si">}</span> + <span class="nb">echo</span> <span class="si">${</span><span class="nv">HOME</span><span class="si">}</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 $1, $2, $3, $4}'</span> + <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="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 +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 +<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 +<span class="k">else</span> + <span class="nb">echo</span> Environment: >>flexcompile + env >> flexcompile + mail -s <span class="s2">"ERROR! flexcompile.</span><span class="si">${</span><span class="nv">HOST</span><span class="si">}</span><span class="s2">.</span><span class="nv">$$</span><span class="s2">"</span> <span class="si">${</span><span class="nv">USER</span><span class="si">}</span> <flexcompile +<span class="k">fi</span> +</pre></div> +</div> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <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="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> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Input/control.html b/Documentation/html/Documentation/Input/control.html new file mode 100644 index 0000000000000000000000000000000000000000..6c23a5dc79322e85618d8b7ce9f1a45b29c98ebd --- /dev/null +++ b/Documentation/html/Documentation/Input/control.html @@ -0,0 +1,403 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>The CONTROL file — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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 CONTROL parameters" href="control_params.html" /> + <link rel="prev" title="The Jobscript job.ksh" href="jobscript.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../overview.html">Overview</a></li> +<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="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> +<li class="toctree-l4"><a class="reference internal" href="#format-of-control-files">Format of CONTROL files</a></li> +<li class="toctree-l4"><a class="reference internal" href="#example-control-files">Example CONTROL files</a></li> +<li class="toctree-l4"><a class="reference internal" href="#control-file">CONTROL file</a></li> +</ul> +</li> +<li class="toctree-l3"><a class="reference internal" href="control_params.html">The CONTROL parameters</a></li> +<li class="toctree-l3"><a class="reference internal" href="examples.html">CONTROL file examples</a></li> +<li class="toctree-l3"><a class="reference internal" href="changes.html">CONTROL file changes</a></li> +<li class="toctree-l3"><a class="reference internal" href="ecmwf_env.html">ECMWF User Credential file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="templates.html">Templates</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="../api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <li><a href="../input.html">Control & Input Data</a> »</li> + + <li>The CONTROL file</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Input/control.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="the-control-file"> +<h1>The CONTROL file<a class="headerlink" href="#the-control-file" title="Permalink to this headline">¶</a></h1> +<p>This file is an input file for <code class="docutils literal notranslate"><span class="pre">flex_extract's</span></code> main script <code class="docutils literal notranslate"><span class="pre">submit.py</span></code>. +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> +<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 +the stream, the field type for forecasts, the method for extracting the vertical coordinate and other things like time or horizontal resolution.</p> +<div class="section" id="format-of-control-files"> +<h2>Format of CONTROL files<a class="headerlink" href="#format-of-control-files" title="Permalink to this headline">¶</a></h2> +<p>The first string of each line is the parameter name, the following string(s) (separated by spaces) is (are) the parameter values. +The parameters can be sorted in any order with one parameter per line. +Comments are started with a ‘#’ - sign. Some of these parameters can be overruled by the command line +parameters given to the <code class="docutils literal notranslate"><span class="pre">submit.py</span></code> script. +All parameters have default values. Only those parameters which have to be changed +must be listed in the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files.</p> +</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>. +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> +</div> +<div class="section" id="control-file"> +<h2>CONTROL file<a class="headerlink" href="#control-file" title="Permalink to this headline">¶</a></h2> +<p>The file <code class="docutils literal notranslate"><span class="pre">CONTROL.documentation</span></code> documents the available parameters +in grouped sections with their default values. In <a class="reference internal" href="control_params.html"><span class="doc">The CONTROL parameters</span></a> you can find a more +detailed description with additional hints, possible values and some useful information about +the setting of these parameters.</p> +<div class="literal-block-wrapper docutils container" id="id1"> +<div class="code-block-caption"><span class="caption-text">CONTROL.documentation</span><a class="headerlink" href="#id1" title="Permalink to this code">¶</a></div> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1">################################################################################</span> +<span class="c1"># Comprehensive list of relevant CONTROL file parameters with</span> +<span class="c1"># short descriptions and default values. </span> +<span class="c1">#</span> +<span class="c1"># For more details on how to select and define parameters </span> +<span class="c1"># please see Table of CONTROLparameters. </span> +<span class="c1">#</span> +<span class="c1"># AUTHOR: Anne Philipp</span> +<span class="c1"># DATE: 05. February 2019</span> +<span class="c1">################################################################################</span> + +<span class="c1">#===============================================================================</span> +<span class="c1"># USER SECTION:</span> +<span class="c1"># User specific information for ECMWF server.</span> +<span class="c1"># Information are needed for storage or data transfer to local gateway server.</span> +<span class="c1"># (OPTIONAL: INFORMATION ARE KNOWN THROUGH EXTRA FILE AFTER INSTALLATION)</span> +<span class="c1">#-------------------------------------------------------------------------------</span> +ECUID None +ECGID None +DESTINATION None +GATEWAY None + +<span class="c1">#===============================================================================</span> +<span class="c1"># GENERAL SECTION:</span> +<span class="c1"># Specific storage, notification and data transfer settings.</span> +<span class="c1"># Selection of ECMWF access interface and extra output options. </span> +<span class="c1">#-------------------------------------------------------------------------------</span> +DEBUG <span class="m">0</span> +REQUEST <span class="m">0</span> +PUBLIC <span class="m">0</span> +OPER <span class="m">0</span> +ECSTORAGE <span class="m">0</span> +ECTRANS <span class="m">0</span> +PREFIX <span class="s1">'EN'</span> +ECFSDIR <span class="s1">'ectmp:/${USER}/econdemand/'</span> +MAILFAIL <span class="o">[</span><span class="s1">'${USER}'</span><span class="o">]</span> +MAILOPS <span class="o">[</span><span class="s1">'${USER}'</span><span class="o">]</span> + +<span class="c1">#===============================================================================</span> +<span class="c1"># TIME SECTION:</span> +<span class="c1"># Selection of time period and temporal resolution for extraction period.</span> +<span class="c1">#-------------------------------------------------------------------------------</span> +START_DATE +END_DATE +DATE_CHUNK <span class="m">3</span> +DTIME None +BASETIME None + +<span class="c1">#===============================================================================</span> +<span class="c1"># DATA SECTION:</span> +<span class="c1"># General description of data set.</span> +<span class="c1">#-------------------------------------------------------------------------------</span> +CLASS None +DATASET None +STREAM None +NUMBER <span class="s1">'OFF'</span> +EXPVER <span class="s1">'1'</span> +FORMAT <span class="s1">'GRIB1'</span> + +<span class="c1">#===============================================================================</span> +<span class="c1"># DATA FIELDS SECTION:</span> +<span class="c1"># Specific selection of field composition regarding type, analysis or forecast </span> +<span class="c1"># time and the forecast time step.</span> +<span class="c1">#-------------------------------------------------------------------------------</span> +TYPE None +TIME None +STEP None +MAXSTEP None + +<span class="c1">#===============================================================================</span> +<span class="c1"># FLUX DATA FIELDS SECTION:</span> +<span class="c1"># Specific selection of flux field composition regarding forecast field type</span> +<span class="c1"># the forecast start times and the maximum forecast step per start time.</span> +<span class="c1"># Specification of disaggregation method of precipitation data.</span> +<span class="c1">#-------------------------------------------------------------------------------</span> +ACCTYPE None +ACCTIME None +ACCMAXSTEP None +RRINT <span class="m">0</span> + +<span class="c1">#===============================================================================</span> +<span class="c1"># DOMAIN SECTION: </span> +<span class="c1"># Definition of horizontal area, spatial resolution and vertical levels. </span> +<span class="c1">#-------------------------------------------------------------------------------</span> +GRID None +RESOL None +SMOOTH <span class="m">0</span> +LEFT None +LOWER None +UPPER None +RIGHT None +LEVEL None +LEVELIST None + +<span class="c1">#===============================================================================</span> +<span class="c1"># VERTICAL WIND SECTION:</span> +<span class="c1"># Selection of vertical wind calculation method.</span> +<span class="c1">#-------------------------------------------------------------------------------</span> +GAUSS <span class="m">0</span> +ACCURACY <span class="m">24</span> +OMEGA <span class="m">0</span> +OMEGADIFF <span class="m">0</span> +ETA <span class="m">0</span> +ETADIFF <span class="m">0</span> +DPDETA <span class="m">1</span> +ETAPAR <span class="m">77</span> + +<span class="c1">#===============================================================================</span> +<span class="c1"># ADDITIONAL DATA SECTION:</span> +<span class="c1"># Specification of extra data fields to be extracted.</span> +<span class="c1">#-------------------------------------------------------------------------------</span> +CWC <span class="m">0</span> +WRF <span class="m">0</span> +DOUBLEELDA <span class="m">0</span> +ADDPAR None +</pre></div> +</div> +</div> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="control_params.html" class="btn btn-neutral float-right" title="The CONTROL parameters" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="jobscript.html" class="btn btn-neutral float-left" title="The Jobscript job.ksh" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Input/control_params.html b/Documentation/html/Documentation/Input/control_params.html new file mode 100644 index 0000000000000000000000000000000000000000..7c64717bd902826d1edbcd0d2007e0457b2a5a5d --- /dev/null +++ b/Documentation/html/Documentation/Input/control_params.html @@ -0,0 +1,1177 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>The CONTROL parameters — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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="CONTROL file examples" href="examples.html" /> + <link rel="prev" title="The CONTROL file" href="control.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../overview.html">Overview</a></li> +<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="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> +<li class="toctree-l3 current"><a class="current reference internal" href="#">The CONTROL parameters</a><ul> +<li class="toctree-l4"><a class="reference internal" href="#user-section">User Section</a></li> +<li class="toctree-l4"><a class="reference internal" href="#general-section">General Section</a></li> +<li class="toctree-l4"><a class="reference internal" href="#time-section">Time Section</a></li> +<li class="toctree-l4"><a class="reference internal" href="#data-section">Data Section</a></li> +<li class="toctree-l4"><a class="reference internal" href="#data-field-section">Data field Section</a></li> +<li class="toctree-l4"><a class="reference internal" href="#flux-data-section">Flux data Section</a></li> +<li class="toctree-l4"><a class="reference internal" href="#domain-section">Domain Section</a></li> +<li class="toctree-l4"><a class="reference internal" href="#vertical-wind-section">Vertical wind Section</a></li> +<li class="toctree-l4"><a class="reference internal" href="#additional-data-section">Additional data Section</a></li> +</ul> +</li> +<li class="toctree-l3"><a class="reference internal" href="examples.html">CONTROL file examples</a></li> +<li class="toctree-l3"><a class="reference internal" href="changes.html">CONTROL file changes</a></li> +<li class="toctree-l3"><a class="reference internal" href="ecmwf_env.html">ECMWF User Credential file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="templates.html">Templates</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="../api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <li><a href="../input.html">Control & Input Data</a> »</li> + + <li>The CONTROL parameters</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Input/control_params.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="the-control-parameters"> +<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"> +<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%" /> +</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> +</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> +</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"> +<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%" /> +</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> +</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”. +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> +</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"> +<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%" /> +</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> +</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> +</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"> +<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%" /> +</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> +</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> +</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"> +<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%" /> +</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> +</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> +</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"> +<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%" /> +</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> +</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> +</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"> +<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%" /> +</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> +</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> +</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"> +<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%" /> +</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> +</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> +</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"> +<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%" /> +</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> +</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> +</tr> +</tbody> +</table> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="examples.html" class="btn btn-neutral float-right" title="CONTROL file examples" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="control.html" class="btn btn-neutral float-left" title="The CONTROL file" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Input/ecmwf_env.html b/Documentation/html/Documentation/Input/ecmwf_env.html new file mode 100644 index 0000000000000000000000000000000000000000..e54ca2f5b5096dcd87d20fda5a562990405c38de --- /dev/null +++ b/Documentation/html/Documentation/Input/ecmwf_env.html @@ -0,0 +1,265 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ECMWF User Credential file ECMWF_ENV — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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="Templates" href="templates.html" /> + <link rel="prev" title="CONTROL file changes" href="changes.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../overview.html">Overview</a></li> +<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="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> +<li class="toctree-l3"><a class="reference internal" href="control_params.html">The CONTROL parameters</a></li> +<li class="toctree-l3"><a class="reference internal" href="examples.html">CONTROL file examples</a></li> +<li class="toctree-l3"><a class="reference internal" href="changes.html">CONTROL file changes</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">ECMWF User Credential file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code></a><ul> +<li class="toctree-l4"><a class="reference internal" href="#content-of-ecmwf-env">Content of <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code></a></li> +</ul> +</li> +<li class="toctree-l3"><a class="reference internal" href="templates.html">Templates</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="../api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <li><a href="../input.html">Control & Input Data</a> »</li> + + <li>ECMWF User Credential file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code></li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Input/ecmwf_env.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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 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> +</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> +<p>The following shows an example of the content of an <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code> file:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ECUID user_name +ECGID user_group +GATEWAY gateway_name +DESTINATION destination_name +</pre></div> +</div> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="templates.html" class="btn btn-neutral float-right" title="Templates" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="changes.html" class="btn btn-neutral float-left" title="CONTROL file changes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Input/examples.html b/Documentation/html/Documentation/Input/examples.html new file mode 100644 index 0000000000000000000000000000000000000000..53fffd27fef269879327f8df5cc6daa8916aaa7e --- /dev/null +++ b/Documentation/html/Documentation/Input/examples.html @@ -0,0 +1,277 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>CONTROL file examples — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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="CONTROL file changes" href="changes.html" /> + <link rel="prev" title="The CONTROL parameters" href="control_params.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../overview.html">Overview</a></li> +<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="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> +<li class="toctree-l3"><a class="reference internal" href="control_params.html">The CONTROL parameters</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">CONTROL file examples</a><ul class="simple"> +</ul> +</li> +<li class="toctree-l3"><a class="reference internal" href="changes.html">CONTROL file changes</a></li> +<li class="toctree-l3"><a class="reference internal" href="ecmwf_env.html">ECMWF User Credential file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="templates.html">Templates</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="../api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <li><a href="../input.html">Control & Input Data</a> »</li> + + <li>CONTROL file examples</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Input/examples.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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>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> +<p>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</p> +<div class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="changes.html" class="btn btn-neutral float-right" title="CONTROL file changes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="control_params.html" class="btn btn-neutral float-left" title="The CONTROL parameters" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Input/fortran_makefile.html b/Documentation/html/Documentation/Input/fortran_makefile.html new file mode 100644 index 0000000000000000000000000000000000000000..a0a062ee039ceb62586a22c625adff1fdcfff52f --- /dev/null +++ b/Documentation/html/Documentation/Input/fortran_makefile.html @@ -0,0 +1,283 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>The Fortran Makefile - CONVERT2 — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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 executable Script - run.sh" href="run.html" /> + <link rel="prev" title="The Compilation Jobscript compilejob.ksh" href="compilejob.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../overview.html">Overview</a></li> +<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"> +</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> +<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> +<li class="toctree-l3"><a class="reference internal" href="control_params.html">The CONTROL parameters</a></li> +<li class="toctree-l3"><a class="reference internal" href="examples.html">CONTROL file examples</a></li> +<li class="toctree-l3"><a class="reference internal" href="changes.html">CONTROL file changes</a></li> +<li class="toctree-l3"><a class="reference internal" href="ecmwf_env.html">ECMWF User Credential file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="templates.html">Templates</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="../api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <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 class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Input/fortran_makefile.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <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> +<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> +<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">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">For the use on ECMWF’s server <strong>cca/ccb</strong>.</div> +</div> +</div></blockquote> +<div class="line-block"> +<div class="line"><strong>Local mode</strong></div> +<div class="line">It is necessary to adapt <strong>ECCODES_INCLUDE_DIR</strong> and <strong>ECCODES_LIB</strong></div> +</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> +<div class="line-block"> +<div class="line"><strong>Makefile.local.ifort</strong></div> +<div class="line">For the use with ifort compiler.</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 +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> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="run.html" class="btn btn-neutral float-right" title="The executable Script - run.sh" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="compilejob.html" class="btn btn-neutral float-left" title="The Compilation Jobscript compilejob.ksh" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Input/jobscript.html b/Documentation/html/Documentation/Input/jobscript.html new file mode 100644 index 0000000000000000000000000000000000000000..28e9bc4edbc5ffd6cc3deadf2d3c05dac16689b2 --- /dev/null +++ b/Documentation/html/Documentation/Input/jobscript.html @@ -0,0 +1,426 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>The Jobscript job.ksh — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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 CONTROL file" href="control.html" /> + <link rel="prev" title="The executable Script - run.sh" href="run.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../overview.html">Overview</a></li> +<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="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> +<li class="toctree-l4"><a class="reference internal" href="#example-jobscript-ksh">Example <code class="docutils literal notranslate"><span class="pre">jobscript.ksh</span></code></a></li> +</ul> +</li> +<li class="toctree-l3"><a class="reference internal" href="control.html">The CONTROL file</a></li> +<li class="toctree-l3"><a class="reference internal" href="control_params.html">The CONTROL parameters</a></li> +<li class="toctree-l3"><a class="reference internal" href="examples.html">CONTROL file examples</a></li> +<li class="toctree-l3"><a class="reference internal" href="changes.html">CONTROL file changes</a></li> +<li class="toctree-l3"><a class="reference internal" href="ecmwf_env.html">ECMWF User Credential file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="templates.html">Templates</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="../api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <li><a href="../input.html">Control & Input Data</a> »</li> + + <li>The Jobscript <code class="docutils literal notranslate"><span class="pre">job.ksh</span></code></li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Input/jobscript.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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><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> +<p>The jobscript has a number of settings for the batch system which are fixed and differentiates between the <em>ecgate</em> and the <em>cca/ccb</em> +server system to load the necessary modules for the environment when submitted to the batch queue.</p> +<p>The submission is done by the <code class="docutils literal notranslate"><span class="pre">ECaccess</span></code> tool from within <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> with the command <code class="docutils literal notranslate"><span class="pre">ecaccess-job-submit</span></code>.</p> +<div class="section" id="what-does-the-jobscript-do"> +<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> +</ol> +</div></blockquote> +</div> +<div class="section" id="example-jobscript-ksh"> +<h2>Example <code class="docutils literal notranslate"><span class="pre">jobscript.ksh</span></code><a class="headerlink" href="#example-jobscript-ksh" title="Permalink to this headline">¶</a></h2> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="ch">#!/bin/ksh</span> + +<span class="c1"># ON ECGB:</span> +<span class="c1"># start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server</span> +<span class="c1"># start with sbatch NAME_OF_THIS_FILE directly on machine</span> + +<span class="c1">#SBATCH --workdir=/scratch/ms/at/km4a</span> +<span class="c1">#SBATCH --qos=normal</span> +<span class="c1">#SBATCH --job-name=flex_ecmwf</span> +<span class="c1">#SBATCH --output=flex_ecmwf.%j.out</span> +<span class="c1">#SBATCH --error=flex_ecmwf.%j.out</span> +<span class="c1">#SBATCH --mail-type=FAIL</span> +<span class="c1">#SBATCH --time=12:00:00</span> + +<span class="c1">## CRAY specific batch requests</span> +<span class="c1">##PBS -N flex_ecmwf</span> +<span class="c1">##PBS -q np</span> +<span class="c1">##PBS -S /usr/bin/ksh</span> +<span class="c1">## -o /scratch/ms/at/km4a/flex_ecmwf.${PBS_JOBID}.out</span> +<span class="c1">## job output is in .ecaccess_DO_NOT_REMOVE</span> +<span class="c1">##PBS -j oe</span> +<span class="c1">##PBS -V</span> +<span class="c1">##PBS -l EC_threads_per_task=24</span> +<span class="c1">##PBS -l EC_memory_per_task=32000MB</span> + +<span class="nb">set</span> -x +<span class="nb">export</span> <span class="nv">VERSION</span><span class="o">=</span><span class="m">7</span>.1 +<span class="k">case</span> <span class="si">${</span><span class="nv">HOST</span><span class="si">}</span> in + *ecg*<span class="o">)</span> + module unload grib_api + module unload eccodes + module unload python + module unload emos + 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="p">;;</span> + *cca*<span class="o">)</span> + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + 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="p">;;</span> +<span class="k">esac</span> + +<span class="nb">cd</span> <span class="si">${</span><span class="nv">SCRATCH</span><span class="si">}</span> +mkdir -p python<span class="nv">$$</span> +<span class="nb">cd</span> python<span class="nv">$$</span> + +<span class="nb">export</span> <span class="nv">CONTROL</span><span class="o">=</span>CONTROL + +cat ><span class="si">${</span><span class="nv">CONTROL</span><span class="si">}</span><span class="s"><<EOF</span> +<span class="s">accmaxstep 24</span> +<span class="s">acctime 18</span> +<span class="s">acctype FC</span> +<span class="s">accuracy 24</span> +<span class="s">addpar None</span> +<span class="s">area 74.0/-24.0/10.0/60.0</span> +<span class="s">basetime None</span> +<span class="s">cds_api None</span> +<span class="s">controlfile CONTROL_CERA</span> +<span class="s">cwc 1</span> +<span class="s">dataset None</span> +<span class="s">date_chunk 3</span> +<span class="s">debug 1</span> +<span class="s">destination annep@genericSftp</span> +<span class="s">doubleelda 0</span> +<span class="s">dpdeta 1</span> +<span class="s">dtime 3</span> +<span class="s">ec_api None</span> +<span class="s">ecfsdir ectmp:/${USER}/econdemand/</span> +<span class="s">ecgid at</span> +<span class="s">ecstorage 0</span> +<span class="s">ectrans 1</span> +<span class="s">ecuid km4a</span> +<span class="s">end_date 20000809</span> +<span class="s">eta 1</span> +<span class="s">etadiff 0</span> +<span class="s">etapar 77</span> +<span class="s">expver 1</span> +<span class="s">format GRIB1</span> +<span class="s">gateway srvx8.img.univie.ac.at</span> +<span class="s">gauss 0</span> +<span class="s">gaussian</span> +<span class="s">grib2flexpart 0</span> +<span class="s">grid 1.0/1.0</span> +<span class="s">inputdir /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/run/workspace</span> +<span class="s">install_target None</span> +<span class="s">job_chunk 1</span> +<span class="s">job_template job.temp</span> +<span class="s">left -24.</span> +<span class="s">level 91</span> +<span class="s">levelist 1/to/91</span> +<span class="s">logicals gauss omega omegadiff eta etadiff dpdeta cwc wrf grib2flexpart ecstorage ectrans debug oper request public purefc rrint doubleelda</span> +<span class="s">lower 10.</span> +<span class="s">mailfail ${USER}</span> +<span class="s">mailops ${USER}</span> +<span class="s">makefile Makefile.gfortran</span> +<span class="s">marsclass EP</span> +<span class="s">maxstep 0</span> +<span class="s">number 000</span> +<span class="s">omega 0</span> +<span class="s">omegadiff 0</span> +<span class="s">oper 0</span> +<span class="s">outputdir /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/run/workspace</span> +<span class="s">prefix CE</span> +<span class="s">public 0</span> +<span class="s">purefc 0</span> +<span class="s">queue ecgate</span> +<span class="s">request 2</span> +<span class="s">resol 159</span> +<span class="s">right 60.</span> +<span class="s">rrint 0</span> +<span class="s">smooth 0</span> +<span class="s">start_date 20000809</span> +<span class="s">step 00 00 00 00 00 00 00 00</span> +<span class="s">stream ENDA</span> +<span class="s">time 00 03 06 09 12 15 18 21</span> +<span class="s">type AN AN AN AN AN AN AN AN</span> +<span class="s">upper 74.</span> +<span class="s">wrf 0</span> + +<span class="s">EOF</span> + + +submit.py --controlfile<span class="o">=</span><span class="si">${</span><span class="nv">CONTROL</span><span class="si">}</span> --inputdir<span class="o">=</span>./work --outputdir<span class="o">=</span>./work <span class="m">1</span>> prot <span class="m">2</span>><span class="p">&</span><span class="m">1</span> + +<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="nv">l</span><span class="o">=</span><span class="m">0</span> + <span class="k">for</span> muser in <span class="sb">`</span>grep -i MAILOPS <span class="si">${</span><span class="nv">CONTROL</span><span class="si">}</span><span class="sb">`</span><span class="p">;</span> <span class="k">do</span> + <span class="k">if</span> <span class="o">[</span> <span class="si">${</span><span class="nv">l</span><span class="si">}</span> -gt <span class="m">0</span> <span class="o">]</span> <span class="p">;</span> <span class="k">then</span> + mail -s flex.<span class="si">${</span><span class="nv">HOST</span><span class="si">}</span>.<span class="nv">$$</span> <span class="si">${</span><span class="nv">muser</span><span class="si">}</span> <prot + <span class="k">fi</span> + <span class="nv">l</span><span class="o">=</span><span class="k">$((</span><span class="si">${</span><span class="nv">l</span><span class="si">}</span><span class="o">+</span><span class="m">1</span><span class="k">))</span> + <span class="k">done</span> +<span class="k">else</span> + <span class="nv">l</span><span class="o">=</span><span class="m">0</span> + <span class="k">for</span> muser in <span class="sb">`</span>grep -i MAILFAIL <span class="si">${</span><span class="nv">CONTROL</span><span class="si">}</span><span class="sb">`</span><span class="p">;</span> <span class="k">do</span> + <span class="k">if</span> <span class="o">[</span> <span class="si">${</span><span class="nv">l</span><span class="si">}</span> -gt <span class="m">0</span> <span class="o">]</span> <span class="p">;</span> <span class="k">then</span> + mail -s <span class="s2">"ERROR! flex.</span><span class="si">${</span><span class="nv">HOST</span><span class="si">}</span><span class="s2">.</span><span class="nv">$$</span><span class="s2">"</span> <span class="si">${</span><span class="nv">muser</span><span class="si">}</span> <prot + <span class="k">fi</span> + <span class="nv">l</span><span class="o">=</span><span class="k">$((</span><span class="si">${</span><span class="nv">l</span><span class="si">}</span><span class="o">+</span><span class="m">1</span><span class="k">))</span> + <span class="k">done</span> +<span class="k">fi</span> +</pre></div> +</div> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="control.html" class="btn btn-neutral float-right" title="The CONTROL file" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="run.html" class="btn btn-neutral float-left" title="The executable Script - run.sh" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Input/run.html b/Documentation/html/Documentation/Input/run.html new file mode 100644 index 0000000000000000000000000000000000000000..d9a9b1778dbec30a4b7e4a845c251575bdffb6c5 --- /dev/null +++ b/Documentation/html/Documentation/Input/run.html @@ -0,0 +1,719 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>The executable Script - run.sh — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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 Jobscript job.ksh" href="jobscript.html" /> + <link rel="prev" title="The Fortran Makefile - CONVERT2" href="fortran_makefile.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../overview.html">Overview</a></li> +<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 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> +<li class="toctree-l4"><a class="reference internal" href="#usage-of-submit-py-optional">Usage of <code class="docutils literal notranslate"><span class="pre">submit.py</span></code> (optional)</a></li> +</ul> +</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> +<li class="toctree-l3"><a class="reference internal" href="control_params.html">The CONTROL parameters</a></li> +<li class="toctree-l3"><a class="reference internal" href="examples.html">CONTROL file examples</a></li> +<li class="toctree-l3"><a class="reference internal" href="changes.html">CONTROL file changes</a></li> +<li class="toctree-l3"><a class="reference internal" href="ecmwf_env.html">ECMWF User Credential file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="templates.html">Templates</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="../api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <li><a href="../input.html">Control & Input Data</a> »</li> + + <li>The executable Script - <code class="docutils literal notranslate"><span class="pre">run.sh</span></code></li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Input/run.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="the-executable-script-run-sh"> +<h1>The executable Script - <code class="docutils literal notranslate"><span class="pre">run.sh</span></code><a class="headerlink" href="#the-executable-script-run-sh" title="Permalink to this headline">¶</a></h1> +<p>The execution of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> is done by the <code class="docutils literal notranslate"><span class="pre">run.sh</span></code> Shell script, which is a wrapping script for the top-level Python script <code class="docutils literal notranslate"><span class="pre">submit.py</span></code>. +The Python script constitutes the entry point to ECMWF data retrievals with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> and controls the program flow.</p> +<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"> +<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%" /> +</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> +</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">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-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> +<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> +<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> +<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> +<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> +<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> +<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> +<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> +<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> +<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> +<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 ; + 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> +</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> +<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> +<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> +<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> +<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> +</tbody> +</table> +</div> +<div class="section" id="content-of-run-sh"> +<h2>Content of <code class="docutils literal notranslate"><span class="pre">run.sh</span></code><a class="headerlink" href="#content-of-run-sh" title="Permalink to this headline">¶</a></h2> +<div class="literal-block-wrapper docutils container" id="id2"> +<div class="code-block-caption"><span class="caption-text">run.sh</span><a class="headerlink" href="#id2" title="Permalink to this code">¶</a></div> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span> +<span class="c1">#</span> +<span class="c1"># @Author: Anne Philipp</span> +<span class="c1">#</span> +<span class="c1"># @Date: October, 4 2018</span> +<span class="c1">#</span> +<span class="c1"># @Description: </span> +<span class="c1"># This script defines the available command-line parameters</span> +<span class="c1"># for running flex_extract and combines them for the execution </span> +<span class="c1"># of the Python program. It also does some checks to </span> +<span class="c1"># guarantee necessary parameters were set and consistent.</span> +<span class="c1">#</span> +<span class="c1"># @Licence:</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1">#</span> +<span class="c1"># SPDX-License-Identifier: CC-BY-4.0</span> +<span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> +<span class="c1">#</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> + +<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">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 +<span class="nv">STEP</span><span class="o">=</span>None +<span class="nv">LEVELIST</span><span class="o">=</span>None +<span class="nv">AREA</span><span class="o">=</span>None +<span class="nv">INPUTDIR</span><span class="o">=</span>None +<span class="nv">OUTPUTDIR</span><span class="o">=</span>None +<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">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> + +<span class="c1"># -----------------------------------------------------------------</span> +<span class="c1">#</span> +<span class="c1"># AFTER THIS LINE THE USER DOES NOT HAVE TO CHANGE ANYTHING !!!</span> +<span class="c1">#</span> +<span class="c1"># -----------------------------------------------------------------</span> + +<span class="c1"># PATH TO SUBMISSION SCRIPT</span> +<span class="nv">pyscript</span><span class="o">=</span>../Source/Python/submit.py + +<span class="c1"># INITIALIZE EMPTY PARAMETERLIST</span> +<span class="nv">parameterlist</span><span class="o">=</span><span class="s2">""</span> + +<span class="c1"># CHECK FOR MORE PARAMETER </span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$START_DATE</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">" --start_date=</span><span class="nv">$START_DATE</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$END_DATE</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">" --end_date=</span><span class="nv">$END_DATE</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$DATE_CHUNK</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">" --date_chunk=</span><span class="nv">$DATE_CHUNK</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$JOB_CHUNK</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">" --job_chunk=</span><span class="nv">$JOB_CHUNK</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$BASETIME</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">" --basetime=</span><span class="nv">$BASETIME</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$STEP</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">" --step=</span><span class="nv">$STEP</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$LEVELIST</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">" --levelist=</span><span class="nv">$LEVELIST</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$AREA</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">" --area=</span><span class="nv">$AREA</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$INPUTDIR</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">" --inputdir=</span><span class="nv">$INPUTDIR</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$OUTPUTDIR</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">" --outputdir=</span><span class="nv">$OUTPUTDIR</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$PP_ID</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">" --ppid=</span><span class="nv">$PP_ID</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$JOB_TEMPLATE</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">" --job_template=</span><span class="nv">$JOB_TEMPLATE</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$QUEUE</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">" --queue=</span><span class="nv">$QUEUE</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$CONTROLFILE</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">" --controlfile=</span><span class="nv">$CONTROLFILE</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$DEBUG</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">" --debug=</span><span class="nv">$DEBUG</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$REQUEST</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">" --request=</span><span class="nv">$REQUEST</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$PUBLIC</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">" --public=</span><span class="nv">$PUBLIC</span><span class="s2">"</span> +<span class="k">fi</span> + +<span class="c1"># -----------------------------------------------------------------</span> +<span class="c1"># CALL SCRIPT WITH DETERMINED COMMANDLINE ARGUMENTS</span> + +<span class="nv">$pyscript</span> <span class="nv">$parameterlist</span> +</pre></div> +</div> +</div> +</div> +<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 +command line parameter.</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>submit.py --help + +usage: submit.py <span class="o">[</span>-h<span class="o">]</span> <span class="o">[</span>--start_date START_DATE<span class="o">]</span> <span class="o">[</span>--end_date END_DATE<span class="o">]</span> + <span class="o">[</span>--date_chunk DATE_CHUNK<span class="o">]</span> <span class="o">[</span>--job_chunk JOB_CHUNK<span class="o">]</span> + <span class="o">[</span>--controlfile CONTROLFILE<span class="o">]</span> <span class="o">[</span>--basetime BASETIME<span class="o">]</span> + <span class="o">[</span>--step STEP<span class="o">]</span> <span class="o">[</span>--levelist LEVELIST<span class="o">]</span> <span class="o">[</span>--area AREA<span class="o">]</span> + <span class="o">[</span>--debug DEBUG<span class="o">]</span> <span class="o">[</span>--oper OPER<span class="o">]</span> <span class="o">[</span>--request REQUEST<span class="o">]</span> + <span class="o">[</span>--public PUBLIC<span class="o">]</span> <span class="o">[</span>--rrint RRINT<span class="o">]</span> <span class="o">[</span>--inputdir INPUTDIR<span class="o">]</span> + <span class="o">[</span>--outputdir OUTPUTDIR<span class="o">]</span> <span class="o">[</span>--ppid PPID<span class="o">]</span> + <span class="o">[</span>--job_template JOB_TEMPLATE<span class="o">]</span> <span class="o">[</span>--queue QUEUE<span class="o">]</span> + + Retrieve FLEXPART input from ECMWF MARS archive + + optional arguments: + -h, --help show this <span class="nb">help</span> message and <span class="nb">exit</span> + --start_date START_DATE + start date YYYYMMDD <span class="o">(</span>default: None<span class="o">)</span> + --end_date END_DATE end_date YYYYMMDD <span class="o">(</span>default: None<span class="o">)</span> + --date_chunk DATE_CHUNK + <span class="c1"># of days to be retrieved at once (default: None)</span> + --job_chunk JOB_CHUNK + <span class="c1"># of days to be retrieved within a single job</span> + <span class="o">(</span>default: None<span class="o">)</span> + --controlfile CONTROLFILE + The file with all CONTROL parameters. <span class="o">(</span>default: + CONTROL_EA5<span class="o">)</span> + --basetime BASETIME base such as <span class="m">0</span> or <span class="m">12</span> <span class="o">(</span><span class="k">for</span> half day retrievals<span class="o">)</span> + <span class="o">(</span>default: None<span class="o">)</span> + --step STEP Forecast steps such as <span class="m">00</span>/to/48 <span class="o">(</span>default: None<span class="o">)</span> + --levelist LEVELIST Vertical levels to be retrieved, e.g. <span class="m">30</span>/to/60 + <span class="o">(</span>default: None<span class="o">)</span> + --area AREA area defined as north/west/south/east <span class="o">(</span>default: None<span class="o">)</span> + --debug DEBUG debug mode - leave temporary files intact <span class="o">(</span>default: + None<span class="o">)</span> + --oper OPER operational mode - prepares dates with environment + variables <span class="o">(</span>default: None<span class="o">)</span> + --request REQUEST list all mars requests in file mars_requests.dat + <span class="o">(</span>default: None<span class="o">)</span> + --public PUBLIC public mode - retrieves the public datasets <span class="o">(</span>default: + None<span class="o">)</span> + --rrint RRINT Selection of old or new precipitation interpolation: <span class="m">0</span> + - old method <span class="m">1</span> - new method <span class="o">(</span>additional subgrid + points<span class="o">)</span> <span class="o">(</span>default: None<span class="o">)</span> + --inputdir INPUTDIR Path to the temporary directory <span class="k">for</span> the retrieval grib + files and other processing files. <span class="o">(</span>default: None<span class="o">)</span> + --outputdir OUTPUTDIR + Path to the final directory where the final FLEXPART + ready input files are stored. <span class="o">(</span>default: None<span class="o">)</span> + --ppid PPID 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. <span class="o">(</span>default: None<span class="o">)</span> + --job_template JOB_TEMPLATE + The job template file which are adapted to be + submitted to the batch system on ECMWF server. + <span class="o">(</span>default: job.temp<span class="o">)</span> + --queue QUEUE The ECMWF server name <span class="k">for</span> submission of the job script + to the batch system <span class="o">(</span>e.g. ecgate <span class="p">|</span> cca <span class="p">|</span> ccb<span class="o">)</span> + <span class="o">(</span>default: None<span class="o">)</span> +</pre></div> +</div> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <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> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Input/setup.html b/Documentation/html/Documentation/Input/setup.html new file mode 100644 index 0000000000000000000000000000000000000000..410473dcf350d0233fa6806e249682edc8aea416 --- /dev/null +++ b/Documentation/html/Documentation/Input/setup.html @@ -0,0 +1,523 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>The Installation Script - setup.sh — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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 Compilation Jobscript compilejob.ksh" href="compilejob.html" /> + <link rel="prev" title="Control & Input Data" href="../input.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../overview.html">Overview</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="../input.html">Control & Input Data</a><ul class="current"> +<li class="toctree-l3 current"><a class="current reference internal" href="#">The Installation Script - <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code></a><ul> +<li class="toctree-l4"><a class="reference internal" href="#installation-parameter">Installation Parameter</a></li> +<li class="toctree-l4"><a class="reference internal" href="#content-of-setup-sh">Content of <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="#usage-of-install-py-optional">Usage of <code class="docutils literal notranslate"><span class="pre">install.py</span></code> (optional)</a></li> +</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="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> +<li class="toctree-l3"><a class="reference internal" href="control_params.html">The CONTROL parameters</a></li> +<li class="toctree-l3"><a class="reference internal" href="examples.html">CONTROL file examples</a></li> +<li class="toctree-l3"><a class="reference internal" href="changes.html">CONTROL file changes</a></li> +<li class="toctree-l3"><a class="reference internal" href="ecmwf_env.html">ECMWF User Credential file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="templates.html">Templates</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="../api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <li><a href="../input.html">Control & Input Data</a> »</li> + + <li>The Installation Script - <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code></li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Input/setup.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="the-installation-script-setup-sh"> +<h1>The Installation Script - <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code><a class="headerlink" href="#the-installation-script-setup-sh" title="Permalink to this headline">¶</a></h1> +<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> +</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="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"> +<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%" /> +</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> +</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> +</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> +<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> +<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> +<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> +<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> +<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> +<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> +<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> +</tbody> +</table> +</div> +<div class="section" id="content-of-setup-sh"> +<h2>Content of <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code><a class="headerlink" href="#content-of-setup-sh" title="Permalink to this headline">¶</a></h2> +<div class="literal-block-wrapper docutils container" id="id3"> +<div class="code-block-caption"><span class="caption-text">setup.sh</span><a class="headerlink" href="#id3" title="Permalink to this code">¶</a></div> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span> +<span class="c1">#</span> +<span class="c1"># @Author: Anne Philipp</span> +<span class="c1">#</span> +<span class="c1"># @Date: September, 10 2018</span> +<span class="c1">#</span> +<span class="c1"># @Description: </span> +<span class="c1"># This file defines the flex_extract's available installation</span> +<span class="c1"># parameters and puts them together for the call of the actual </span> +<span class="c1"># python installation script. It also does some checks to </span> +<span class="c1"># guarantee necessary parameters were set.</span> +<span class="c1">#</span> +<span class="c1"># @Licence:</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1">#</span> +<span class="c1"># SPDX-License-Identifier: CC-BY-4.0</span> +<span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> +<span class="c1">#</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> +<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">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> +<span class="c1"># -----------------------------------------------------------------</span> +<span class="c1">#</span> +<span class="c1"># AFTER THIS LINE THE USER DOES NOT HAVE TO CHANGE ANYTHING !!!</span> +<span class="c1">#</span> +<span class="c1"># -----------------------------------------------------------------</span> + +<span class="c1"># PATH TO INSTALLATION SCRIPT</span> +<span class="nv">script</span><span class="o">=</span><span class="s2">"Source/Python/install.py"</span> + +<span class="c1"># INITIALIZE EMPTY PARAMETERLIST</span> +<span class="nv">parameterlist</span><span class="o">=</span><span class="s2">""</span> + +<span class="c1"># DEFAULT PARAMETERLIST</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$TARGET</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">" --target=</span><span class="nv">$TARGET</span><span class="s2">"</span> +<span class="k">else</span> + <span class="nb">echo</span> <span class="s2">"ERROR: No installation target specified."</span> + <span class="nb">echo</span> <span class="s2">"EXIT WITH ERROR"</span> + <span class="nb">exit</span> +<span class="k">fi</span> + +<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="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">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> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$FLEXPARTDIR</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span> <span class="c1"># not empty</span> + <span class="nv">parameterlist</span><span class="o">+=</span><span class="s2">" --flexpartdir=</span><span class="nv">$FLEXPARTDIR</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$JOB_TEMPLATE</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">" --job_template=</span><span class="nv">$JOB_TEMPLATE</span><span class="s2">"</span> +<span class="k">fi</span> +<span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$CONTROLFILE</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">" --controlfile=</span><span class="nv">$CONTROLFILE</span><span class="s2">"</span> +<span class="k">fi</span> + +<span class="c1"># -----------------------------------------------------------------</span> +<span class="c1"># CALL INSTALLATION SCRIPT WITH DETERMINED COMMANDLINE ARGUMENTS</span> + +<span class="nv">$script</span> <span class="nv">$parameterlist</span> +</pre></div> +</div> +</div> +</div> +<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 +command line parameter.</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>install.py --help + +usage: install.py <span class="o">[</span>-h<span class="o">]</span> <span class="o">[</span>--target INSTALL_TARGET<span class="o">]</span> <span class="o">[</span>--makefile MAKEFILE<span class="o">]</span> + <span class="o">[</span>--ecuid ECUID<span class="o">]</span> <span class="o">[</span>--ecgid ECGID<span class="o">]</span> <span class="o">[</span>--gateway GATEWAY<span class="o">]</span> + <span class="o">[</span>--destination DESTINATION<span class="o">]</span> <span class="o">[</span>--installdir INSTALLDIR<span class="o">]</span> + <span class="o">[</span>--job_template JOB_TEMPLATE<span class="o">]</span> <span class="o">[</span>--controlfile CONTROLFILE<span class="o">]</span> + +Install flex_extract software locally or on ECMWF machines + +optional arguments: + -h, --help show this <span class="nb">help</span> message and <span class="nb">exit</span> + --target INSTALL_TARGET + Valid targets: <span class="nb">local</span> <span class="p">|</span> ecgate <span class="p">|</span> cca , the latter two + are at ECMWF <span class="o">(</span>default: None<span class="o">)</span> + --makefile MAKEFILE Name of Makefile to use <span class="k">for</span> compiling the Fortran + program <span class="o">(</span>default: None<span class="o">)</span> + --ecuid ECUID The user id at ECMWF. <span class="o">(</span>default: None<span class="o">)</span> + --ecgid ECGID The group id at ECMWF. <span class="o">(</span>default: None<span class="o">)</span> + --gateway GATEWAY The name of the <span class="nb">local</span> gateway server. <span class="o">(</span>default: None<span class="o">)</span> + --destination DESTINATION + The ecaccess association, e.g. myUser@genericSftp + <span class="o">(</span>default: None<span class="o">)</span> + --installdir INSTALLDIR + Root directory where flex_extract will be installed + to. <span class="o">(</span>default: None<span class="o">)</span> + --job_template JOB_TEMPLATE + The rudimentary template file to create a batch job + template <span class="k">for</span> submission to ECMWF servers. <span class="o">(</span>default: + job.template<span class="o">)</span> + --controlfile CONTROLFILE + The file with all CONTROL parameters. <span class="o">(</span>default: + CONTROL_EA5<span class="o">)</span> +</pre></div> +</div> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="compilejob.html" class="btn btn-neutral float-right" title="The Compilation Jobscript compilejob.ksh" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="../input.html" class="btn btn-neutral float-left" title="Control & Input Data" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Input/templates.html b/Documentation/html/Documentation/Input/templates.html new file mode 100644 index 0000000000000000000000000000000000000000..65aaf8f3e808e6bfb815f6bf22d2f31e84d3c956 --- /dev/null +++ b/Documentation/html/Documentation/Input/templates.html @@ -0,0 +1,563 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Templates — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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="Output Data" href="../output.html" /> + <link rel="prev" title="ECMWF User Credential file ECMWF_ENV" href="ecmwf_env.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../overview.html">Overview</a></li> +<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="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> +<li class="toctree-l3"><a class="reference internal" href="control_params.html">The CONTROL parameters</a></li> +<li class="toctree-l3"><a class="reference internal" href="examples.html">CONTROL file examples</a></li> +<li class="toctree-l3"><a class="reference internal" href="changes.html">CONTROL file changes</a></li> +<li class="toctree-l3"><a class="reference internal" href="ecmwf_env.html">ECMWF User Credential file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code></a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Templates</a><ul> +<li class="toctree-l4"><a class="reference internal" href="#convert-nl">convert.nl</a></li> +<li class="toctree-l4"><a class="reference internal" href="#ecmwf-env-template">ecmwf_env.template</a></li> +<li class="toctree-l4"><a class="reference internal" href="#compilejob-template">compilejob.template</a></li> +<li class="toctree-l4"><a class="reference internal" href="#job-temp">job.temp</a></li> +<li class="toctree-l4"><a class="reference internal" href="#job-template">job.template</a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="../api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <li><a href="../input.html">Control & Input Data</a> »</li> + + <li>Templates</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Input/templates.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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> +<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> +</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 class="highlight-fortran notranslate"><div class="highlight"><pre><span></span>&NAMGEN + maxl = $maxl, + maxb = $maxb, + mlevel = $mlevel, + mlevelist = "$mlevelist", + mnauf = $mnauf, + metapar = $metapar, + rlo0 = $rlo0, + rlo1 = $rlo1, + rla0 = $rla0, + rla1 = $rla1, + momega = $momega, + momegadiff = $momegadiff, + mgauss = $mgauss, + msmooth = $msmooth, + meta = $meta, + metadiff = $metadiff, + mdpdeta = $mdpdeta +/ +</pre></div> +</div> +</div></blockquote> +</div> +<div class="section" id="ecmwf-env-template"> +<h2>ecmwf_env.template<a class="headerlink" href="#ecmwf-env-template" title="Permalink to this headline">¶</a></h2> +<blockquote> +<div><p>This template is used to create the <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code> file in the application modes <strong>gateway</strong> and <strong>remote</strong>. It contains the user credentials and gateway server settings for the file transfers.</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ECUID <span class="nv">$user_name</span> +ECGID <span class="nv">$user_group</span> +GATEWAY <span class="nv">$gateway_name</span> +DESTINATION <span class="nv">$destination_name</span> +</pre></div> +</div> +</div></blockquote> +</div> +<div class="section" id="compilejob-template"> +<h2>compilejob.template<a class="headerlink" href="#compilejob-template" title="Permalink to this headline">¶</a></h2> +<blockquote> +<div><p>This template is used to create the job script file called <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code> during the installation process for the application modes <strong>remote</strong> and <strong>gateway</strong>.</p> +<p>At the beginning some directives for the batch system are set. +On the <strong>ecgate</strong> server the <code class="docutils literal notranslate"><span class="pre">SBATCH</span></code> comments are the directives for the SLURM workload manager. A description of the single lines can be found at <a class="reference external" href="https://confluence.ecmwf.int/display/UDOC/Writing+SLURM+jobs">SLURM directives</a>. +For the high performance computers <strong>cca</strong> and <strong>ccb</strong> the <code class="docutils literal notranslate"><span class="pre">PBS</span></code> comments are necessary and can be view at <a class="reference external" href="https://confluence.ecmwf.int/display/UDOC/Batch+environment%3A++PBS">PBS directives</a>.</p> +<p>The software environment requirements mentioned in <a class="reference internal" href="../../installation.html#ref-requirements"><span class="std std-ref">Dependencies</span></a> are prepared by loading the corresponding modules depending in the <code class="docutils literal notranslate"><span class="pre">HOST</span></code>. It should not be changed without testing.</p> +<p>Afterwards the installation steps as such are done. Including the generation of the root directory, putting files in place, compiling the Fortran program and sending a log file via email.</p> +<div class="highlight-ksh notranslate"><div class="highlight"><pre><span></span><span class="ch">#!/bin/ksh</span> + +<span class="c1"># ON ECGB:</span> +<span class="c1"># start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server</span> +<span class="c1"># start with sbatch NAME_OF_THIS_FILE directly on machine</span> + +<span class="c1">#SBATCH --workdir=/scratch/ms/$usergroup/$username</span> +<span class="c1">#SBATCH --qos=normal</span> +<span class="c1">#SBATCH --job-name=flex_ecmwf</span> +<span class="c1">#SBATCH --output=flex_ecmwf.%j.out</span> +<span class="c1">#SBATCH --error=flex_ecmwf.%j.out</span> +<span class="c1">#SBATCH --mail-type=FAIL</span> +<span class="c1">#SBATCH --time=12:00:00</span> + +<span class="c1">## CRAY specific batch requests</span> +<span class="c1">##PBS -N flex_ecmwf</span> +<span class="c1">##PBS -q ns</span> +<span class="c1">##PBS -S /usr/bin/ksh</span> +<span class="c1">##PBS -o /scratch/ms/$usergroup/$username/flex_ecmwf.$${Jobname}.$${Job_ID}.out</span> +<span class="c1"># job output is in .ecaccess_DO_NOT_REMOVE</span> +<span class="c1">##PBS -j oe</span> +<span class="c1">##PBS -V</span> +<span class="c1">##PBS -l EC_threads_per_task=1</span> +<span class="c1">##PBS -l EC_memory_per_task=3200MB</span> + +<span class="nb">set</span> -x +<span class="nb">export</span> <span class="nv">VERSION</span><span class="o">=</span><span class="nv">$version_number</span> +<span class="k">case</span> <span class="nv">$$</span><span class="o">{</span>HOST<span class="o">}</span> in + *ecg*<span class="o">)</span> + module unload grib_api + module unload eccodes + module unload python + module unload emos + module load python3 + 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="nv">$fp_root_scripts</span> + <span class="nb">export</span> <span class="nv">MAKEFILE</span><span class="o">=</span><span class="nv">$makefile</span> + <span class="p">;;</span> + *cca*<span class="o">)</span> + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + module load eccodes/2.12.0 + module load emos + <span class="nb">echo</span> <span class="nv">$$</span><span class="o">{</span>GROUP<span class="o">}</span> + <span class="nb">echo</span> <span class="nv">$$</span><span class="o">{</span>HOME<span class="o">}</span> + <span class="nb">echo</span> <span class="nv">$$</span><span class="o">{</span>HOME<span class="o">}</span> <span class="p">|</span> awk -F / <span class="s1">'{print $1, $2, $3, $4}'</span> + <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="nv">$$</span><span class="o">{</span>HOME<span class="o">}</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="nv">$$</span><span class="o">{</span>GROUP<span class="o">}</span>/<span class="nv">$$</span><span class="o">{</span>USER<span class="o">}</span> + <span class="nb">export</span> <span class="nv">FLEXPART_ROOT_SCRIPTS</span><span class="o">=</span><span class="nv">$fp_root_scripts</span> + <span class="nb">export</span> <span class="nv">MAKEFILE</span><span class="o">=</span><span class="nv">$makefile</span> + <span class="p">;;</span> +<span class="k">esac</span> + +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="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 + +ls -l <span class="nv">$fortran_program</span> >>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="nv">$$</span><span class="o">{</span>HOST<span class="o">}</span>.<span class="nv">$$$$</span> <span class="nv">$$</span><span class="o">{</span>USER<span class="o">}</span> <flexcompile +<span class="k">else</span> + <span class="nb">echo</span> Environment: >>flexcompile + env >> flexcompile + mail -s <span class="s2">"ERROR! flexcompile.</span><span class="nv">$$</span><span class="s2">{HOST}.</span><span class="nv">$$$$</span><span class="s2">"</span> <span class="nv">$$</span><span class="o">{</span>USER<span class="o">}</span> <flexcompile +<span class="k">fi</span> +</pre></div> +</div> +</div></blockquote> +</div> +<div class="section" id="job-temp"> +<h2>job.temp<a class="headerlink" href="#job-temp" title="Permalink to this headline">¶</a></h2> +<blockquote> +<div><p>This template is used to create the actual job script file called <code class="docutils literal notranslate"><span class="pre">job.ksh</span></code> for the execution of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> in the application modes <strong>remote</strong> and <strong>gateway</strong>.</p> +<p>At the beginning some directives for the batch system are set. +On the <strong>ecgate</strong> server the <code class="docutils literal notranslate"><span class="pre">SBATCH</span></code> comments are the directives for the SLURM workload manager. A description of the single lines can be found at <a class="reference external" href="https://confluence.ecmwf.int/display/UDOC/Writing+SLURM+jobs">SLURM directives</a>. +For the high performance computers <strong>cca</strong> and <strong>ccb</strong> the <code class="docutils literal notranslate"><span class="pre">PBS</span></code> comments are necessary and can be view at <a class="reference external" href="https://confluence.ecmwf.int/display/UDOC/Batch+environment%3A++PBS">PBS directives</a>.</p> +<p>The software environment requirements mentioned in <a class="reference internal" href="../../installation.html#ref-requirements"><span class="std std-ref">Dependencies</span></a> are prepared by loading the corresponding modules depending in the <code class="docutils literal notranslate"><span class="pre">HOST</span></code>. It should not be changed without testing.</p> +<p>Afterwards the run directory and the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file are created and <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> is executed. In the end a log file is send via email.</p> +<div class="highlight-ksh notranslate"><div class="highlight"><pre><span></span><span class="ch">#!/bin/ksh</span> + +<span class="c1"># ON ECGB:</span> +<span class="c1"># start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server</span> +<span class="c1"># start with sbatch NAME_OF_THIS_FILE directly on machine</span> + +<span class="c1">#SBATCH --workdir=/scratch/ms/at/km4a</span> +<span class="c1">#SBATCH --qos=normal</span> +<span class="c1">#SBATCH --job-name=flex_ecmwf</span> +<span class="c1">#SBATCH --output=flex_ecmwf.%j.out</span> +<span class="c1">#SBATCH --error=flex_ecmwf.%j.out</span> +<span class="c1">#SBATCH --mail-type=FAIL</span> +<span class="c1">#SBATCH --time=12:00:00</span> + +<span class="c1">## CRAY specific batch requests</span> +<span class="c1">##PBS -N flex_ecmwf</span> +<span class="c1">##PBS -q np</span> +<span class="c1">##PBS -S /usr/bin/ksh</span> +<span class="c1">## -o /scratch/ms/at/km4a/flex_ecmwf.$${PBS_JOBID}.out</span> +<span class="c1">## job output is in .ecaccess_DO_NOT_REMOVE</span> +<span class="c1">##PBS -j oe</span> +<span class="c1">##PBS -V</span> +<span class="c1">##PBS -l EC_threads_per_task=24</span> +<span class="c1">##PBS -l EC_memory_per_task=32000MB</span> + +<span class="nb">set</span> -x +<span class="nb">export</span> <span class="nv">VERSION</span><span class="o">=</span><span class="m">7</span>.1 +<span class="k">case</span> <span class="nv">$$</span><span class="o">{</span>HOST<span class="o">}</span> in + *ecg*<span class="o">)</span> + module unload grib_api + module unload eccodes + module unload python + module unload emos + 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="p">;;</span> + *cca*<span class="o">)</span> + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + 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="p">;;</span> +<span class="k">esac</span> + +<span class="nb">cd</span> <span class="nv">$$</span><span class="o">{</span>SCRATCH<span class="o">}</span> +mkdir -p python<span class="nv">$$$$</span> +<span class="nb">cd</span> python<span class="nv">$$$$</span> + +<span class="nb">export</span> <span class="nv">CONTROL</span><span class="o">=</span>CONTROL + +cat ><span class="nv">$$</span><span class="o">{</span>CONTROL<span class="o">}</span><span class="s"><<EOF</span> +<span class="s">$control_content</span> +<span class="s">EOF</span> + + +submit.py --controlfile<span class="o">=</span><span class="nv">$$</span><span class="o">{</span>CONTROL<span class="o">}</span> --inputdir<span class="o">=</span>./work --outputdir<span class="o">=</span>./work <span class="m">1</span>> prot <span class="m">2</span>><span class="p">&</span><span class="m">1</span> + +<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="nv">l</span><span class="o">=</span><span class="m">0</span> + <span class="k">for</span> muser in <span class="sb">`</span>grep -i MAILOPS <span class="nv">$$</span><span class="o">{</span>CONTROL<span class="o">}</span><span class="sb">`</span><span class="p">;</span> <span class="k">do</span> + <span class="k">if</span> <span class="o">[</span> <span class="nv">$$</span><span class="o">{</span>l<span class="o">}</span> -gt <span class="m">0</span> <span class="o">]</span> <span class="p">;</span> <span class="k">then</span> + mail -s flex.<span class="nv">$$</span><span class="o">{</span>HOST<span class="o">}</span>.<span class="nv">$$$$</span> <span class="nv">$$</span><span class="o">{</span>muser<span class="o">}</span> <prot + <span class="k">fi</span> + <span class="nv">l</span><span class="o">=</span><span class="k">$((</span><span class="nv">$$</span><span class="o">{</span>l<span class="o">}+</span><span class="m">1</span><span class="k">))</span> + <span class="k">done</span> +<span class="k">else</span> + <span class="nv">l</span><span class="o">=</span><span class="m">0</span> + <span class="k">for</span> muser in <span class="sb">`</span>grep -i MAILFAIL <span class="nv">$$</span><span class="o">{</span>CONTROL<span class="o">}</span><span class="sb">`</span><span class="p">;</span> <span class="k">do</span> + <span class="k">if</span> <span class="o">[</span> <span class="nv">$$</span><span class="o">{</span>l<span class="o">}</span> -gt <span class="m">0</span> <span class="o">]</span> <span class="p">;</span> <span class="k">then</span> + mail -s <span class="s2">"ERROR! flex.</span><span class="nv">$$</span><span class="s2">{HOST}.</span><span class="nv">$$$$</span><span class="s2">"</span> <span class="nv">$$</span><span class="o">{</span>muser<span class="o">}</span> <prot + <span class="k">fi</span> + <span class="nv">l</span><span class="o">=</span><span class="k">$((</span><span class="nv">$$</span><span class="o">{</span>l<span class="o">}+</span><span class="m">1</span><span class="k">))</span> + <span class="k">done</span> +<span class="k">fi</span> +</pre></div> +</div> +</div></blockquote> +</div> +<div class="section" id="job-template"> +<h2>job.template<a class="headerlink" href="#job-template" title="Permalink to this headline">¶</a></h2> +<blockquote> +<div><p>This template is used to create the template for the execution job script <code class="docutils literal notranslate"><span class="pre">job.temp</span></code> for <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> in the installation process. A description of the file can be found under <code class="docutils literal notranslate"><span class="pre">job.temp</span></code>. A couple of parameters are set in this process, such as the user credentials and the <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> version number.</p> +<div class="highlight-ksh notranslate"><div class="highlight"><pre><span></span><span class="ch">#!/bin/ksh</span> + +<span class="c1"># ON ECGB:</span> +<span class="c1"># start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server</span> +<span class="c1"># start with sbatch NAME_OF_THIS_FILE directly on machine</span> + +<span class="c1">#SBATCH --workdir=/scratch/ms/$usergroup/$username</span> +<span class="c1">#SBATCH --qos=normal</span> +<span class="c1">#SBATCH --job-name=flex_ecmwf</span> +<span class="c1">#SBATCH --output=flex_ecmwf.%j.out</span> +<span class="c1">#SBATCH --error=flex_ecmwf.%j.out</span> +<span class="c1">#SBATCH --mail-type=FAIL</span> +<span class="c1">#SBATCH --time=12:00:00</span> + +<span class="c1">## CRAY specific batch requests</span> +<span class="c1">##PBS -N flex_ecmwf</span> +<span class="c1">##PBS -q np</span> +<span class="c1">##PBS -S /usr/bin/ksh</span> +<span class="c1">## -o /scratch/ms/$usergroup/$username/flex_ecmwf.$$$${PBS_JOBID}.out</span> +<span class="c1">## job output is in .ecaccess_DO_NOT_REMOVE</span> +<span class="c1">##PBS -j oe</span> +<span class="c1">##PBS -V</span> +<span class="c1">##PBS -l EC_threads_per_task=24</span> +<span class="c1">##PBS -l EC_memory_per_task=32000MB</span> + +<span class="nb">set</span> -x +<span class="nb">export</span> <span class="nv">VERSION</span><span class="o">=</span><span class="nv">$version_number</span> +<span class="k">case</span> <span class="nv">$$$$</span><span class="o">{</span>HOST<span class="o">}</span> in + *ecg*<span class="o">)</span> + module unload grib_api + module unload eccodes + module unload python + module unload emos + 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">$fp_root_path</span> + <span class="p">;;</span> + *cca*<span class="o">)</span> + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + 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">$fp_root_path</span> + <span class="p">;;</span> +<span class="k">esac</span> + +<span class="nb">cd</span> <span class="nv">$$$$</span><span class="o">{</span>SCRATCH<span class="o">}</span> +mkdir -p python<span class="nv">$$$$$$$$</span> +<span class="nb">cd</span> python<span class="nv">$$$$$$$$</span> + +<span class="nb">export</span> <span class="nv">CONTROL</span><span class="o">=</span>CONTROL + +cat ><span class="nv">$$$$</span><span class="o">{</span>CONTROL<span class="o">}</span><span class="s"><<EOF</span> +<span class="s">$$control_content</span> +<span class="s">EOF</span> + + +submit.py --controlfile<span class="o">=</span><span class="nv">$$$$</span><span class="o">{</span>CONTROL<span class="o">}</span> --inputdir<span class="o">=</span>./work --outputdir<span class="o">=</span>./work <span class="m">1</span>> prot <span class="m">2</span>><span class="p">&</span><span class="m">1</span> + +<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="nv">l</span><span class="o">=</span><span class="m">0</span> + <span class="k">for</span> muser in <span class="sb">`</span>grep -i MAILOPS <span class="nv">$$$$</span><span class="o">{</span>CONTROL<span class="o">}</span><span class="sb">`</span><span class="p">;</span> <span class="k">do</span> + <span class="k">if</span> <span class="o">[</span> <span class="nv">$$$$</span><span class="o">{</span>l<span class="o">}</span> -gt <span class="m">0</span> <span class="o">]</span> <span class="p">;</span> <span class="k">then</span> + mail -s flex.<span class="nv">$$$$</span><span class="o">{</span>HOST<span class="o">}</span>.<span class="nv">$$$$$$$$</span> <span class="nv">$$$$</span><span class="o">{</span>muser<span class="o">}</span> <prot + <span class="k">fi</span> + <span class="nv">l</span><span class="o">=</span><span class="k">$((</span><span class="nv">$$$$</span><span class="o">{</span>l<span class="o">}+</span><span class="m">1</span><span class="k">))</span> + <span class="k">done</span> +<span class="k">else</span> + <span class="nv">l</span><span class="o">=</span><span class="m">0</span> + <span class="k">for</span> muser in <span class="sb">`</span>grep -i MAILFAIL <span class="nv">$$$$</span><span class="o">{</span>CONTROL<span class="o">}</span><span class="sb">`</span><span class="p">;</span> <span class="k">do</span> + <span class="k">if</span> <span class="o">[</span> <span class="nv">$$$$</span><span class="o">{</span>l<span class="o">}</span> -gt <span class="m">0</span> <span class="o">]</span> <span class="p">;</span> <span class="k">then</span> + mail -s <span class="s2">"ERROR! flex.</span><span class="nv">$$$$</span><span class="s2">{HOST}.</span><span class="nv">$$$$$$$$</span><span class="s2">"</span> <span class="nv">$$$$</span><span class="o">{</span>muser<span class="o">}</span> <prot + <span class="k">fi</span> + <span class="nv">l</span><span class="o">=</span><span class="k">$((</span><span class="nv">$$$$</span><span class="o">{</span>l<span class="o">}+</span><span class="m">1</span><span class="k">))</span> + <span class="k">done</span> +<span class="k">fi</span> +</pre></div> +</div> +</div></blockquote> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="../output.html" class="btn btn-neutral float-right" title="Output Data" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="ecmwf_env.html" class="btn btn-neutral float-left" title="ECMWF User Credential file ECMWF_ENV" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Overview/app_modes.html b/Documentation/html/Documentation/Overview/app_modes.html new file mode 100644 index 0000000000000000000000000000000000000000..31dfda026c277164824738e8d5e97e9c7a2840e8 --- /dev/null +++ b/Documentation/html/Documentation/Overview/app_modes.html @@ -0,0 +1,277 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Application Modes — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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="Program Flow" href="prog_flow.html" /> + <link rel="prev" title="Overview" href="../overview.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2 current"><a class="reference internal" href="../overview.html">Overview</a><ul class="current"> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Application Modes</a><ul class="simple"> +</ul> +</li> +<li class="toctree-l3"><a class="reference internal" href="prog_flow.html">Program Flow</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../input.html">Control & Input Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="../api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <li><a href="../overview.html">Overview</a> »</li> + + <li>Application Modes</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Overview/app_modes.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="application-modes"> +<h1>Application Modes<a class="headerlink" href="#application-modes" title="Permalink to this headline">¶</a></h1> +<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> +</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> +</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> +</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> +</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"> +<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> +</div> +<div class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="prog_flow.html" class="btn btn-neutral float-right" title="Program Flow" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="../overview.html" class="btn btn-neutral float-left" title="Overview" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Overview/convert.html b/Documentation/html/Documentation/Overview/convert.html new file mode 100644 index 0000000000000000000000000000000000000000..521c1120787b62d765487fd5cf9816115e5e8e71 --- /dev/null +++ b/Documentation/html/Documentation/Overview/convert.html @@ -0,0 +1,238 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>CONVERT — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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="Control & Input Data" href="../input.html" /> + <link rel="prev" title="Program Flow" href="prog_flow.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2 current"><a class="reference internal" href="../overview.html">Overview</a><ul class="current"> +<li class="toctree-l3"><a class="reference internal" href="app_modes.html">Application Modes</a></li> +<li class="toctree-l3"><a class="reference internal" href="prog_flow.html">Program Flow</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">CONVERT</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../input.html">Control & Input Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="../api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <li><a href="../overview.html">Overview</a> »</li> + + <li>CONVERT</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Overview/convert.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="convert"> +<h1>CONVERT<a class="headerlink" href="#convert" title="Permalink to this headline">¶</a></h1> +<blockquote> +<div>UNDER CONSTRUCTION</div></blockquote> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="../input.html" class="btn btn-neutral float-right" title="Control & Input Data" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="prog_flow.html" class="btn btn-neutral float-left" title="Program Flow" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/Overview/prog_flow.html b/Documentation/html/Documentation/Overview/prog_flow.html new file mode 100644 index 0000000000000000000000000000000000000000..25894c1cb93b9a615068a31ece17aeedfb661930 --- /dev/null +++ b/Documentation/html/Documentation/Overview/prog_flow.html @@ -0,0 +1,314 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Program Flow — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <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="Control & Input Data" href="../input.html" /> + <link rel="prev" title="Application Modes" href="app_modes.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2 current"><a class="reference internal" href="../overview.html">Overview</a><ul class="current"> +<li class="toctree-l3"><a class="reference internal" href="app_modes.html">Application Modes</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Program Flow</a><ul> +<li class="toctree-l4"><a class="reference internal" href="#general-program-flow">General program flow</a></li> +<li class="toctree-l4"><a class="reference internal" href="#workflows-of-different-application-modes">Workflows of different application modes</a></li> +<li class="toctree-l4"><a class="reference internal" href="#example-application-setting-for-a-local-member-user">Example application setting for a local member user</a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../input.html">Control & Input Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="../vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="../api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../../documentation.html">Documentation</a> »</li> + + <li><a href="../overview.html">Overview</a> »</li> + + <li>Program Flow</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/Documentation/Overview/prog_flow.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="program-flow"> +<h1>Program Flow<a class="headerlink" href="#program-flow" title="Permalink to this headline">¶</a></h1> +<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"> +<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> +</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> +</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> +</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> +</dl> +</li> +</ol> +</div></blockquote> +</div> +<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"> +<colgroup> +<col width="51%" /> +<col width="49%" /> +</colgroup> +<tbody valign="top"> +<tr class="row-odd"><td><div class="first last figure"> +<img alt="../../_images/mode_remote.png" src="../../_images/mode_remote.png" /> +</div> +</td> +<td><div class="first last figure"> +<img alt="../../_images/mode_gateway.png" src="../../_images/mode_gateway.png" /> +</div> +</td> +</tr> +</tbody> +</table> +<table border="1" class="docutils"> +<colgroup> +<col width="51%" /> +<col width="49%" /> +</colgroup> +<tbody valign="top"> +<tr class="row-odd"><td><div class="first last figure"> +<img alt="../../_images/mode_local_member.png" src="../../_images/mode_local_member.png" /> +</div> +</td> +<td><div class="first last figure"> +<img alt="../../_images/mode_local_public.png" src="../../_images/mode_local_public.png" /> +</div> +</td> +</tr> +</tbody> +</table> +</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"> +<img alt="../../_images/ex_runlocal_en.png" src="../../_images/ex_runlocal_en.png" /> +</div> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="../input.html" class="btn btn-neutral float-right" title="Control & Input Data" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="app_modes.html" class="btn btn-neutral float-left" title="Application Modes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/api.html b/Documentation/html/Documentation/api.html new file mode 100644 index 0000000000000000000000000000000000000000..e593d05ffb717d0ec217b7f1d60328cc3760d2e9 --- /dev/null +++ b/Documentation/html/Documentation/api.html @@ -0,0 +1,237 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Auto Generated Documentation — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Python’s Auto Generated Documentation" href="Api/api_python.html" /> + <link rel="prev" title="Vertical Coordinate" href="vertco.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="overview.html">Overview</a></li> +<li class="toctree-l2"><a class="reference internal" href="input.html">Control & Input Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Auto Generated Documentation</a><ul> +<li class="toctree-l3"><a class="reference internal" href="Api/api_python.html">Python’s Auto Generated Documentation</a></li> +<li class="toctree-l3"><a class="reference internal" href="Api/api_fortran.html">Fortran’s Auto Generated Documentation</a></li> +</ul> +</li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../documentation.html">Documentation</a> »</li> + + <li>Auto Generated Documentation</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Documentation/api.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="auto-generated-documentation"> +<h1>Auto Generated Documentation<a class="headerlink" href="#auto-generated-documentation" title="Permalink to this headline">¶</a></h1> +<p><a class="reference internal" href="Api/api_python.html"><span class="doc">Python’s Auto Generated Documentation</span></a></p> +<p><a class="reference internal" href="Api/api_fortran.html"><span class="doc">Fortran’s Auto Generated Documentation</span></a></p> +<div class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="Api/api_python.html" class="btn btn-neutral float-right" title="Python’s Auto Generated Documentation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="vertco.html" class="btn btn-neutral float-left" title="Vertical Coordinate" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/disagg.html b/Documentation/html/Documentation/disagg.html new file mode 100644 index 0000000000000000000000000000000000000000..46e167cac04d5ee028ce3b0f805447fa722b27db --- /dev/null +++ b/Documentation/html/Documentation/disagg.html @@ -0,0 +1,372 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Disaggregation of Flux Data — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Vertical Coordinate" href="vertco.html" /> + <link rel="prev" title="Output Data" href="output.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="overview.html">Overview</a></li> +<li class="toctree-l2"><a class="reference internal" href="input.html">Control & Input Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="output.html">Output Data</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Disaggregation of Flux Data</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#disaggregation-for-precipitation-in-older-versions">Disaggregation for precipitation in older versions</a></li> +<li class="toctree-l3"><a class="reference internal" href="#disaggregation-for-precipitation-in-version-7-1">Disaggregation for precipitation in version 7.1</a></li> +<li class="toctree-l3"><a class="reference internal" href="#disaggregation-for-the-rest-of-the-flux-fields">Disaggregation for the rest of the flux fields</a><ul class="simple"> +</ul> +</li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../documentation.html">Documentation</a> »</li> + + <li>Disaggregation of Flux Data</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Documentation/disagg.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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"> +<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%" /> +</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> +</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> +</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> +<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> +<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> +<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> +<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> +</tbody> +</table> +<p>The first step is to <em>de-accumulate</em> the fields in time so that each value represents an integral in x, y, t space. +Afterwards, a <em>disaggregation</em> scheme is applied which means to break down the integral value into point values. +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> +</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> +<p>In <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> up to version 5 the disaggregation was done with a Fortran program (FLXACC2). In version 6 this part was converted to Python.</p> +<p>In the old versions (below 7.1) a relatively simple method processes the precipitation fields in a way that is consistent with the scheme applied in <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> for all variables: linear interpolation between times where input fields are available. +At first the accumulated values are divided by the number of hours (i.e., 3 or 6). +The best option for disaggregation, which was realised, is conservation within the interval under consideration plus the two adjacent ones. +Unfortunately, this leads to undesired temporal smoothing of the precipitation time series – maxima are damped and minima are raised. +It is even possible to produce non-zero precipitation in dry intervals bordering a precipitation period as shown in Fig. 1. +This is obviously undesirable as it will affect wet scavenging, a very efficient removal process for many atmospheric trace species. +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"> +<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> +</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"> +\[\begin{split} p_{ac} &= 0.5 * a_1\\ + m &= a_0 + a_2 > 0.\\ +p_{ac}(m) &= a_1(m) * a_2(m) / (a_0(m) + a_2(m))\\ + p_{bd} &= 0.5 * a_2\\ + m &= a_1 + a_3 > 0.\\ +p_{bd}(m) &= a_1(m) * a_2(m) / (a_1(m) + a_3(m))\\\end{split}\]</div> +<p>This new point <span class="math notranslate nohighlight">\(p\)</span> is used for linear interpolation of the complete timeseries afterwards. If one of the 4 original timespans has a value below 0 it is set to 0 prior to the calculation.</p> +<div class="math notranslate nohighlight"> +\[p = p_{ac} + p_{bd}\]</div> +</div> +<div class="section" id="disaggregation-for-precipitation-in-version-7-1"> +<h2>Disaggregation for precipitation in version 7.1<a class="headerlink" href="#disaggregation-for-precipitation-in-version-7-1" title="Permalink to this headline">¶</a></h2> +<p>Due to the problems with generating precipitation in originally dry (or lower) intervals and the temporal smoothing a new algorithm was developed. The approach is based on a one dimensional piecewise linear function with two additional supporting grid points within each grid cell, dividing the interval into three pieces. It fulfils the desired requirements by preserving the integral precipitation in each time interval, guaranteeing continuity at interval boundaries, and maintaining non-negativity. An additional monotonicity filter helps to gain monotonicity. +The more natural requirements of symmetry, reality, computational efficiency and easy implementation motivates the linear formulation. +These requirements on the reconstruction algorithm imply that time intervals with no precipitation remain unchanged, i.e. the reconstructed values vanish throughout this whole time interval, too. +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"> +<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> +</div> +<p>Figure 3 shows an overview of the new algorithm and its components.</p> +<div class="align-center figure" 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> +</div> +<p>The following lists the equations of the new algorithm.</p> +<div class="math notranslate nohighlight"> +\[ \begin{align}\begin{aligned}f_i^{(1)}=&\frac32 g_i -\frac{1}{12}f_{i}-\frac{5}{12}f_{i+1}\\f_i^{(2)}=&\frac32 g_i -\frac{5}{12}f_{i}-\frac{1}{12}f_{i+1}\\f_{i+1}=&\min\{3 g_i,3 g_{i+1},\sqrt{g_ig_{i+1}}\}\end{aligned}\end{align} \]</div> +<div class="math notranslate nohighlight"> +\[\begin{split}\textbf{if} \quad +\mathrm{sgn}(k_{i}^{(2)})\cdot \mathrm{sgn}(k_{i }^{(3)})&=-1 \quad \wedge \\ +\mathrm{sgn}(k_{i }^{(3)})\cdot \mathrm{sgn}(k_{i+1}^{(1)})&=-1 \quad \wedge \\ +\mathrm{sgn}(k_{i+1}^{(1)})\cdot \mathrm{sgn}(k_{i+1}^{(2)})&=-1 \quad +\textbf{then}\end{split}\]</div> +<div class="math notranslate nohighlight"> +\[ \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>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> +</div> +</div> +<div class="section" id="disaggregation-for-the-rest-of-the-flux-fields"> +<h2>Disaggregation for the rest of the flux fields<a class="headerlink" href="#disaggregation-for-the-rest-of-the-flux-fields" title="Permalink to this headline">¶</a></h2> +<p>The accumulated values for the other variables are first divided by the number of hours and +then interpolated to the exact times X using a bicubic interpolation which conserves the integrals of the fluxes within each timespan. +Disaggregation is done for 4 adjacent timespans (<span class="math notranslate nohighlight">\(p_a, p_b, p_c, p_d\)</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"> +\[\begin{split}p_a &= (a_3 - a_0 + 3. * (a_1 - a_2)) / 6. \\ +p_b &= (a_2 + a_0) / 2. - a_1 - 9. * p_a / 2. \\ +p_c &= a_1 - a_0 - 7. * p_a / 2. - 2. * p_b \\ +p_d &= a_0 - p_a / 4. - p_b / 3. - p_c / 2.\end{split}\]</div> +<p>This new point <span class="math notranslate nohighlight">\(p\)</span> is used for linear interpolation of the complete timeseries afterwards.</p> +<div class="math notranslate nohighlight"> +\[p = 8. * p_a + 4. * p_b + 2. * p_c + p_d\]</div> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="vertco.html" class="btn btn-neutral float-right" title="Vertical Coordinate" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="output.html" class="btn btn-neutral float-left" title="Output Data" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/input.html b/Documentation/html/Documentation/input.html new file mode 100644 index 0000000000000000000000000000000000000000..1c689c2c90464fb64b67a4c349ff9c0b213a3c2f --- /dev/null +++ b/Documentation/html/Documentation/input.html @@ -0,0 +1,301 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Control & Input Data — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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 Installation Script - setup.sh" href="Input/setup.html" /> + <link rel="prev" title="Program Flow" href="Overview/prog_flow.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="overview.html">Overview</a></li> +<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/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> +<li class="toctree-l3"><a class="reference internal" href="Input/control_params.html">The CONTROL parameters</a></li> +<li class="toctree-l3"><a class="reference internal" href="Input/examples.html">CONTROL file examples</a></li> +<li class="toctree-l3"><a class="reference internal" href="Input/changes.html">CONTROL file changes</a></li> +<li class="toctree-l3"><a class="reference internal" href="Input/ecmwf_env.html">ECMWF User Credential file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="Input/templates.html">Templates</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../documentation.html">Documentation</a> »</li> + + <li>Control & Input Data</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Documentation/input.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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> +<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> +</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> +</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> +</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>. +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 +</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>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> +</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> +</ul> +</dd> +</dl> +</dd> +</dl> +<div class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="Input/setup.html" class="btn btn-neutral float-right" title="The Installation Script - setup.sh" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="Overview/prog_flow.html" class="btn btn-neutral float-left" title="Program Flow" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/output.html b/Documentation/html/Documentation/output.html new file mode 100644 index 0000000000000000000000000000000000000000..4920cc442ddfae3b31fa534cbe5ee0c4374246ab --- /dev/null +++ b/Documentation/html/Documentation/output.html @@ -0,0 +1,542 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Output Data — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Disaggregation of Flux Data" href="disagg.html" /> + <link rel="prev" title="Templates" href="Input/templates.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="overview.html">Overview</a></li> +<li class="toctree-l2"><a class="reference internal" href="input.html">Control & Input Data</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Output Data</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#flexpart-input-files"><code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> input files</a><ul> +<li class="toctree-l4"><a class="reference internal" href="#standard-output-files">Standard output files</a></li> +<li class="toctree-l4"><a class="reference internal" href="#output-files-for-pure-forecast">Output files for pure forecast</a></li> +<li class="toctree-l4"><a class="reference internal" href="#output-files-for-ensemble-predictions">Output files for ensemble predictions</a></li> +<li class="toctree-l4"><a class="reference internal" href="#additional-fields-with-new-precipitation-disaggregation">Additional fields with new precipitation disaggregation</a></li> +</ul> +</li> +<li class="toctree-l3"><a class="reference internal" href="#temporary-files">Temporary files</a><ul> +<li class="toctree-l4"><a class="reference internal" href="#mars-grib-files">MARS grib files</a></li> +<li class="toctree-l4"><a class="reference internal" href="#mars-request-file">MARS request file</a></li> +<li class="toctree-l4"><a class="reference internal" href="#vertical-ec">VERTICAL.EC</a></li> +<li class="toctree-l4"><a class="reference internal" href="#index-file">Index file</a></li> +<li class="toctree-l4"><a class="reference internal" href="#flux-files">flux files</a></li> +<li class="toctree-l4"><a class="reference internal" href="#fort-files">fort files</a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../documentation.html">Documentation</a> »</li> + + <li>Output Data</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Documentation/output.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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"> +<colgroup> +<col width="51%" /> +<col 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> +</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> +</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> +</ul> +</td> +</tr> +</tbody> +</table> +<div class="section" id="flexpart-input-files"> +<h2><code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> input files<a class="headerlink" href="#flexpart-input-files" title="Permalink to this headline">¶</a></h2> +<p>The final output files of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> are also the meteorological <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> input files. +The naming of these files depend on the kind of data extracted by <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>.</p> +<div class="section" id="standard-output-files"> +<h3>Standard output files<a class="headerlink" href="#standard-output-files" title="Permalink to this headline">¶</a></h3> +<p>In general, there is a file for each time step with the filename format:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><prefix>YYMMDDHH +</pre></div> +</div> +<p>The <code class="docutils literal notranslate"><span class="pre">prefix</span></code> is by default defined as <code class="docutils literal notranslate"><span class="pre">EN</span></code> and can be re-defined in the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file. +Each file contains all meteorological fields needed by <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> for all selected model levels for a specific time step.</p> +<p>Here is an example output which lists the meteorological fields in a single file called <code class="docutils literal notranslate"><span class="pre">CE00010800</span></code> where we extracted only the lowest model level for demonstration reasons:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ grib_ls CE00010800 + +edition centre date dataType gridType stepRange typeOfLevel level shortName packingType +<span class="m">2</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> hybrid <span class="m">91</span> u grid_simple +<span class="m">2</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> hybrid <span class="m">91</span> v grid_simple +<span class="m">2</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> hybrid <span class="m">91</span> etadot grid_simple +<span class="m">2</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> hybrid <span class="m">91</span> t grid_simple +<span class="m">2</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">1</span> sp grid_simple +<span class="m">2</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> hybrid <span class="m">91</span> q grid_simple +<span class="m">2</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> hybrid <span class="m">91</span> qc grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> <span class="nb">fc</span> regular_ll <span class="m">0</span> surface <span class="m">0</span> sshf grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> <span class="nb">fc</span> regular_ll <span class="m">0</span> surface <span class="m">0</span> ewss grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> <span class="nb">fc</span> regular_ll <span class="m">0</span> surface <span class="m">0</span> nsss grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> <span class="nb">fc</span> regular_ll <span class="m">0</span> surface <span class="m">0</span> ssr grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> <span class="nb">fc</span> regular_ll <span class="m">0</span> surface <span class="m">0</span> lsp grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> <span class="nb">fc</span> regular_ll <span class="m">0</span> surface <span class="m">0</span> cp grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> sd grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> msl grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> tcc grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> 10u grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> 10v grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> 2t grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> 2d grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> z grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> lsm grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> cvl grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> cvh grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> lcc grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> mcc grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> hcc grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> skt grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> depthBelowLandLayer <span class="m">0</span> stl1 grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> depthBelowLandLayer <span class="m">0</span> swvl1 grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> sr grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> sdor grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> cvl grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> cvh grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> an regular_ll <span class="m">0</span> surface <span class="m">0</span> fsr grid_simple +<span class="m">35</span> of <span class="m">35</span> messages in CE00010800 +</pre></div> +</div> +</div> +<div class="section" id="output-files-for-pure-forecast"> +<h3>Output files for pure forecast<a class="headerlink" href="#output-files-for-pure-forecast" title="Permalink to this headline">¶</a></h3> +<p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> can retrieve forecasts which can be longer than 23 hours. To avoid collisions of time steps for forecasts of more than one day a new scheme for filenames in pure forecast mode is introduced:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><prefix>YYMMDD.HH.<FORECAST_STEP> +</pre></div> +</div> +<p>The <code class="docutils literal notranslate"><span class="pre"><prefix></span></code> is, as in the standard output, by default <code class="docutils literal notranslate"><span class="pre">EN</span></code> and can be re-defined in the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file. <code class="docutils literal notranslate"><span class="pre">YYMMDD</span></code> is the date format and <code class="docutils literal notranslate"><span class="pre">HH</span></code> the forecast time which is the starting time for the forecasts. The <code class="docutils literal notranslate"><span class="pre">FORECAST_STEP</span></code> is a 3 digit number which represents the forecast step in hours.</p> +</div> +<div class="section" id="output-files-for-ensemble-predictions"> +<h3>Output files for ensemble predictions<a class="headerlink" href="#output-files-for-ensemble-predictions" title="Permalink to this headline">¶</a></h3> +<p>Ensembles can be retrieved and are addressed by the grib message parameter <code class="docutils literal notranslate"><span class="pre">number</span></code>. The ensembles are saved per file and standard filenames are supplemented by the letter <code class="docutils literal notranslate"><span class="pre">N</span></code> and the ensemble member number in a 3 digit format.</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><prefix>YYMMDDHH.N<ENSEMBLE_MEMBER> +</pre></div> +</div> +</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> ??????????????????. +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> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ grib_ls + +edition centre date dataType gridType stepRange typeOfLevel level shortName packingType +<span class="m">1</span> ecmf <span class="m">20000108</span> <span class="nb">fc</span> regular_ll <span class="m">0</span> surface <span class="m">0</span> lsp grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> <span class="nb">fc</span> regular_ll <span class="m">1</span> surface <span class="m">0</span> lsp grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> <span class="nb">fc</span> regular_ll <span class="m">2</span> surface <span class="m">0</span> lsp grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> <span class="nb">fc</span> regular_ll <span class="m">0</span> surface <span class="m">0</span> cp grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> <span class="nb">fc</span> regular_ll <span class="m">1</span> surface <span class="m">0</span> cp grid_simple +<span class="m">1</span> ecmf <span class="m">20000108</span> <span class="nb">fc</span> regular_ll <span class="m">2</span> surface <span class="m">0</span> cp grid_simple +</pre></div> +</div> +</div> +</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> +<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>. +Since the request times and data transfer of MARS access are limited and ECMWF asks for efficiency in requesting data from MARS, <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> splits the overall data request in several smaller requests. Each request is stored in an extra <code class="docutils literal notranslate"><span class="pre">.grb</span></code> file and the file names are put together by several pieces of information:</p> +<blockquote> +<div><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><field_type><grid_type><temporal_property><level_type>.<date>.<ppid>.<pid>.grb +</pre></div> +</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> +<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> +<blockquote> +<div><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ANOG__ML.20000908.71851.71852.grb +FCOG_acc_SL.20000907.71851.71852.grb +ANOG__SL.20000908.71851.71852.grb +OG_OROLSM__SL.20000908.71851.71852.grb +ANSH__SL.20000908.71851.71852.grb +</pre></div> +</div> +</div></blockquote> +</div> +<div class="section" id="mars-request-file"> +<h3>MARS request file<a class="headerlink" href="#mars-request-file" title="Permalink to this headline">¶</a></h3> +<p>This file is a <code class="docutils literal notranslate"><span class="pre">csv</span></code> file called <code class="docutils literal notranslate"><span class="pre">mars_requests.csv</span></code> with a list of the actual settings of MARS request parameters (one request per line) in a flex_extract job. It is used for documenting the data which were retrieved and for testing reasons.</p> +<p>Each request consist of the following parameters, whose meaning mainly can be taken from <a class="reference internal" href="Input/control_params.html"><span class="doc">The CONTROL parameters</span></a> or <a class="reference internal" href="Input/run.html"><span class="doc">The executable Script - run.sh</span></a>: +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type</p> +<p>Example output of a one day retrieval of CERA-20c data:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, <span class="nb">type</span> +<span class="m">1</span>, <span class="m">24</span>, <span class="m">40</span>.0/-5.0/30.0/5.0, None, <span class="m">20000107</span>/to/20000109, <span class="m">1</span>, , <span class="m">1</span>.0/1.0, <span class="m">1</span>, SFC, EP, <span class="m">000</span>, <span class="m">142</span>.128/143.128/146.128/180.128/181.128/176.128, , <span class="m">159</span>, <span class="m">3</span>/to/24/by/3, ENDA, /mnt/nas/Anne/Interpolation/flexextract/flex_extract_v7.1/run/./workspace/CERA_testgrid_local_cds/FCOG_acc_SL.20000107.23903.23904.grb, <span class="m">18</span>, FC +<span class="m">1</span>, <span class="m">24</span>, <span class="m">40</span>.0/-5.0/30.0/5.0, None, <span class="m">20000108</span>/to/20000108, <span class="m">1</span>, , <span class="m">1</span>.0/1.0, <span class="m">85</span>/to/91, ML, EP, <span class="m">000</span>, <span class="m">130</span>.128/133.128/131.128/132.128/077.128/246.128/247.128, , <span class="m">159</span>, <span class="m">00</span>, ENDA, /mnt/nas/Anne/Interpolation/flexextract/flex_extract_v7.1/run/./workspace/CERA_testgrid_local_cds/ANOG__ML.20000108.23903.23904.grb, <span class="m">00</span>/03/06/09/12/15/18/21, AN +<span class="m">2</span>, <span class="m">24</span>, <span class="m">40</span>.0/-5.0/30.0/5.0, None, <span class="m">20000108</span>/to/20000108, <span class="m">1</span>, , OFF, <span class="m">1</span>, ML, EP, <span class="m">000</span>, <span class="m">152</span>.128, , <span class="m">159</span>, <span class="m">00</span>, ENDA, /mnt/nas/Anne/Interpolation/flexextract/flex_extract_v7.1/run/./workspace/CERA_testgrid_local_cds/ANSH__SL.20000108.23903.23904.grb, <span class="m">00</span>/03/06/09/12/15/18/21, AN +<span class="m">3</span>, <span class="m">24</span>, <span class="m">40</span>.0/-5.0/30.0/5.0, None, <span class="m">20000108</span>, <span class="m">1</span>, , <span class="m">1</span>.0/1.0, <span class="m">1</span>, SFC, EP, <span class="m">000</span>, <span class="m">160</span>.128/027.128/028.128/244.128, , <span class="m">159</span>, <span class="m">000</span>, ENDA, /mnt/nas/Anne/Interpolation/flexextract/flex_extract_v7.1/run/./workspace/CERA_testgrid_local_cds/OG_OROLSM__SL.20000108.23903.23904.grb, <span class="m">00</span>, AN +<span class="m">4</span>, <span class="m">24</span>, <span class="m">40</span>.0/-5.0/30.0/5.0, None, <span class="m">20000108</span>/to/20000108, <span class="m">1</span>, , <span class="m">1</span>.0/1.0, <span class="m">1</span>, SFC, EP, <span class="m">000</span>, <span class="m">141</span>.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/027.128/028.128/186.128/187.128/188.128/235.128/139.128/039.128/173.128, , <span class="m">159</span>, <span class="m">00</span>, ENDA, /mnt/nas/Anne/Interpolation/flexextract/flex_extract_v7.1/run/./workspace/CERA_testgrid_local_cds/ANOG__SL.20000108.23903.23904.grb, <span class="m">00</span>/03/06/09/12/15/18/21, AN +</pre></div> +</div> +</div> +<div class="section" id="vertical-ec"> +<h3>VERTICAL.EC<a class="headerlink" href="#vertical-ec" title="Permalink to this headline">¶</a></h3> +<p>The vertical discretization of model levels. This file contains the <code class="docutils literal notranslate"><span class="pre">A</span></code> and <code class="docutils literal notranslate"><span class="pre">B</span></code> parameters to calculate the model level height in meters.</p> +</div> +<div class="section" id="index-file"> +<h3>Index file<a class="headerlink" href="#index-file" title="Permalink to this headline">¶</a></h3> +<p>This file is usually called <code class="docutils literal notranslate"><span class="pre">date_time_stepRange.idx</span></code>. It contains indices pointing to specific grib messages from one or more grib files. The messages are selected with a composition of grib message keywords.</p> +</div> +<div class="section" id="flux-files"> +<h3>flux files<a class="headerlink" href="#flux-files" title="Permalink to this headline">¶</a></h3> +<p>The flux files contain the de-accumulated and dis-aggregated flux fields of large scale and convective precipitation, eastward turbulent surface stress, northward turbulent surface stress, surface sensible heat flux and the surface net solar radiation.</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>flux<date><span class="o">[</span>.N<xxx><span class="o">][</span>.<xxx><span class="o">]</span> +</pre></div> +</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> +</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> +<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"> +<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%" /> +</colgroup> +<thead valign="bottom"> +<tr class="row-odd"><th class="head">Number</th> +<th class="head">Content</th> +</tr> +</thead> +<tbody valign="top"> +<tr class="row-even"><td>10</td> +<td>U and V wind components</td> +</tr> +<tr class="row-odd"><td>11</td> +<td>temperature</td> +</tr> +<tr class="row-even"><td>12</td> +<td>logarithm of surface pressure</td> +</tr> +<tr class="row-odd"><td>13</td> +<td>divergence (optional)</td> +</tr> +<tr class="row-even"><td>16</td> +<td>surface fields</td> +</tr> +<tr class="row-odd"><td>17</td> +<td>specific humidity</td> +</tr> +<tr class="row-even"><td>18</td> +<td>surface specific humidity (reduced gaussian)</td> +</tr> +<tr class="row-odd"><td>19</td> +<td>vertical velocity (pressure) (optional)</td> +</tr> +<tr class="row-even"><td>21</td> +<td>eta-coordinate vertical velocity (optional)</td> +</tr> +<tr class="row-odd"><td>22</td> +<td>total cloud water content (optional)</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> +<colgroup> +<col width="20%" /> +<col width="80%" /> +</colgroup> +<thead valign="bottom"> +<tr class="row-odd"><th class="head">Number</th> +<th class="head">Content</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> +</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> +<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>Example of a namelist:</p> +<div class="last 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>, + <span class="nv">mlevelist</span> <span class="o">=</span> <span class="s2">"85/to/91"</span>, + <span class="nv">mnauf</span> <span class="o">=</span> <span class="m">159</span>, + <span class="nv">metapar</span> <span class="o">=</span> <span class="m">77</span>, + <span class="nv">rlo0</span> <span class="o">=</span> -5.0, + <span class="nv">rlo1</span> <span class="o">=</span> <span class="m">5</span>.0, + <span class="nv">rla0</span> <span class="o">=</span> <span class="m">30</span>.0, + <span class="nv">rla1</span> <span class="o">=</span> <span class="m">40</span>.0, + <span class="nv">momega</span> <span class="o">=</span> <span class="m">0</span>, + <span class="nv">momegadiff</span> <span class="o">=</span> <span class="m">0</span>, + <span class="nv">mgauss</span> <span class="o">=</span> <span class="m">0</span>, + <span class="nv">msmooth</span> <span class="o">=</span> <span class="m">0</span>, + <span class="nv">meta</span> <span class="o">=</span> <span class="m">1</span>, + <span class="nv">metadiff</span> <span class="o">=</span> <span class="m">0</span>, + <span class="nv">mdpdeta</span> <span class="o">=</span> <span class="m">1</span> +/ +</pre></div> +</div> +</div> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="disagg.html" class="btn btn-neutral float-right" title="Disaggregation of Flux Data" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="Input/templates.html" class="btn btn-neutral float-left" title="Templates" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/overview.html b/Documentation/html/Documentation/overview.html new file mode 100644 index 0000000000000000000000000000000000000000..24d7d278dc3f7cbacee3d6c0fbd5bfa8ba83b56f --- /dev/null +++ b/Documentation/html/Documentation/overview.html @@ -0,0 +1,250 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Overview — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Application Modes" href="Overview/app_modes.html" /> + <link rel="prev" title="Documentation" href="../documentation.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Overview</a><ul> +<li class="toctree-l3"><a class="reference internal" href="Overview/app_modes.html">Application Modes</a></li> +<li class="toctree-l3"><a class="reference internal" href="Overview/prog_flow.html">Program Flow</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="input.html">Control & Input Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../documentation.html">Documentation</a> »</li> + + <li>Overview</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Documentation/overview.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="overview"> +<h1>Overview<a class="headerlink" href="#overview" title="Permalink to this headline">¶</a></h1> +<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> +</ol> +</dd> +</dl> +<p>Additionally, it has some Korn shell scripts which are used to set the environment and batch job features on ECMWF servers for the <em>gateway</em> and <em>remote</em> mode. See <a class="reference internal" href="Overview/app_modes.html"><span class="doc">Application Modes</span></a> for information of application modes.</p> +<p>A number of Shell scripts are wrapped around the software package for easy installation and fast job submission.</p> +<p>The software depends on a number of third-party libraries which can be found in <a class="reference internal" href="../installation.html#ref-requirements"><span class="std std-ref">Dependencies</span></a>.</p> +<p>Some details on the tasks and program worksteps are described in <a class="reference internal" href="Overview/prog_flow.html"><span class="doc">Program Flow</span></a>.</p> +<div class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="Overview/app_modes.html" class="btn btn-neutral float-right" title="Application Modes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="../documentation.html" class="btn btn-neutral float-left" title="Documentation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Documentation/vertco.html b/Documentation/html/Documentation/vertco.html new file mode 100644 index 0000000000000000000000000000000000000000..e3accb78f8615f70b9038c425f996fe3ea4ea4ba --- /dev/null +++ b/Documentation/html/Documentation/vertco.html @@ -0,0 +1,296 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Vertical Coordinate — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Auto Generated Documentation" href="api.html" /> + <link rel="prev" title="Disaggregation of Flux Data" href="disagg.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../documentation.html">Documentation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="overview.html">Overview</a></li> +<li class="toctree-l2"><a class="reference internal" href="input.html">Control & Input Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Vertical Coordinate</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#calculation-of-vertical-velocity-and-preparation-of-output-files">Calculation of vertical velocity and preparation of Output-files</a></li> +<li class="toctree-l3"><a class="reference internal" href="#calculation-of-vertical-velocity-from-horizontal-wind-using-the-continuity-equation">Calculation of vertical velocity from horizontal wind using the continuity equation</a></li> +<li class="toctree-l3"><a class="reference internal" href="#calculation-of-vertical-velocity-from-pre-calculated-mars-parameter-77">Calculation of vertical velocity from pre-calculated MARS parameter 77</a><ul class="simple"> +</ul> +</li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../documentation.html">Documentation</a> »</li> + + <li>Vertical Coordinate</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Documentation/vertco.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="vertical-coordinate"> +<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> +</ol> +</dd> +</dl> +<p>Especially for high resolution data, use of the <code class="docutils literal notranslate"><span class="pre">MARS</span></code> parameter 77 is recommended, +since the computational cost (measured in ECMWF HPC units) is reduced by 90-95% at +T799. The extraction time, which depends heavily also on the performance of <code class="docutils literal notranslate"><span class="pre">MARS</span></code>, is +generally reduced by 50% as well. The <code class="docutils literal notranslate"><span class="pre">MARS</span></code> parameter 77 is then multiplied by <code class="docutils literal notranslate"><span class="pre">dp/deta</span></code> to +give a vertical velocity in Pa/s as needed by <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code>.</p> +<p>Calculation from the horizontal wind field is still required for historical case studies using +<strong>ERA-40</strong>, <strong>ERA-Interim</strong> or operational data prior to September 2008.</p> +</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 +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 +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> +</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> +</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>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> +</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"> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="api.html" class="btn btn-neutral float-right" title="Auto Generated Documentation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="disagg.html" class="btn btn-neutral float-left" title="Disaggregation of Flux Data" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Ecmwf/access.html b/Documentation/html/Ecmwf/access.html new file mode 100644 index 0000000000000000000000000000000000000000..c67083684f4181895348b5085c641ead66b8cd35 --- /dev/null +++ b/Documentation/html/Ecmwf/access.html @@ -0,0 +1,244 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Access Modes — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Available Datasets for Member State users" href="msdata.html" /> + <link rel="prev" title="ECMWF Data" href="../ecmwf_data.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a><ul class="current"> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Access Modes</a><ul class="simple"> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="msdata.html">Available Datasets for Member State users</a></li> +<li class="toctree-l2"><a class="reference internal" href="pubdata.html">Available Datasets for Public users</a></li> +<li class="toctree-l2"><a class="reference internal" href="hintsecmwf.html">Hints to specify dataset retrieval</a></li> +<li class="toctree-l2"><a class="reference internal" href="ec-links.html">Link Collection for Quick finder</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../ecmwf_data.html">ECMWF Data</a> »</li> + + <li>Access Modes</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Ecmwf/access.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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> +<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> +</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"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="msdata.html" class="btn btn-neutral float-right" title="Available Datasets for Member State users" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="../ecmwf_data.html" class="btn btn-neutral float-left" title="ECMWF Data" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Ecmwf/ec-links.html b/Documentation/html/Ecmwf/ec-links.html new file mode 100644 index 0000000000000000000000000000000000000000..9607685cd8d67d9148df142cfc7f46f5b120f661 --- /dev/null +++ b/Documentation/html/Ecmwf/ec-links.html @@ -0,0 +1,314 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Link Collection for Quick finder — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Documentation" href="../documentation.html" /> + <link rel="prev" title="Hints to specify dataset retrieval" href="hintsecmwf.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="access.html">Access Modes</a></li> +<li class="toctree-l2"><a class="reference internal" href="msdata.html">Available Datasets for Member State users</a></li> +<li class="toctree-l2"><a class="reference internal" href="pubdata.html">Available Datasets for Public users</a></li> +<li class="toctree-l2"><a class="reference internal" href="hintsecmwf.html">Hints to specify dataset retrieval</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Link Collection for Quick finder</a><ul class="simple"> +</ul> +</li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../ecmwf_data.html">ECMWF Data</a> »</li> + + <li>Link Collection for Quick finder</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Ecmwf/ec-links.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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> +<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> +</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> +<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> +</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> +<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> +</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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +<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> +</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> +</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> +<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> +</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> +<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> +</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> +</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> +</dl> +<div class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="../documentation.html" class="btn btn-neutral float-right" title="Documentation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="hintsecmwf.html" class="btn btn-neutral float-left" title="Hints to specify dataset retrieval" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Ecmwf/hintsecmwf.html b/Documentation/html/Ecmwf/hintsecmwf.html new file mode 100644 index 0000000000000000000000000000000000000000..711730ff5c5efa452d017e542b1ecafced695217 --- /dev/null +++ b/Documentation/html/Ecmwf/hintsecmwf.html @@ -0,0 +1,246 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Hints to specify dataset retrieval — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Link Collection for Quick finder" href="ec-links.html" /> + <link rel="prev" title="Available Datasets for Public users" href="pubdata.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="access.html">Access Modes</a></li> +<li class="toctree-l2"><a class="reference internal" href="msdata.html">Available Datasets for Member State users</a></li> +<li class="toctree-l2"><a class="reference internal" href="pubdata.html">Available Datasets for Public users</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Hints to specify dataset retrieval</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#how-can-i-find-out-what-data-is-available">How can I find out what data is available?</a><ul class="simple"> +</ul> +</li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="ec-links.html">Link Collection for Quick finder</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../ecmwf_data.html">ECMWF Data</a> »</li> + + <li>Hints to specify dataset retrieval</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Ecmwf/hintsecmwf.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="hints-to-specify-dataset-retrieval"> +<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> +</ul> +</div> +<div class="section" id="how-can-i-find-out-what-data-is-available"> +<h2><a class="toc-backref" href="#id1">How can I find out what data is available?</a><a class="headerlink" href="#how-can-i-find-out-what-data-is-available" title="Permalink to this headline">¶</a></h2> +<p>Go to the <a class="reference external" href="http://apps.ecmwf.int/archive-catalogue/">Web Interface for accessing member state datasets</a> +and click yourself through the steps to define your set of data and see what is available to you.</p> +<p>For public users there is the <a class="reference external" href="http://apps.ecmwf.int/datasets/">Web Interface for accessing public datasets</a>.</p> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="ec-links.html" class="btn btn-neutral float-right" title="Link Collection for Quick finder" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="pubdata.html" class="btn btn-neutral float-left" title="Available Datasets for Public users" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Ecmwf/msdata.html b/Documentation/html/Ecmwf/msdata.html new file mode 100644 index 0000000000000000000000000000000000000000..bcf5511ffc433ef49572a1f0f736d42aabb14152 --- /dev/null +++ b/Documentation/html/Ecmwf/msdata.html @@ -0,0 +1,251 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Available Datasets for Member State users — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Available Datasets for Public users" href="pubdata.html" /> + <link rel="prev" title="Access Modes" href="access.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="access.html">Access Modes</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Available Datasets for Member State users</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#model-level-data">Model level data</a></li> +<li class="toctree-l3"><a class="reference internal" href="#surface-level-data">Surface level data</a><ul class="simple"> +</ul> +</li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="pubdata.html">Available Datasets for Public users</a></li> +<li class="toctree-l2"><a class="reference internal" href="hintsecmwf.html">Hints to specify dataset retrieval</a></li> +<li class="toctree-l2"><a class="reference internal" href="ec-links.html">Link Collection for Quick finder</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../ecmwf_data.html">ECMWF Data</a> »</li> + + <li>Available Datasets for Member State users</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Ecmwf/msdata.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="available-datasets-for-member-state-users"> +<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"> +<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"> +<img alt="../_images/ECMWF_FPparameter_sfc-0.png" src="../_images/ECMWF_FPparameter_sfc-0.png" /> +</div> +<div class="figure"> +<img alt="../_images/ECMWF_FPparameter_sfc-1.png" src="../_images/ECMWF_FPparameter_sfc-1.png" /> +</div> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="pubdata.html" class="btn btn-neutral float-right" title="Available Datasets for Public users" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="access.html" class="btn btn-neutral float-left" title="Access Modes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Ecmwf/pubdata.html b/Documentation/html/Ecmwf/pubdata.html new file mode 100644 index 0000000000000000000000000000000000000000..08afc4799ef8a718549d83a3714d08f543e6c58e --- /dev/null +++ b/Documentation/html/Ecmwf/pubdata.html @@ -0,0 +1,234 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Available Datasets for Public users — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Hints to specify dataset retrieval" href="hintsecmwf.html" /> + <link rel="prev" title="Available Datasets for Member State users" href="msdata.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="access.html">Access Modes</a></li> +<li class="toctree-l2"><a class="reference internal" href="msdata.html">Available Datasets for Member State users</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Available Datasets for Public users</a><ul class="simple"> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="hintsecmwf.html">Hints to specify dataset retrieval</a></li> +<li class="toctree-l2"><a class="reference internal" href="ec-links.html">Link Collection for Quick finder</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../ecmwf_data.html">ECMWF Data</a> »</li> + + <li>Available Datasets for Public users</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Ecmwf/pubdata.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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 class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="hintsecmwf.html" class="btn btn-neutral float-right" title="Hints to specify dataset retrieval" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="msdata.html" class="btn btn-neutral float-left" title="Available Datasets for Member State users" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Evaluation/metrics.html b/Documentation/html/Evaluation/metrics.html new file mode 100644 index 0000000000000000000000000000000000000000..b5b6557935127b072737e80b47393f11b343ab06 --- /dev/null +++ b/Documentation/html/Evaluation/metrics.html @@ -0,0 +1,232 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Metrics — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Developer Guide" href="../dev_guide.html" /> + <link rel="prev" title="Testcases" href="testcases.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../evaluation.html">Evaluation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="staticcode.html">Static Code Analysis</a></li> +<li class="toctree-l2"><a class="reference internal" href="testcases.html">Testcases</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Metrics</a><ul class="simple"> +</ul> +</li> +</ul> +</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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../evaluation.html">Evaluation</a> »</li> + + <li>Metrics</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Evaluation/metrics.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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 class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="../dev_guide.html" class="btn btn-neutral float-right" title="Developer Guide" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="testcases.html" class="btn btn-neutral float-left" title="Testcases" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Evaluation/staticcode.html b/Documentation/html/Evaluation/staticcode.html new file mode 100644 index 0000000000000000000000000000000000000000..7df9c2123530e0f0dec45c2e15d5a68071cc786b --- /dev/null +++ b/Documentation/html/Evaluation/staticcode.html @@ -0,0 +1,232 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Static Code Analysis — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Testcases" href="testcases.html" /> + <link rel="prev" title="Evaluation" href="../evaluation.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../evaluation.html">Evaluation</a><ul class="current"> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Static Code Analysis</a><ul class="simple"> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="testcases.html">Testcases</a></li> +<li class="toctree-l2"><a class="reference internal" href="metrics.html">Metrics</a></li> +</ul> +</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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../evaluation.html">Evaluation</a> »</li> + + <li>Static Code Analysis</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Evaluation/staticcode.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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 class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="testcases.html" class="btn btn-neutral float-right" title="Testcases" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="../evaluation.html" class="btn btn-neutral float-left" title="Evaluation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Evaluation/testcases.html b/Documentation/html/Evaluation/testcases.html new file mode 100644 index 0000000000000000000000000000000000000000..8cee1c0282ad48d8ff493144fa6ce781e74993b2 --- /dev/null +++ b/Documentation/html/Evaluation/testcases.html @@ -0,0 +1,240 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Testcases — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Metrics" href="metrics.html" /> + <link rel="prev" title="Static Code Analysis" href="staticcode.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../evaluation.html">Evaluation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="staticcode.html">Static Code Analysis</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Testcases</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#comparison-of-mars-requests">Comparison of MARS requests</a></li> +<li class="toctree-l3"><a class="reference internal" href="#comparison-of-grib-files">Comparison of grib files</a><ul class="simple"> +</ul> +</li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="metrics.html">Metrics</a></li> +</ul> +</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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../evaluation.html">Evaluation</a> »</li> + + <li>Testcases</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Evaluation/testcases.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="testcases"> +<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> +</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> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="metrics.html" class="btn btn-neutral float-right" title="Metrics" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="staticcode.html" class="btn btn-neutral float-left" title="Static Code Analysis" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Installation/gateway.html b/Documentation/html/Installation/gateway.html new file mode 100644 index 0000000000000000000000000000000000000000..0f4e077f8b21977bdf6ea4579530421ecf597cfd --- /dev/null +++ b/Documentation/html/Installation/gateway.html @@ -0,0 +1,329 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Gateway mode installation — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Local mode installation" href="local.html" /> + <link rel="prev" title="Remote mode installation" href="remote.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1 current"><a class="reference internal" href="../installation.html">Installation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#registration-at-ecmwf">Registration at ECMWF</a></li> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#licence-agreement-for-public-datasets">Licence agreement for public datasets</a></li> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#download-flex-extract">Download <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code></a></li> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#dependencies">Dependencies</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="../installation.html#installation-of-flex-extract">Installation of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code></a><ul class="current"> +<li class="toctree-l3"><a class="reference internal" href="remote.html">Remote mode installation</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Gateway mode installation</a><ul> +<li class="toctree-l4"><a class="reference internal" href="#gateway-mode-dependencies">Gateway mode - dependencies</a></li> +<li class="toctree-l4"><a class="reference internal" href="#prepare-gateway-environment">Prepare gateway environment</a></li> +<li class="toctree-l4"><a class="reference internal" href="#test-gateway-environment">Test gateway environment</a></li> +<li class="toctree-l4"><a class="reference internal" href="#gateway-installation">Gateway installation</a></li> +</ul> +</li> +<li class="toctree-l3"><a class="reference internal" href="local.html">Local mode installation</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#flex-extract-in-combination-with-flexpart"><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> in combination with <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code></a></li> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#test-installation">Test installation</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../installation.html">Installation</a> »</li> + + <li>Gateway mode installation</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Installation/gateway.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="gateway-mode-installation"> +<h1>Gateway mode installation<a class="headerlink" href="#gateway-mode-installation" title="Permalink to this headline">¶</a></h1> +<div class="toctree-wrapper compound"> +</div> +<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> +</ul> +</div> +<div class="section" id="prepare-gateway-environment"> +<span id="ref-prep-gateway"></span><h2>Prepare gateway environment<a class="headerlink" href="#prepare-gateway-environment" title="Permalink to this headline">¶</a></h2> +<p>In this mode, access to the ECMWF computing and archiving facilities is enabled through an ECaccess gateway server on a local member state server. The ECaccess framework is necessary to interactively submit jobs to the ECMWF batch system and to transfer files between ECMWF and local gateway server.</p> +<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 +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. +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> +apt-get install python3 +apt-get install python3-genshi +apt-get install python3-numpy +</pre></div> +</div> +</div> +<div class="section" id="test-gateway-environment"> +<span id="ref-test-gateway"></span><h2>Test gateway environment<a class="headerlink" href="#test-gateway-environment" title="Permalink to this headline">¶</a></h2> +<p>Check the availability of the python packages by typing <code class="docutils literal notranslate"><span class="pre">python3</span></code> in +a terminal window and run the <code class="docutils literal notranslate"><span class="pre">import</span></code> commands in the python shell. +If there are no error messages, you succeeded in setting up the environment.</p> +<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># check in python3 console</span> +<span class="kn">import</span> <span class="nn">genshi</span> +<span class="kn">import</span> <span class="nn">numpy</span> +</pre></div> +</div> +</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. +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> +<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">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> +</div> +<p>Afterwards, type:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ ./setup.sh +</pre></div> +</div> +<p>to start the installation. You should see the following on standard output.</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Output of setup.sh</span> +Create tarball ... +Job compilation script has been submitted to ecgate <span class="k">for</span> installation in <span class="si">${</span><span class="nv">HOME</span><span class="si">}</span>/flex_extract_vX.X +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 +SUCCESS! +</pre></div> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="local.html" class="btn btn-neutral float-right" title="Local mode installation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="remote.html" class="btn btn-neutral float-left" title="Remote mode installation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Installation/local.html b/Documentation/html/Installation/local.html new file mode 100644 index 0000000000000000000000000000000000000000..d45443650d404ab956a7891b70a2dc8b34d434c7 --- /dev/null +++ b/Documentation/html/Installation/local.html @@ -0,0 +1,534 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Local mode installation — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Quick Start" href="../quick_start.html" /> + <link rel="prev" title="Gateway mode installation" href="gateway.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1 current"><a class="reference internal" href="../installation.html">Installation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#registration-at-ecmwf">Registration at ECMWF</a></li> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#licence-agreement-for-public-datasets">Licence agreement for public datasets</a></li> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#download-flex-extract">Download <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code></a></li> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#dependencies">Dependencies</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="../installation.html#installation-of-flex-extract">Installation of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code></a><ul class="current"> +<li class="toctree-l3"><a class="reference internal" href="remote.html">Remote mode installation</a></li> +<li class="toctree-l3"><a class="reference internal" href="gateway.html">Gateway mode installation</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Local mode installation</a><ul> +<li class="toctree-l4"><a class="reference internal" href="#local-mode-dependencies">Local mode - dependencies</a></li> +<li class="toctree-l4"><a class="reference internal" href="#prepare-local-environment">Prepare local environment</a></li> +<li class="toctree-l4"><a class="reference internal" href="#test-local-environment">Test local environment</a></li> +<li class="toctree-l4"><a class="reference internal" href="#local-installation">Local installation</a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#flex-extract-in-combination-with-flexpart"><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> in combination with <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code></a></li> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#test-installation">Test installation</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../installation.html">Installation</a> »</li> + + <li>Local mode installation</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Installation/local.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="local-mode-installation"> +<h1>Local mode installation<a class="headerlink" href="#local-mode-installation" title="Permalink to this headline">¶</a></h1> +<div class="toctree-wrapper compound"> +</div> +<div class="section" id="local-mode-dependencies"> +<span id="ref-req-local"></span><span id="ref-local-mode"></span><h2>Local mode - dependencies<a class="headerlink" href="#local-mode-dependencies" title="Permalink to this headline">¶</a></h2> +<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"> +<colgroup> +<col width="74%" /> +<col width="26%" /> +</colgroup> +<tbody valign="top"> +<tr class="row-odd"><td>Python part</td> +<td>Fortran part</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> +</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> +</ul> +</td> +</tr> +</tbody> +</table> +</div> +<div class="section" id="prepare-local-environment"> +<span id="ref-prep-local"></span><h2>Prepare local environment<a class="headerlink" href="#prepare-local-environment" title="Permalink to this headline">¶</a></h2> +<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 on a <em>Debian GNU/Linux buster</em> and an <em>Ubuntu 18.04 Bionic Beaver</em> system.</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> + apt-get install python3 <span class="o">(</span>usually already available on GNU/Linux systems<span class="o">)</span> + apt-get install python3-eccodes + apt-get install python3-genshi + apt-get install python3-numpy + apt-get install gfortran + apt-get install fftw3-dev + apt-get install libeccodes-dev + apt-get install libemos-dev +<span class="c1"># Some of these packages will pull in further packages as dependencies. This is fine, and some are even needed by ``flex_extract''.</span> + + +<span class="c1"># As currently the CDS and ECMWF API packages are not available as Debian packages, they need to be installed outside of the Debian (Ubuntu etc.) package management system. The recommended way is:</span> + apt-get install pip + pip install cdsapi + pip install ecmwf-api-client +</pre></div> +</div> +<div class="admonition note"> +<p class="first 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 +</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> +</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> +</div> +<div class="section" id="test-local-environment"> +<span id="ref-test-local"></span><h2>Test local environment<a class="headerlink" href="#test-local-environment" title="Permalink to this headline">¶</a></h2> +<p>Check the availability of the python packages by typing <code class="docutils literal notranslate"><span class="pre">python3</span></code> in a terminal window and run the <code class="docutils literal notranslate"><span class="pre">import</span></code> commands in the python shell. If there are no error messages, you succeeded in setting up the environment.</p> +<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># check in python3 console</span> +<span class="kn">import</span> <span class="nn">eccodes</span> +<span class="kn">import</span> <span class="nn">genshi</span> +<span class="kn">import</span> <span class="nn">numpy</span> +<span class="kn">import</span> <span class="nn">cdsapi</span> +<span class="kn">import</span> <span class="nn">ecmwfapi</span> +</pre></div> +</div> +<div class="section" id="test-the-web-api-s"> +<h3>Test the Web API’s<a class="headerlink" href="#test-the-web-api-s" title="Permalink to this headline">¶</a></h3> +<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"> +<colgroup> +<col width="50%" /> +<col 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> +</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> + +<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> + +<span class="n">server</span><span class="o">.</span><span class="n">retrieve</span><span class="p">({</span> + <span class="s1">'stream'</span> <span class="p">:</span> <span class="s2">"oper"</span><span class="p">,</span> + <span class="s1">'levtype'</span> <span class="p">:</span> <span class="s2">"sfc"</span><span class="p">,</span> + <span class="s1">'param'</span> <span class="p">:</span> <span class="s2">"165.128/166.128/167.128"</span><span class="p">,</span> + <span class="s1">'dataset'</span> <span class="p">:</span> <span class="s2">"interim"</span><span class="p">,</span> + <span class="s1">'step'</span> <span class="p">:</span> <span class="s2">"0"</span><span class="p">,</span> + <span class="s1">'grid'</span> <span class="p">:</span> <span class="s2">"0.75/0.75"</span><span class="p">,</span> + <span class="s1">'time'</span> <span class="p">:</span> <span class="s2">"00/06/12/18"</span><span class="p">,</span> + <span class="s1">'date'</span> <span class="p">:</span> <span class="s2">"2014-07-01/to/2014-07-31"</span><span class="p">,</span> + <span class="s1">'type'</span> <span class="p">:</span> <span class="s2">"an"</span><span class="p">,</span> + <span class="s1">'class'</span> <span class="p">:</span> <span class="s2">"ei"</span><span class="p">,</span> + <span class="s1">'target'</span> <span class="p">:</span> <span class="s2">"download_erainterim_ecmwfapi.grib"</span> +<span class="p">})</span> +</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> + +<span class="n">server</span> <span class="o">=</span> <span class="n">ECMWFDataServer</span><span class="p">()</span> + +<span class="n">server</span><span class="o">.</span><span class="n">retrieve</span><span class="p">({</span> + <span class="s1">'stream'</span> <span class="p">:</span> <span class="s2">"enda"</span><span class="p">,</span> + <span class="s1">'levtype'</span> <span class="p">:</span> <span class="s2">"sfc"</span><span class="p">,</span> + <span class="s1">'param'</span> <span class="p">:</span> <span class="s2">"165.128/166.128/167.128"</span><span class="p">,</span> + <span class="s1">'dataset'</span> <span class="p">:</span> <span class="s2">"cera20c"</span><span class="p">,</span> + <span class="s1">'step'</span> <span class="p">:</span> <span class="s2">"0"</span><span class="p">,</span> + <span class="s1">'grid'</span> <span class="p">:</span> <span class="s2">"1./1."</span><span class="p">,</span> + <span class="s1">'time'</span> <span class="p">:</span> <span class="s2">"00/06/12/18"</span><span class="p">,</span> + <span class="s1">'date'</span> <span class="p">:</span> <span class="s2">"2000-07-01/to/2000-07-31"</span><span class="p">,</span> + <span class="s1">'type'</span> <span class="p">:</span> <span class="s2">"an"</span><span class="p">,</span> + <span class="s1">'class'</span> <span class="p">:</span> <span class="s2">"ep"</span><span class="p">,</span> + <span class="s1">'target'</span> <span class="p">:</span> <span class="s2">"download_cera20c_ecmwfapi.grib"</span> +<span class="p">})</span> +</pre></div> +</div> +</td> +</tr> +</tbody> +</table> +</div> +<div class="section" id="cds-api"> +<h4>CDS API<a class="headerlink" href="#cds-api" title="Permalink to this headline">¶</a></h4> +<p>Extraction of ERA5 data via CDS API might take time as currently there is a high demand for ERA5 data. Therefore, as a simple test for the API just retrieve pressure-level data (even if that is NOT what we need for FLEXPART), as they are stored on disk and don’t need to be retrieved from MARS (which is the time-consuming action):</p> +<p>Please use this piece of Python code to retrieve a small sample of <em>ERA5</em> pressure levels:</p> +<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">cdsapi</span> + +<span class="n">c</span> <span class="o">=</span> <span class="n">cdsapi</span><span class="o">.</span><span class="n">Client</span><span class="p">()</span> + +<span class="n">c</span><span class="o">.</span><span class="n">retrieve</span><span class="p">(</span><span class="s2">"reanalysis-era5-pressure-levels"</span><span class="p">,</span> +<span class="p">{</span> +<span class="s2">"variable"</span><span class="p">:</span> <span class="s2">"temperature"</span><span class="p">,</span> +<span class="s2">"pressure_level"</span><span class="p">:</span> <span class="s2">"1000"</span><span class="p">,</span> +<span class="s2">"product_type"</span><span class="p">:</span> <span class="s2">"reanalysis"</span><span class="p">,</span> +<span class="s2">"year"</span><span class="p">:</span> <span class="s2">"2008"</span><span class="p">,</span> +<span class="s2">"month"</span><span class="p">:</span> <span class="s2">"01"</span><span class="p">,</span> +<span class="s2">"day"</span><span class="p">:</span> <span class="s2">"01"</span><span class="p">,</span> +<span class="s2">"time"</span><span class="p">:</span> <span class="s2">"12:00"</span><span class="p">,</span> +<span class="s2">"format"</span><span class="p">:</span> <span class="s2">"grib"</span> +<span class="p">},</span> +<span class="s2">"download_cdsapi.grib"</span><span class="p">)</span> +</pre></div> +</div> +<p>If you know that your CDS API works, you can try to extract some data from MARS.</p> +<p>Please use this piece of Python code to retrieve a small <em>ERA5</em> data sample as a <strong>member-state user</strong>! The <strong>Public user</strong> do not have access to the full <em>ERA5</em> dataset!</p> +<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">cdsapi</span> + +<span class="n">c</span> <span class="o">=</span> <span class="n">cdsapi</span><span class="o">.</span><span class="n">Client</span><span class="p">()</span> + +<span class="n">c</span><span class="o">.</span><span class="n">retrieve</span><span class="p">(</span><span class="s1">'reanalysis-era5-complete'</span><span class="p">,</span> +<span class="p">{</span> + <span class="s1">'class'</span> <span class="p">:</span> <span class="s1">'ea'</span><span class="p">,</span> + <span class="s1">'expver'</span> <span class="p">:</span> <span class="s1">'1'</span><span class="p">,</span> + <span class="s1">'stream'</span> <span class="p">:</span> <span class="s1">'oper'</span><span class="p">,</span> + <span class="s1">'type'</span> <span class="p">:</span> <span class="s1">'fc'</span><span class="p">,</span> + <span class="s1">'step'</span> <span class="p">:</span> <span class="s1">'3/to/12/by/3'</span><span class="p">,</span> + <span class="s1">'param'</span> <span class="p">:</span> <span class="s1">'130.128'</span><span class="p">,</span> + <span class="s1">'levtype'</span> <span class="p">:</span> <span class="s1">'ml'</span><span class="p">,</span> + <span class="s1">'levelist'</span><span class="p">:</span> <span class="s1">'135/to/137'</span><span class="p">,</span> + <span class="s1">'date'</span> <span class="p">:</span> <span class="s1">'2013-01-01'</span><span class="p">,</span> + <span class="s1">'time'</span> <span class="p">:</span> <span class="s1">'06/18'</span><span class="p">,</span> + <span class="s1">'area'</span> <span class="p">:</span> <span class="s1">'50/-5/40/5'</span><span class="p">,</span> + <span class="s1">'grid'</span> <span class="p">:</span> <span class="s1">'1.0/1.0'</span><span class="p">,</span> + <span class="s1">'format'</span> <span class="p">:</span> <span class="s1">'grib'</span><span class="p">,</span> +<span class="p">},</span> <span class="s1">'download_era5_cdsapi.grib'</span><span class="p">)</span> +</pre></div> +</div> +</div> +</div> +</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> +<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 +<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 +</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>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> +$ dpkg -L libeccodes-dev <span class="p">|</span> grep eccodes.mod +<span class="c1"># for the ECCODES_LIB path do:</span> +$ 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> +</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> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># these are the paths on a current Debian 10 Testing system (May 2019)</span> +<span class="nv">ECCODES_INCLUDE_DIR</span><span class="o">=</span>/usr/lib/x86_64-linux-gnu/fortran/gfortran-mod-15/ +<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 +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 +“AVAILABLE COMMANDLINE ARGUMENTS TO SET” like shown below.</p> +<div class="literal-block-wrapper docutils container" id="setup-sh"> +<div class="code-block-caption"><span class="caption-text">‘Example settings for a local 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> +<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">'local'</span> +<span class="nv">MAKEFILE</span><span class="o">=</span><span class="s1">'makefile.local.gfortran'</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 +<span class="nv">DESTINATION</span><span class="o">=</span>None +<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> +</div> +<p>Afterwards, type:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ ./setup.sh +</pre></div> +</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 +</pre></div> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="../quick_start.html" class="btn btn-neutral float-right" title="Quick Start" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="gateway.html" class="btn btn-neutral float-left" title="Gateway mode installation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Installation/remote.html b/Documentation/html/Installation/remote.html new file mode 100644 index 0000000000000000000000000000000000000000..535078904cab55f7c1ca5ba4cdabbd6a65a44120 --- /dev/null +++ b/Documentation/html/Installation/remote.html @@ -0,0 +1,400 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Remote mode installation — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Gateway mode installation" href="gateway.html" /> + <link rel="prev" title="Installation" href="../installation.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1 current"><a class="reference internal" href="../installation.html">Installation</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#registration-at-ecmwf">Registration at ECMWF</a></li> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#licence-agreement-for-public-datasets">Licence agreement for public datasets</a></li> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#download-flex-extract">Download <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code></a></li> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#dependencies">Dependencies</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="../installation.html#installation-of-flex-extract">Installation of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code></a><ul class="current"> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Remote mode installation</a><ul> +<li class="toctree-l4"><a class="reference internal" href="#remote-mode-dependencies">Remote mode - dependencies</a></li> +<li class="toctree-l4"><a class="reference internal" href="#prepare-remote-environment">Prepare remote environment</a></li> +<li class="toctree-l4"><a class="reference internal" href="#remote-installation">Remote installation</a></li> +</ul> +</li> +<li class="toctree-l3"><a class="reference internal" href="gateway.html">Gateway mode installation</a></li> +<li class="toctree-l3"><a class="reference internal" href="local.html">Local mode installation</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#flex-extract-in-combination-with-flexpart"><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> in combination with <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code></a></li> +<li class="toctree-l2"><a class="reference internal" href="../installation.html#test-installation">Test installation</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="../installation.html">Installation</a> »</li> + + <li>Remote mode installation</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Installation/remote.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="remote-mode-installation"> +<h1>Remote mode installation<a class="headerlink" href="#remote-mode-installation" title="Permalink to this headline">¶</a></h1> +<div class="toctree-wrapper compound"> +</div> +<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"> +<colgroup> +<col width="61%" /> +<col width="39%" /> +</colgroup> +<tbody valign="top"> +<tr class="row-odd"><td>Python part</td> +<td>Fortran part</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> +</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> +</ul> +</td> +</tr> +</tbody> +</table> +</div> +<div class="section" id="prepare-remote-environment"> +<span id="ref-prep-remote"></span><h2>Prepare remote environment<a class="headerlink" href="#prepare-remote-environment" title="Permalink to this headline">¶</a></h2> +<p>ECMWF servers provide all libraries via a module system. Loading the required modules is already built into <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> and no user action is needed.</p> +</div> +<div class="section" id="remote-installation"> +<span id="ref-install-remote"></span><h2>Remote installation<a class="headerlink" href="#remote-installation" title="Permalink to this headline">¶</a></h2> +<p>First, log in on one of the ECMWF servers, such as <em>ecgate</em> or <em>cca/ccb</em>. +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> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>Authorized access only. + +*************************************************************** + For further information, read the ECaccess documentation at: + + https://software.ecmwf.int/wiki/display/ECAC/ECaccess+Home + + You can also use ECaccess to load & download files from your + EChome, ECscratch or ECfs directories using the ECaccess FTP + server: + + ftp://uid@ecaccess.ecmwf.int/ + + Please note you must use your UID and ActivID code to login! +*************************************************************** + +<ecuid>@<ipname/address>'s password: *** +Select hostname (ecgate, cca, ccb) [ecgate]: ecgate + +[<ecuid>@ecgb11 ~]$ +</pre></div> +</div> +<p>Substitute the <em><localuser></em> and <em><localmachine.tld></em> placeholders with your local user name and the IP name or address of your local machine. +Untar the file and change into the <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> root directory.</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>scp <localuser>@<localmachine.tld>:</path/to/tarfile/>flex_extract_vX.X.tar.gz <span class="nv">$HOME</span>/ +<span class="nb">cd</span> <span class="nv">$HOME</span> +tar xvf flex_extract_vX.X.tar.gz +<span class="nb">cd</span> flex_extract_vX.X +</pre></div> +</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"> +<colgroup> +<col width="50%" /> +<col 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> +</tr> +<tr class="row-even"><td><div class="first last 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">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="first last 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">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> +... +</pre></div> +</div> +</td> +</tr> +</tbody> +</table> +<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> +</div> +<p>Afterwards, type:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>module load python3 +./setup.sh +</pre></div> +</div> +<p>to start the installation. You should see the following on standard output.</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Output of setup.sh</span> +Create tarball ... +Job compilation script has been submitted to ecgate <span class="k">for</span> installation in <span class="si">${</span><span class="nv">HOME</span><span class="si">}</span>/flex_extract_vX.X +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 +SUCCESS! +</pre></div> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="gateway.html" class="btn btn-neutral float-right" title="Gateway mode installation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="../installation.html" class="btn btn-neutral float-left" title="Installation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Support/faq.html b/Documentation/html/Support/faq.html new file mode 100644 index 0000000000000000000000000000000000000000..9f4864f50dfb3feef76261f9fd3c55951dab08d6 --- /dev/null +++ b/Documentation/html/Support/faq.html @@ -0,0 +1,262 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>FAQ - Frequently asked questions — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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="Developer Team" href="../authors.html" /> + <link rel="prev" title="Support" href="../support.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1 current"><a class="current reference internal" href="#">FAQ - Frequently asked questions</a><ul> +<li class="toctree-l2"><a class="reference internal" href="#what-can-i-do-if-i-can-t-install-the-third-party-libraries-from-distribution-packages">What can I do if I can’t install the third party libraries from distribution packages?</a><ul class="simple"> +</ul> +</li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li>FAQ - Frequently asked questions</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Support/faq.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="faq-frequently-asked-questions"> +<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> +</ul> +</div> +<div class="section" id="what-can-i-do-if-i-can-t-install-the-third-party-libraries-from-distribution-packages"> +<h2><a class="toc-backref" href="#id1">What can I do if I can’t install the third party libraries from distribution packages?</a><a class="headerlink" href="#what-can-i-do-if-i-can-t-install-the-third-party-libraries-from-distribution-packages" title="Permalink to this headline">¶</a></h2> +<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> +</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> +</ul> +</div> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="../authors.html" class="btn btn-neutral float-right" title="Developer Team" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="../support.html" class="btn btn-neutral float-left" title="Support" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/Support/known_bugs_issues.html b/Documentation/html/Support/known_bugs_issues.html new file mode 100644 index 0000000000000000000000000000000000000000..e227bfa393a70f1249e33beeff933537765fdfe5 --- /dev/null +++ b/Documentation/html/Support/known_bugs_issues.html @@ -0,0 +1,208 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Known Bugs and Issues — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li>Known Bugs and Issues</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../_sources/Support/known_bugs_issues.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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> + + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/_images/Diagramm_MarsAccess2.png b/Documentation/html/_images/Diagramm_MarsAccess2.png new file mode 100644 index 0000000000000000000000000000000000000000..2bc1a47cdba063d3dcf7ff0fedc85339f7df3172 Binary files /dev/null and b/Documentation/html/_images/Diagramm_MarsAccess2.png differ diff --git a/Documentation/html/_images/ECMWF_FPparameter_ml.png b/Documentation/html/_images/ECMWF_FPparameter_ml.png new file mode 100644 index 0000000000000000000000000000000000000000..14b990f191b1e3b7cbbe1104f62ddc195e6ace87 Binary files /dev/null and b/Documentation/html/_images/ECMWF_FPparameter_ml.png differ diff --git a/Documentation/html/_images/ECMWF_FPparameter_sfc-0.png b/Documentation/html/_images/ECMWF_FPparameter_sfc-0.png new file mode 100644 index 0000000000000000000000000000000000000000..117eaa9b5af60e4caf05ced70506392c2be7e0fd Binary files /dev/null and b/Documentation/html/_images/ECMWF_FPparameter_sfc-0.png differ diff --git a/Documentation/html/_images/ECMWF_FPparameter_sfc-1.png b/Documentation/html/_images/ECMWF_FPparameter_sfc-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b6a0494c2c8c1af9c2ba5f440a64dbb485e3260a Binary files /dev/null and b/Documentation/html/_images/ECMWF_FPparameter_sfc-1.png differ diff --git a/Documentation/html/_images/IA3.png b/Documentation/html/_images/IA3.png new file mode 100644 index 0000000000000000000000000000000000000000..080e249f2a4a6923fc620fcd52ba9b38083d1e2f Binary files /dev/null and b/Documentation/html/_images/IA3.png differ diff --git a/Documentation/html/_images/MARS_catalogue_snapshot.png b/Documentation/html/_images/MARS_catalogue_snapshot.png new file mode 100644 index 0000000000000000000000000000000000000000..d7b167a4288ae37d985c8480b7316b59e6b33983 Binary files /dev/null and b/Documentation/html/_images/MARS_catalogue_snapshot.png differ diff --git a/Documentation/html/_images/blockdiag-c5183a0da960384d172e76fcbb0cc6765f0b1945.png b/Documentation/html/_images/blockdiag-c5183a0da960384d172e76fcbb0cc6765f0b1945.png new file mode 100644 index 0000000000000000000000000000000000000000..613005747fc5660f73cc0f79266956e90532644b Binary files /dev/null and b/Documentation/html/_images/blockdiag-c5183a0da960384d172e76fcbb0cc6765f0b1945.png differ diff --git a/Documentation/html/_images/blockdiag-f0a58657deb31f0c134ffed39d9be96f0d278617.png b/Documentation/html/_images/blockdiag-f0a58657deb31f0c134ffed39d9be96f0d278617.png new file mode 100644 index 0000000000000000000000000000000000000000..f73c0ef0fb94ab45a5f3bad00e56245a792c33f2 Binary files /dev/null and b/Documentation/html/_images/blockdiag-f0a58657deb31f0c134ffed39d9be96f0d278617.png differ diff --git a/Documentation/html/_images/cc-by-40.png b/Documentation/html/_images/cc-by-40.png new file mode 100644 index 0000000000000000000000000000000000000000..c8473a24786ab016d9c3e717a380910f7cbb0fff Binary files /dev/null and b/Documentation/html/_images/cc-by-40.png differ diff --git a/Documentation/html/_images/dataset_cmp_table.png b/Documentation/html/_images/dataset_cmp_table.png new file mode 100644 index 0000000000000000000000000000000000000000..2409fd629d1465dbb97d0d55cd7c391b3016cb40 Binary files /dev/null and b/Documentation/html/_images/dataset_cmp_table.png differ diff --git a/Documentation/html/_images/ex_runlocal_en.png b/Documentation/html/_images/ex_runlocal_en.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0cc39a586a849b798c61f3baf2a1b3fb4bebe2 Binary files /dev/null and b/Documentation/html/_images/ex_runlocal_en.png differ diff --git a/Documentation/html/_images/lin_interpol.png b/Documentation/html/_images/lin_interpol.png new file mode 100644 index 0000000000000000000000000000000000000000..cfad5804361e5b16b9f2653f4d14b7f4de2be1e4 Binary files /dev/null and b/Documentation/html/_images/lin_interpol.png differ diff --git a/Documentation/html/_images/mode_gateway.png b/Documentation/html/_images/mode_gateway.png new file mode 100644 index 0000000000000000000000000000000000000000..1461e23f545cb69f87ab5900e0483021982816ab Binary files /dev/null and b/Documentation/html/_images/mode_gateway.png differ diff --git a/Documentation/html/_images/mode_local_member.png b/Documentation/html/_images/mode_local_member.png new file mode 100644 index 0000000000000000000000000000000000000000..499a616814b514723497726ddaaddd9fcfdf64e6 Binary files /dev/null and b/Documentation/html/_images/mode_local_member.png differ diff --git a/Documentation/html/_images/mode_local_public.png b/Documentation/html/_images/mode_local_public.png new file mode 100644 index 0000000000000000000000000000000000000000..cf2e90dbc690c0eb72e8beae63679127fb6c145f Binary files /dev/null and b/Documentation/html/_images/mode_local_public.png differ diff --git a/Documentation/html/_images/mode_remote.png b/Documentation/html/_images/mode_remote.png new file mode 100644 index 0000000000000000000000000000000000000000..cd7cba08f3b22981592194ed3673ec14619d69cf Binary files /dev/null and b/Documentation/html/_images/mode_remote.png differ diff --git a/Documentation/html/_images/new_disagg.png b/Documentation/html/_images/new_disagg.png new file mode 100644 index 0000000000000000000000000000000000000000..f556c0dd7f130aa202b99bb4f70e36741094f2f2 Binary files /dev/null and b/Documentation/html/_images/new_disagg.png differ diff --git a/Documentation/html/_images/old_disagg.png b/Documentation/html/_images/old_disagg.png new file mode 100644 index 0000000000000000000000000000000000000000..0a9979b04a4b29e7aa4ae9edfe7761a4fddbbd96 Binary files /dev/null and b/Documentation/html/_images/old_disagg.png differ diff --git a/Documentation/html/_images/submit.png b/Documentation/html/_images/submit.png new file mode 100644 index 0000000000000000000000000000000000000000..fbac0ec46f9176f3231dc8cad57ff061c69bd9e2 Binary files /dev/null and b/Documentation/html/_images/submit.png differ diff --git a/Documentation/html/_modules/ControlFile.html b/Documentation/html/_modules/ControlFile.html new file mode 100644 index 0000000000000000000000000000000000000000..4b5f32637b244ad2bf9affc6982319575dfa047b --- /dev/null +++ b/Documentation/html/_modules/ControlFile.html @@ -0,0 +1,896 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ControlFile — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="index.html">Module code</a> »</li> + + <li>ControlFile</li> + + + <li class="wy-breadcrumbs-aside"> + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for ControlFile</h1><div class="highlight"><pre> +<span></span><span class="ch">#!/usr/bin/env python3</span> +<span class="c1"># -*- coding: utf-8 -*-</span> +<span class="c1">#*******************************************************************************</span> +<span class="c1"># @Author: Leopold Haimberger (University of Vienna)</span> +<span class="c1">#</span> +<span class="c1"># @Date: November 2015</span> +<span class="c1">#</span> +<span class="c1"># @Change History:</span> +<span class="c1">#</span> +<span class="c1"># February 2018 - Anne Philipp (University of Vienna):</span> +<span class="c1"># - applied PEP8 style guide</span> +<span class="c1"># - added documentation</span> +<span class="c1"># - applied some minor modifications in programming style/structure</span> +<span class="c1"># - changed name of class Control to ControlFile for more</span> +<span class="c1"># self-explanation naming</span> +<span class="c1"># - outsource of class ControlFile</span> +<span class="c1"># - initialisation of class attributes ( to avoid high number of</span> +<span class="c1"># conditional statements and set default values )</span> +<span class="c1"># - divided assignment of attributes and the check of conditions</span> +<span class="c1"># - outsourced the commandline argument assignments to control attributes</span> +<span class="c1">#</span> +<span class="c1"># @License:</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> +<span class="c1">#</span> +<span class="c1"># SPDX-License-Identifier: CC-BY-4.0</span> +<span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> +<span class="c1">#*******************************************************************************</span> + +<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">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">sys</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">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="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> + <span class="n">check_acctime</span><span class="p">,</span> <span class="n">check_accmaxstep</span><span class="p">,</span> <span class="n">check_time</span><span class="p">,</span> + <span class="n">check_logicals_type</span><span class="p">,</span> <span class="n">check_len_type_time_step</span><span class="p">,</span> + <span class="n">check_addpar</span><span class="p">,</span> <span class="n">check_job_chunk</span><span class="p">,</span> <span class="n">check_number</span><span class="p">)</span> +<span class="c1">#pylint: enable=wrong-import-position</span> + +<span class="c1"># ------------------------------------------------------------------------------</span> +<span class="c1"># CLASS</span> +<span class="c1"># ------------------------------------------------------------------------------</span> +<div class="viewcode-block" id="ControlFile"><a class="viewcode-back" href="../Documentation/Api/api_python.html#ControlFile.ControlFile">[docs]</a><span class="k">class</span> <span class="nc">ControlFile</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">'''</span> +<span class="sd"> Contains the information which are stored in the CONTROL files.</span> + +<span class="sd"> The CONTROL file is the steering part of the FLEXPART extraction</span> +<span class="sd"> software. All necessary parameters needed to retrieve the data fields</span> +<span class="sd"> from the MARS archive for driving FLEXPART are set in a CONTROL file.</span> +<span class="sd"> Some specific parameters like the start and end dates can be overwritten</span> +<span class="sd"> by the command line parameters, but in generall all parameters needed</span> +<span class="sd"> for a complete set of fields for FLEXPART can be set in the CONTROL file.</span> + +<span class="sd"> Attributes</span> +<span class="sd"> ----------</span> +<span class="sd"> controlfile : str</span> +<span class="sd"> The name of the control file to be processed. Default value is the</span> +<span class="sd"> filename passed to the init function when initialised.</span> + +<span class="sd"> start_date : str</span> +<span class="sd"> The first day of the retrieval period. Default value is None.</span> + +<span class="sd"> end_date :str</span> +<span class="sd"> The last day of the retrieval period. Default value is None.</span> + +<span class="sd"> date_chunk : int</span> +<span class="sd"> Length of period for a single mars retrieval. Default value is 3.</span> + +<span class="sd"> dtime :str</span> +<span class="sd"> The time step in hours. Default value is None.</span> + +<span class="sd"> basetime : int</span> +<span class="sd"> The time for a half day retrieval. The 12 hours upfront are to be</span> +<span class="sd"> retrieved. Default value is None.</span> + +<span class="sd"> maxstep : int</span> +<span class="sd"> The maximum forecast step for non flux data. Default value is None.</span> + +<span class="sd"> type : list of str</span> +<span class="sd"> List of field type per retrieving hour. Default value is None.</span> + +<span class="sd"> time : list of str</span> +<span class="sd"> List of retrieving times in hours. Default valuer is None.</span> + +<span class="sd"> step : list of str or str</span> +<span class="sd"> List of forecast time steps in hours for non flux data.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> acctype : str</span> +<span class="sd"> The field type for the accumulated forecast fields.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> acctime : str</span> +<span class="sd"> The starting time of the accumulated forecasts. Default value is None.</span> + +<span class="sd"> accmaxstep : int</span> +<span class="sd"> The maximum forecast step for the accumulated forecast fields</span> +<span class="sd"> (flux data). Default value is None.</span> + +<span class="sd"> marsclass : str</span> +<span class="sd"> Characterisation of dataset. Default value is None.</span> + +<span class="sd"> dataset : str</span> +<span class="sd"> For public datasets there is the specific naming and parameter</span> +<span class="sd"> dataset which has to be used to characterize the type of</span> +<span class="sd"> data. Default value is None.</span> + +<span class="sd"> stream : str</span> +<span class="sd"> Identifies the forecasting system used to generate the data.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> number : str</span> +<span class="sd"> Selects the member in ensemble forecast run. Default value is 'OFF'.</span> + +<span class="sd"> expver : str</span> +<span class="sd"> The version number of the dataset. Default value is '1'.</span> + +<span class="sd"> gaussian : str</span> +<span class="sd"> This parameter is deprecated and should no longer be used.</span> +<span class="sd"> Specifies the desired type of Gaussian grid for the output.</span> +<span class="sd"> Default value is an empty string ''.</span> + +<span class="sd"> grid : str</span> +<span class="sd"> Specifies the output grid which can be either a Gaussian grid</span> +<span class="sd"> or a Latitude/Longitude grid. Default value is None.</span> + +<span class="sd"> area : str</span> +<span class="sd"> Specifies the desired sub-area of data to be extracted.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> left : str</span> +<span class="sd"> The western most longitude of the area to be extracted.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> lower : str</span> +<span class="sd"> The southern most latitude of the area to be extracted.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> upper : str</span> +<span class="sd"> The northern most latitued of the area to be extracted.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> right : str</span> +<span class="sd"> The eastern most longitude of the area to be extracted.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> level : str</span> +<span class="sd"> Specifies the maximum level. Default value is None.</span> + +<span class="sd"> levelist : str</span> +<span class="sd"> Specifies the required level list. Default value is None.</span> + +<span class="sd"> resol : str</span> +<span class="sd"> Specifies the desired triangular truncation of retrieved data,</span> +<span class="sd"> before carrying out any other selected post-processing.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> gauss : int</span> +<span class="sd"> Switch to select gaussian fields (1) or regular lat/lon (0).</span> +<span class="sd"> Default value is 0.</span> + +<span class="sd"> accuracy : int</span> +<span class="sd"> Specifies the number of bits per value to be used in the</span> +<span class="sd"> generated GRIB coded fields. Default value is 24.</span> + +<span class="sd"> omega : int</span> +<span class="sd"> Switch to select omega retrieval (1) or not (0). Default value is 0.</span> + +<span class="sd"> omegadiff : int</span> +<span class="sd"> Switch to decide to calculate Omega and Dps/Dt from continuity</span> +<span class="sd"> equation for diagnostic purposes (1) or not (0). Default value is 0.</span> + +<span class="sd"> eta : int</span> +<span class="sd"> Switch to select direct retrieval of etadot from MARS (1) or</span> +<span class="sd"> wether it has to be calculated (0). Then Default value is 0.</span> + +<span class="sd"> etadiff : int</span> +<span class="sd"> Switch to select calculation of etadot and Dps/Dt from continuity</span> +<span class="sd"> equation for diagnostic purposes (1) or not (0). Default value is 0.</span> + +<span class="sd"> etapar : int</span> +<span class="sd"> GRIB parameter Id for etadot fields. Default value is 77.</span> + +<span class="sd"> dpdeta : int</span> +<span class="sd"> Switch to select multiplication of etadot with dpdeta.</span> +<span class="sd"> Default value is 1.</span> + +<span class="sd"> smooth : int</span> +<span class="sd"> Spectral truncation of ETADOT after calculation on Gaussian grid.</span> +<span class="sd"> Default value is 0.</span> + +<span class="sd"> format : str</span> +<span class="sd"> The format of the GRIB data. Default value is 'GRIB1'.</span> + +<span class="sd"> addpar : str</span> +<span class="sd"> List of additional surface level ECMWF parameter to be retrieved.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> prefix : str</span> +<span class="sd"> Prefix string for the final FLEXPART/FLEXTRA ready input files.</span> +<span class="sd"> Default value is 'EN'.</span> + +<span class="sd"> cwc : int</span> +<span class="sd"> Switch to select wether the sum of cloud liquid water content and</span> +<span class="sd"> cloud ice water content should be retrieved. Default value is 0.</span> + +<span class="sd"> wrf : int</span> +<span class="sd"> Switch to select further parameters for retrievment to support</span> +<span class="sd"> WRF simulations. Default value is 0.</span> + +<span class="sd"> ecfsdir : str</span> +<span class="sd"> Path to the ECMWF storage 'ectmp:/${USER}/econdemand/'</span> + +<span class="sd"> mailfail : list of str</span> +<span class="sd"> Email list for sending error log files from ECMWF servers.</span> +<span class="sd"> The email addresses should be seperated by a comma.</span> +<span class="sd"> Default value is ['${USER}'].</span> + +<span class="sd"> mailops : list of str</span> +<span class="sd"> Email list for sending operational log files from ECMWF servers.</span> +<span class="sd"> The email addresses should be seperated by a comma.</span> +<span class="sd"> Default value is ['${USER}'].</span> + +<span class="sd"> ecstorage : int</span> +<span class="sd"> Switch to select storage of FLEXPART ready output files</span> +<span class="sd"> in the ECFS file system. Default value is 0.</span> + +<span class="sd"> ectrans : int</span> +<span class="sd"> Switch to select the transfer of FLEXPART ready output files</span> +<span class="sd"> to the gateway server. Default value is 0.</span> + +<span class="sd"> inputdir : str</span> +<span class="sd"> Path to the temporary directory for the retrieval grib files and</span> +<span class="sd"> other processing files. Default value is _config.PATH_INPUT_DIR.</span> + +<span class="sd"> outputdir : str</span> +<span class="sd"> Path to the final directory where the final FLEXPART ready input</span> +<span class="sd"> files are stored. Default value is None.</span> + +<span class="sd"> flexextractdir : str</span> +<span class="sd"> Path to the flex_extract root directory. Default value is</span> +<span class="sd"> _config.PATH_FLEXEXTRACT_DIR.</span> + +<span class="sd"> exedir : str</span> +<span class="sd"> Path to the FORTRAN executable file. Default value is</span> +<span class="sd"> _config.PATH_FORTRAN_SRC.</span> + +<span class="sd"> installdir : str</span> +<span class="sd"> Path to a FLEXPART root directory. Default value is None.</span> + +<span class="sd"> makefile : str</span> +<span class="sd"> Name of the makefile to be used for the Fortran program.</span> +<span class="sd"> Default value is 'Makefile.gfortran'.</span> + +<span class="sd"> destination : str</span> +<span class="sd"> The remote destination which is used to transfer files</span> +<span class="sd"> from ECMWF server to local gateway server. Default value is None.</span> + +<span class="sd"> gateway : str</span> +<span class="sd"> The gateway server the user is using. Default value is None.</span> + +<span class="sd"> ecuid : str</span> +<span class="sd"> The user id on ECMWF server. Default value is None.</span> + +<span class="sd"> ecgid : str</span> +<span class="sd"> The group id on ECMWF server. Default value is None.</span> + +<span class="sd"> install_target : str</span> +<span class="sd"> Defines the location where the installation is to be done.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> debug : int</span> +<span class="sd"> Switch to keep temporary files at the end of postprocessing (1) or</span> +<span class="sd"> to delete all temporary files except the final output files (0).</span> +<span class="sd"> Default value is 0.</span> + +<span class="sd"> oper : int</span> +<span class="sd"> Switch to prepare the operational job script. Start date, end date and</span> +<span class="sd"> basetime will be prepared with environment variables.</span> +<span class="sd"> Default value is 0.</span> + +<span class="sd"> request : int</span> +<span class="sd"> Switch to select between just retrieving the data (0), writing the mars</span> +<span class="sd"> parameter values to a csv file (1) or doing both (2).</span> +<span class="sd"> Default value is 0.</span> + +<span class="sd"> public : int</span> +<span class="sd"> Switch to select kind of ECMWF Web Api access and the</span> +<span class="sd"> possible data sets. Public data sets (1) and Memberstate data sets (0).</span> +<span class="sd"> Default value is 0.</span> + +<span class="sd"> ec_api : boolean</span> +<span class="sd"> Tells wether the ECMWF Web API was able to load or not.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> cds_api : boolean</span> +<span class="sd"> Tells wether the CDS API was able to load or not.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> purefc : int</span> +<span class="sd"> Switch to decide wether the job is a pure forecast retrieval or</span> +<span class="sd"> coupled with analysis data. Default value is 0.</span> + +<span class="sd"> rrint : int</span> +<span class="sd"> Switch to select between old precipitation disaggregation method (0)</span> +<span class="sd"> or the new IA3 disaggegration method (1). Default value is 0.</span> + +<span class="sd"> doubleelda : int</span> +<span class="sd"> Switch to select the calculation of extra ensemble members for the</span> +<span class="sd"> ELDA stream. It doubles the amount of retrieved ensemble members.</span> + +<span class="sd"> logicals : list of str</span> +<span class="sd"> List of the names of logical switches which controls the flow</span> +<span class="sd"> of the program. Default list is ['gauss', 'omega', 'omegadiff', 'eta',</span> +<span class="sd"> 'etadiff', 'dpdeta', 'cwc', 'wrf', 'ecstorage',</span> +<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="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> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filename : str</span> +<span class="sd"> Name of CONTROL file.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="c1"># list of all possible class attributes and their default values</span> + <span class="bp">self</span><span class="o">.</span><span class="n">controlfile</span> <span class="o">=</span> <span class="n">filename</span> + <span class="bp">self</span><span class="o">.</span><span class="n">start_date</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">date_chunk</span> <span class="o">=</span> <span class="mi">3</span> + <span class="bp">self</span><span class="o">.</span><span class="n">job_chunk</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">dtime</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">time</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">acctime</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">dataset</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">stream</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">number</span> <span class="o">=</span> <span class="s1">'OFF'</span> + <span class="bp">self</span><span class="o">.</span><span class="n">expver</span> <span class="o">=</span> <span class="s1">'1'</span> + <span class="bp">self</span><span class="o">.</span><span class="n">gaussian</span> <span class="o">=</span> <span class="s1">''</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">area</span> <span class="o">=</span> <span class="s1">''</span> + <span class="bp">self</span><span class="o">.</span><span class="n">left</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">lower</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">upper</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">right</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">level</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">resol</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">gauss</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">accuracy</span> <span class="o">=</span> <span class="mi">24</span> + <span class="bp">self</span><span class="o">.</span><span class="n">omega</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">omegadiff</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">eta</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">etadiff</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">etapar</span> <span class="o">=</span> <span class="mi">77</span> + <span class="bp">self</span><span class="o">.</span><span class="n">dpdeta</span> <span class="o">=</span> <span class="mi">1</span> + <span class="bp">self</span><span class="o">.</span><span class="n">smooth</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">format</span> <span class="o">=</span> <span class="s1">'GRIB1'</span> + <span class="bp">self</span><span class="o">.</span><span class="n">addpar</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span> <span class="o">=</span> <span class="s1">'EN'</span> + <span class="bp">self</span><span class="o">.</span><span class="n">cwc</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">wrf</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ecfsdir</span> <span class="o">=</span> <span class="s1">'ectmp:/$</span><span class="si">{USER}</span><span class="s1">/econdemand/'</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'$</span><span class="si">{USER}</span><span class="s1">'</span><span class="p">]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'$</span><span class="si">{USER}</span><span class="s1">'</span><span class="p">]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ecstorage</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ectrans</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_INPUT_DIR</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outputdir</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">flexextractdir</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span> + <span class="bp">self</span><span class="o">.</span><span class="n">exedir</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FORTRAN_SRC</span> + <span class="bp">self</span><span class="o">.</span><span class="n">installdir</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">makefile</span> <span class="o">=</span> <span class="s1">'Makefile.gfortran'</span> + <span class="bp">self</span><span class="o">.</span><span class="n">destination</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">gateway</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ecuid</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ecgid</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">install_target</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">debug</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">oper</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">request</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">public</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ec_api</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">cds_api</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">rrint</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">doubleelda</span> <span class="o">=</span> <span class="mi">0</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">logicals</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'gauss'</span><span class="p">,</span> <span class="s1">'omega'</span><span class="p">,</span> <span class="s1">'omegadiff'</span><span class="p">,</span> <span class="s1">'eta'</span><span class="p">,</span> <span class="s1">'etadiff'</span><span class="p">,</span> + <span class="s1">'dpdeta'</span><span class="p">,</span> <span class="s1">'cwc'</span><span class="p">,</span> <span class="s1">'wrf'</span><span class="p">,</span> <span class="s1">'ecstorage'</span><span class="p">,</span> + <span class="s1">'ectrans'</span><span class="p">,</span> <span class="s1">'debug'</span><span class="p">,</span> <span class="s1">'oper'</span><span class="p">,</span> <span class="s1">'request'</span><span class="p">,</span> <span class="s1">'public'</span><span class="p">,</span> + <span class="s1">'purefc'</span><span class="p">,</span> <span class="s1">'rrint'</span><span class="p">,</span> <span class="s1">'doubleelda'</span><span class="p">]</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">_read_controlfile</span><span class="p">()</span> + + <span class="k">return</span> + + <span class="k">def</span> <span class="nf">_read_controlfile</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">'''Read CONTROL file and assign all CONTROL file variables.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">cfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_CONTROLFILES</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">controlfile</span><span class="p">)</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">cfile</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">fdata</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Could not read CONTROL file "'</span> <span class="o">+</span> <span class="n">cfile</span> <span class="o">+</span> <span class="s1">'"'</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Either it does not exist or its syntax is wrong.'</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="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="c1"># go through every line and store parameter</span> + <span class="k">for</span> <span class="n">ldata</span> <span class="ow">in</span> <span class="n">fdata</span><span class="p">:</span> + <span class="k">if</span> <span class="n">ldata</span> <span class="ow">and</span> <span class="n">ldata</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'#'</span><span class="p">:</span> + <span class="c1"># ignore comment line in control file</span> + <span class="k">continue</span> + <span class="k">if</span> <span class="s1">'#'</span> <span class="ow">in</span> <span class="n">ldata</span><span class="p">:</span> + <span class="c1"># cut off comment</span> + <span class="n">ldata</span> <span class="o">=</span> <span class="n">ldata</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'#'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> + <span class="n">data</span> <span class="o">=</span> <span class="n">ldata</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> + <span class="k">if</span> <span class="s1">'m_'</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> + <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">2</span><span class="p">:]</span> + <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'class'</span><span class="p">:</span> + <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'marsclass'</span> + <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'day1'</span><span class="p">:</span> + <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'start_date'</span> + <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'day2'</span><span class="p">:</span> + <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'end_date'</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> + <span class="k">if</span> <span class="s1">'$'</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span> + <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + <span class="k">while</span> <span class="s1">'$'</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span> + <span class="n">i</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'$'</span><span class="p">)</span> + <span class="n">j</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">'{'</span><span class="p">)</span> + <span class="n">k</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">'}'</span><span class="p">)</span> + <span class="n">var</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">k</span><span class="p">])</span> + <span class="k">if</span> <span class="n">var</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">][:</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="n">var</span> <span class="o">+</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="n">k</span><span class="o">+</span><span class="mi">1</span><span class="p">:]</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">my_error</span><span class="p">(</span><span class="s1">'Could not find variable '</span> + <span class="o">+</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">k</span><span class="p">]</span> <span class="o">+</span> <span class="s1">' while reading '</span> <span class="o">+</span> + <span class="bp">self</span><span class="o">.</span><span class="n">controlfile</span><span class="p">)</span> + <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">+</span> <span class="s1">'_expanded'</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">!=</span> <span class="s1">'none'</span><span class="p">:</span> + <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="kc">None</span><span class="p">)</span> + <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">></span> <span class="mi">2</span><span class="p">:</span> + <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">:]))</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">pass</span> + + <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="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> + +<span class="sd"> Example</span> +<span class="sd"> -------</span> +<span class="sd"> 'age': 10</span> +<span class="sd"> 'color': 'Spotted'</span> +<span class="sd"> 'kids': 0</span> +<span class="sd"> 'legs': 2</span> +<span class="sd"> 'name': 'Dog'</span> +<span class="sd"> 'smell': 'Alot'</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> string</span> +<span class="sd"> Single string of concatenated ControlFile class attributes</span> +<span class="sd"> with their values</span> +<span class="sd"> '''</span> + <span class="kn">import</span> <span class="nn">collections</span> + + <span class="n">attrs</span> <span class="o">=</span> <span class="nb">vars</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + <span class="n">attrs</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">OrderedDict</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">attrs</span><span class="o">.</span><span class="n">items</span><span class="p">()))</span> + + <span class="k">return</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">item</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">attrs</span><span class="o">.</span><span class="n">items</span><span class="p">())</span> + +<div class="viewcode-block" id="ControlFile.assign_args_to_control"><a class="viewcode-back" href="../Documentation/Api/api_python.html#ControlFile.ControlFile.assign_args_to_control">[docs]</a> <span class="k">def</span> <span class="nf">assign_args_to_control</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span> + <span class="sd">'''Overwrites the existing ControlFile instance attributes with</span> +<span class="sd"> the command line arguments.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> args : Namespace</span> +<span class="sd"> Contains the commandline arguments from script/program call.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="c1"># get dictionary of command line parameters and eliminate all</span> + <span class="c1"># parameters which are None (were not specified)</span> + <span class="n">args_dict</span> <span class="o">=</span> <span class="nb">vars</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> + <span class="n">arguments</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span> <span class="p">:</span> <span class="n">args_dict</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">args_dict</span> + <span class="k">if</span> <span class="n">args_dict</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">!=</span> <span class="kc">None</span><span class="p">}</span> + + <span class="c1"># assign all passed command line arguments to ControlFile instance</span> + <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">arguments</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> + <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">k</span><span class="p">),</span> <span class="n">v</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="ControlFile.assign_envs_to_control"><a class="viewcode-back" href="../Documentation/Api/api_python.html#ControlFile.ControlFile.assign_envs_to_control">[docs]</a> <span class="k">def</span> <span class="nf">assign_envs_to_control</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">envs</span><span class="p">):</span> + <span class="sd">'''Assigns the ECMWF environment parameter.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> envs : dict of str</span> +<span class="sd"> Contains the ECMWF environment parameternames "ECUID", "ECGID",</span> +<span class="sd"> "DESTINATION" and "GATEWAY" with its corresponding values.</span> +<span class="sd"> They were read from the file "ECMWF_ENV".</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">envs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> + <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">k</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">))</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="ControlFile.check_conditions"><a class="viewcode-back" href="../Documentation/Api/api_python.html#ControlFile.ControlFile.check_conditions">[docs]</a> <span class="k">def</span> <span class="nf">check_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">queue</span><span class="p">):</span> + <span class="sd">'''Checks a couple of necessary attributes and conditions,</span> +<span class="sd"> such as if they exist and contain values.</span> +<span class="sd"> Otherwise set default values.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> queue : str</span> +<span class="sd"> Name of the queue if submitted to the ECMWF servers.</span> +<span class="sd"> Used to check if ecuid, ecgid, gateway and destination</span> +<span class="sd"> are set correctly and are not empty.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="n">check_logicals_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">logicals</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span> <span class="o">=</span> <span class="n">check_mail</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span> <span class="o">=</span> <span class="n">check_mail</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mailops</span><span class="p">)</span> + + <span class="n">check_queue</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">gateway</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ecgid</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">outputdir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">installdir</span> <span class="o">=</span> <span class="n">check_pathes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outputdir</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">flexextractdir</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">start_date</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="n">check_dates</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">start_date</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">end_date</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="o">=</span> <span class="n">check_basetime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">basetime</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span> <span class="o">=</span> <span class="n">check_levels</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="n">check_step</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">=</span> <span class="n">check_maxstep</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">)</span> + + <span class="n">check_request</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="p">,</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FILE_MARS_REQUESTS</span><span class="p">))</span> + + <span class="n">check_public</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">public</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dataset</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">check_type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">time</span> <span class="o">=</span> <span class="n">check_time</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">time</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span> <span class="o">=</span> <span class="n">check_purefc</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">time</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="n">check_len_type_time_step</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">time</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span> <span class="o">=</span> <span class="n">check_acctype</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">acctype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">acctime</span> <span class="o">=</span> <span class="n">check_acctime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">acctime</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">time</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span> <span class="o">=</span> <span class="n">check_accmaxstep</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">grid</span> <span class="o">=</span> <span class="n">check_grid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">area</span> <span class="o">=</span> <span class="n">check_area</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">area</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">upper</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">lower</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">right</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">addpar</span> <span class="o">=</span> <span class="n">check_addpar</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">addpar</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">job_chunk</span> <span class="o">=</span> <span class="n">check_job_chunk</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">job_chunk</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">number</span> <span class="o">=</span> <span class="n">check_number</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">number</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="ControlFile.to_list"><a class="viewcode-back" href="../Documentation/Api/api_python.html#ControlFile.ControlFile.to_list">[docs]</a> <span class="k">def</span> <span class="nf">to_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">'''Just generates a list of strings containing the attributes and</span> +<span class="sd"> assigned values except the attributes "_expanded", "exedir",</span> +<span class="sd"> "flexextractdir" and "installdir".</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> l : list of *</span> +<span class="sd"> A sorted list of the all ControlFile class attributes with</span> +<span class="sd"> their values except the attributes "_expanded", "exedir",</span> +<span class="sd"> "flexextractdir" and "installdir".</span> +<span class="sd"> '''</span> + + <span class="kn">import</span> <span class="nn">collections</span> + + <span class="n">attrs</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">OrderedDict</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="nb">vars</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">()))</span> + + <span class="n">l</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span> + + <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">attrs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> + <span class="k">if</span> <span class="s1">'_expanded'</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> + <span class="k">pass</span> + <span class="k">elif</span> <span class="s1">'exedir'</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> + <span class="k">pass</span> + <span class="k">elif</span> <span class="s1">'installdir'</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> + <span class="k">pass</span> + <span class="k">elif</span> <span class="s1">'flexextractdir'</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> + <span class="k">pass</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="nb">list</span><span class="p">):</span> + <span class="n">stot</span> <span class="o">=</span> <span class="s1">''</span> + <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span> + <span class="n">stot</span> <span class="o">+=</span> <span class="n">s</span> <span class="o">+</span> <span class="s1">' '</span> + + <span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">stot</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">item</span><span class="p">)</span> + + <span class="k">return</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">l</span><span class="p">)</span></div></div> +</pre></div> + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/_modules/EcFlexpart.html b/Documentation/html/_modules/EcFlexpart.html new file mode 100644 index 0000000000000000000000000000000000000000..a7d385c4385070bd5f29b39b9d514bb0ec525df6 --- /dev/null +++ b/Documentation/html/_modules/EcFlexpart.html @@ -0,0 +1,2119 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>EcFlexpart — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="index.html">Module code</a> »</li> + + <li>EcFlexpart</li> + + + <li class="wy-breadcrumbs-aside"> + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for EcFlexpart</h1><div class="highlight"><pre> +<span></span><span class="ch">#!/usr/bin/env python3</span> +<span class="c1"># -*- coding: utf-8 -*-</span> +<span class="c1">#*******************************************************************************</span> +<span class="c1"># @Author: Anne Fouilloux (University of Oslo)</span> +<span class="c1">#</span> +<span class="c1"># @Date: October 2014</span> +<span class="c1">#</span> +<span class="c1"># @Change History:</span> +<span class="c1">#</span> +<span class="c1"># November 2015 - Leopold Haimberger (University of Vienna):</span> +<span class="c1"># - extended with class Control</span> +<span class="c1"># - removed functions mkdir_p, daterange, years_between, months_between</span> +<span class="c1"># - added functions darain, dapoly, to_param_id, init128, normal_exit,</span> +<span class="c1"># my_error, clean_up, install_args_and_control,</span> +<span class="c1"># interpret_args_and_control,</span> +<span class="c1"># - removed function __del__ in class EIFLexpart</span> +<span class="c1"># - added the following functions in EIFlexpart:</span> +<span class="c1"># - create_namelist</span> +<span class="c1"># - process_output</span> +<span class="c1"># - deacc_fluxes</span> +<span class="c1"># - modified existing EIFlexpart - functions for the use in</span> +<span class="c1"># flex_extract</span> +<span class="c1"># - retrieve also longer term forecasts, not only analyses and</span> +<span class="c1"># short term forecast data</span> +<span class="c1"># - added conversion into GRIB2</span> +<span class="c1">#</span> +<span class="c1"># February 2018 - Anne Philipp (University of Vienna):</span> +<span class="c1"># - applied PEP8 style guide</span> +<span class="c1"># - added documentation</span> +<span class="c1"># - removed function getFlexpartTime in class EcFlexpart</span> +<span class="c1"># - outsourced class ControlFile</span> +<span class="c1"># - outsourced class MarsRetrieval</span> +<span class="c1"># - changed class name from EIFlexpart to EcFlexpart</span> +<span class="c1"># - applied minor code changes (style)</span> +<span class="c1"># - removed "dead code" , e.g. retrieval of Q since it is not needed</span> +<span class="c1"># - removed "times" parameter from retrieve-method since it is not used</span> +<span class="c1"># - seperated function "retrieve" into smaller functions (less code</span> +<span class="c1"># duplication, easier testing)</span> +<span class="c1">#</span> +<span class="c1"># @License:</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> +<span class="c1">#</span> +<span class="c1"># SPDX-License-Identifier: CC-BY-4.0</span> +<span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> +<span class="c1">#*******************************************************************************</span> +<span class="c1">#pylint: disable=unsupported-assignment-operation</span> +<span class="c1"># this is disabled because for this specific case its an error in pylint</span> +<span class="c1">#pylint: disable=consider-using-enumerate</span> +<span class="c1"># this is not useful in this case</span> +<span class="c1">#pylint: disable=unsubscriptable-object</span> +<span class="c1"># this error is a bug</span> +<span class="c1">#pylint: disable=ungrouped-imports</span> +<span class="c1"># not necessary that we group the imports</span> +<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">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="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="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">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> +<span class="c1"># CLASS</span> +<span class="c1"># ------------------------------------------------------------------------------</span> +<div class="viewcode-block" id="EcFlexpart"><a class="viewcode-back" href="../Documentation/Api/api_python.html#EcFlexpart.EcFlexpart">[docs]</a><span class="k">class</span> <span class="nc">EcFlexpart</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">'''</span> +<span class="sd"> Class to represent FLEXPART specific ECMWF data.</span> + +<span class="sd"> FLEXPART needs grib files in a specifc format. All necessary data fields</span> +<span class="sd"> for one time step are stored in a single file. The class represents an</span> +<span class="sd"> instance with all the parameter and settings necessary for retrieving</span> +<span class="sd"> MARS data and modifing them so they are fitting FLEXPART needs. The class</span> +<span class="sd"> is able to disaggregate the fluxes and convert grid types to the one needed</span> +<span class="sd"> by FLEXPART, therefore using the FORTRAN program.</span> + +<span class="sd"> Attributes</span> +<span class="sd"> ----------</span> +<span class="sd"> mreq_count : int</span> +<span class="sd"> Counter for the number of generated mars requests.</span> + +<span class="sd"> inputdir : str</span> +<span class="sd"> Path to the directory where the retrieved data is stored.</span> + +<span class="sd"> dataset : str</span> +<span class="sd"> For public datasets there is the specific naming and parameter</span> +<span class="sd"> dataset which has to be used to characterize the type of</span> +<span class="sd"> data.</span> + +<span class="sd"> basetime : int</span> +<span class="sd"> The time for a half day retrieval. The 12 hours upfront are to be</span> +<span class="sd"> retrieved.</span> + +<span class="sd"> dtime : str</span> +<span class="sd"> Time step in hours.</span> + +<span class="sd"> acctype : str</span> +<span class="sd"> The field type for the accumulated forecast fields.</span> + +<span class="sd"> acctime : str</span> +<span class="sd"> The starting time from the accumulated forecasts.</span> + +<span class="sd"> accmaxstep : str</span> +<span class="sd"> The maximum forecast step for the accumulated forecast fields.</span> + +<span class="sd"> marsclass : str</span> +<span class="sd"> Characterisation of dataset.</span> + +<span class="sd"> stream : str</span> +<span class="sd"> Identifies the forecasting system used to generate the data.</span> + +<span class="sd"> number : str</span> +<span class="sd"> Selects the member in ensemble forecast run.</span> + +<span class="sd"> resol : str</span> +<span class="sd"> Specifies the desired triangular truncation of retrieved data,</span> +<span class="sd"> before carrying out any other selected post-processing.</span> + +<span class="sd"> accuracy : str</span> +<span class="sd"> Specifies the number of bits per value to be used in the</span> +<span class="sd"> generated GRIB coded fields.</span> + +<span class="sd"> addpar : str</span> +<span class="sd"> List of additional parameters to be retrieved.</span> + +<span class="sd"> level : str</span> +<span class="sd"> Specifies the maximum level.</span> + +<span class="sd"> expver : str</span> +<span class="sd"> The version of the dataset.</span> + +<span class="sd"> levelist : str</span> +<span class="sd"> Specifies the required levels.</span> + +<span class="sd"> glevelist : str</span> +<span class="sd"> Specifies the required levels for gaussian grids.</span> + +<span class="sd"> gaussian : str</span> +<span class="sd"> This parameter is deprecated and should no longer be used.</span> +<span class="sd"> Specifies the desired type of Gaussian grid for the output.</span> + +<span class="sd"> grid : str</span> +<span class="sd"> Specifies the output grid which can be either a Gaussian grid</span> +<span class="sd"> or a Latitude/Longitude grid.</span> + +<span class="sd"> area : str</span> +<span class="sd"> Specifies the desired sub-area of data to be extracted.</span> + +<span class="sd"> purefc : int</span> +<span class="sd"> Switch for definition of pure forecast mode or not.</span> + +<span class="sd"> outputfilelist : list of str</span> +<span class="sd"> The final list of FLEXPART ready input files.</span> + +<span class="sd"> types : dictionary</span> +<span class="sd"> Determines the combination of type of fields, time and forecast step</span> +<span class="sd"> to be retrieved.</span> + +<span class="sd"> params : dictionary</span> +<span class="sd"> Collection of grid types and their corresponding parameters,</span> +<span class="sd"> levels, level types and the grid definition.</span> + +<span class="sd"> server : ECMWFService or ECMWFDataServer</span> +<span class="sd"> This is the connection to the ECMWF data servers.</span> + +<span class="sd"> public : int</span> +<span class="sd"> Decides which Web API Server version is used.</span> + +<span class="sd"> dates : str</span> +<span class="sd"> Contains start and end date of the retrieval in the format</span> +<span class="sd"> "YYYYMMDD/to/YYYYMMDD"</span> +<span class="sd"> '''</span> + + <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="sd">'''Creates an object/instance of EcFlexpart with the associated</span> +<span class="sd"> settings of its attributes for the retrieval.</span> + +<span class="sd"> Parameters:</span> +<span class="sd"> -----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> fluxes : boolean, optional</span> +<span class="sd"> Decides if the flux parameter settings are stored or</span> +<span class="sd"> the rest of the parameter list.</span> +<span class="sd"> Default value is False.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="c1"># set a counter for the number of generated mars requests</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mreq_count</span> <span class="o">=</span> <span class="mi">0</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span> + <span class="bp">self</span><span class="o">.</span><span class="n">dataset</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">dataset</span> + <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> + <span class="bp">self</span><span class="o">.</span><span class="n">dtime</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">dtime</span> + <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">acctype</span> + <span class="bp">self</span><span class="o">.</span><span class="n">acctime</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">acctime</span> + <span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">accmaxstep</span> + <span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">marsclass</span> + <span class="bp">self</span><span class="o">.</span><span class="n">stream</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">stream</span> + <span class="bp">self</span><span class="o">.</span><span class="n">number</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">number</span> + <span class="bp">self</span><span class="o">.</span><span class="n">resol</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">resol</span> + <span class="bp">self</span><span class="o">.</span><span class="n">accuracy</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">accuracy</span> + <span class="bp">self</span><span class="o">.</span><span class="n">addpar</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">addpar</span> + <span class="bp">self</span><span class="o">.</span><span class="n">level</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">level</span> + <span class="bp">self</span><span class="o">.</span><span class="n">expver</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">expver</span> + <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">levelist</span> + <span class="bp">self</span><span class="o">.</span><span class="n">glevelist</span> <span class="o">=</span> <span class="s1">'1/to/'</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">level</span> <span class="c1"># in case of gaussian grid</span> + <span class="bp">self</span><span class="o">.</span><span class="n">gaussian</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">gaussian</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">grid</span> + <span class="bp">self</span><span class="o">.</span><span class="n">area</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">area</span> + <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span> <span class="o">=</span> <span class="p">[]</span> + + <span class="c1"># Define the different types of field combinations (type, time, step)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">types</span> <span class="o">=</span> <span class="p">{}</span> + <span class="c1"># Define the parameters and their level types, level list and</span> + <span class="c1"># grid resolution for the retrieval job</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span> <span class="o">=</span> <span class="p">{}</span> + + <span class="k">if</span> <span class="n">fluxes</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_create_params_fluxes</span><span class="p">()</span> + <span class="k">else</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_create_params</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">gauss</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">eta</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">omega</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">cwc</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">wrf</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">fluxes</span><span class="p">:</span><span class="c1"># and not c.purefc:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_create_field_types_fluxes</span><span class="p">()</span> + <span class="k">else</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_create_field_types</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="p">)</span> + <span class="k">return</span> + + <span class="k">def</span> <span class="nf">_create_field_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ftype</span><span class="p">,</span> <span class="n">ftime</span><span class="p">,</span> <span class="n">fstep</span><span class="p">):</span> + <span class="sd">'''Create the combination of field type, time and forecast step.</span> + +<span class="sd"> Parameters:</span> +<span class="sd"> -----------</span> +<span class="sd"> ftype : list of str</span> +<span class="sd"> List of field types.</span> + +<span class="sd"> ftime : list of str</span> +<span class="sd"> The time in hours of the field.</span> + +<span class="sd"> fstep : str</span> +<span class="sd"> Specifies the forecast time step from forecast base time.</span> +<span class="sd"> Valid values are hours (HH) from forecast base time.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">for</span> <span class="n">ty</span><span class="p">,</span> <span class="n">st</span><span class="p">,</span> <span class="n">ti</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">ftype</span><span class="p">,</span> <span class="n">fstep</span><span class="p">,</span> <span class="n">ftime</span><span class="p">):</span> + <span class="n">btlist</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">ftime</span><span class="p">)))</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="mi">12</span><span class="p">:</span> + <span class="n">btlist</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">12</span><span class="p">]</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="n">btlist</span> <span class="o">=</span> <span class="p">[</span><span class="mi">13</span><span class="p">,</span> <span class="mi">14</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">18</span><span class="p">,</span> <span class="mi">19</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">22</span><span class="p">,</span> <span class="mi">23</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> + + <span class="c1"># if ((ty.upper() == 'AN' and (int(c.time[i]) % int(c.dtime)) == 0) or</span> + <span class="c1"># (ty.upper() != 'AN' and (int(c.step[i]) % int(c.dtime)) == 0 and</span> + <span class="c1"># (int(c.step[i]) % int(c.dtime) == 0)) ) and \</span> + <span class="c1"># (int(c.time[i]) in btlist or c.purefc):</span> + + <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="ow">in</span> <span class="n">btlist</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + + <span class="k">if</span> <span class="p">((</span><span class="n">ty</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'AN'</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">ti</span><span class="p">)</span> <span class="o">%</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> + <span class="p">(</span><span class="n">ty</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">!=</span> <span class="s1">'AN'</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">st</span><span class="p">)</span> <span class="o">%</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)):</span> + + <span class="k">if</span> <span class="n">ty</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> + <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'times'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'steps'</span><span class="p">:</span> <span class="s1">''</span><span class="p">}</span> + + <span class="k">if</span> <span class="n">ti</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'times'</span><span class="p">]:</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'times'</span><span class="p">]:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'times'</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/'</span> + <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'times'</span><span class="p">]</span> <span class="o">+=</span> <span class="n">ti</span> + + <span class="k">if</span> <span class="n">st</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]:</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/'</span> + <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]</span> <span class="o">+=</span> <span class="n">st</span> + <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="k">return</span> + + <span class="k">def</span> <span class="nf">_create_field_types_fluxes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">'''Create the combination of field type, time and forecast step</span> +<span class="sd"> for the flux data.</span> + +<span class="sd"> Parameters:</span> +<span class="sd"> -----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="c1"># need to retrieve forecasts for step 000 in case of pure forecast</span> + <span class="n">steps</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{}</span><span class="s1">/to/</span><span class="si">{}</span><span class="s1">/by/</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dtime</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">steps</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{}</span><span class="s1">/to/</span><span class="si">{}</span><span class="s1">/by/</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dtime</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">dtime</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">acctype</span><span class="p">)]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'times'</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">acctime</span><span class="p">),</span> + <span class="s1">'steps'</span><span class="p">:</span> <span class="n">steps</span><span class="p">}</span> + <span class="k">return</span> + + <span class="k">def</span> <span class="nf">_create_params</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gauss</span><span class="p">,</span> <span class="n">eta</span><span class="p">,</span> <span class="n">omega</span><span class="p">,</span> <span class="n">cwc</span><span class="p">,</span> <span class="n">wrf</span><span class="p">):</span> + <span class="sd">'''Define the specific parameter settings for retrievment.</span> + +<span class="sd"> The different parameters need specific grid types and level types</span> +<span class="sd"> for retrievement. We might get following combination of types</span> +<span class="sd"> (depending on selection and availability):</span> +<span class="sd"> (These are short cuts for the grib file names (leading sequence)</span> +<span class="sd"> SH__ML, OG__ML, GG__ML, SH__SL, OG__SL, GG__SL, OG_OROLSM_SL</span> +<span class="sd"> where:</span> +<span class="sd"> SH = Spherical Harmonics, GG = Gaussian Grid, OG = Output Grid,</span> +<span class="sd"> ML = Model Level, SL = Surface Level</span> + +<span class="sd"> For each of this combination there is a list of parameter names,</span> +<span class="sd"> the level type, the level list and the grid resolution.</span> + +<span class="sd"> There are different scenarios for data extraction from MARS:</span> +<span class="sd"> 1) Retrieval of etadot</span> +<span class="sd"> eta=1, gauss=0, omega=0</span> +<span class="sd"> 2) Calculation of etadot from divergence</span> +<span class="sd"> eta=0, gauss=1, omega=0</span> +<span class="sd"> 3) Calculation of etadot from omega (for makes sense for debugging)</span> +<span class="sd"> eta=0, gauss=0, omega=1</span> +<span class="sd"> 4) Retrieval and Calculation of etadot (only for debugging)</span> +<span class="sd"> eta=1, gauss=1, omega=0</span> +<span class="sd"> 5) Download also specific model and surface level data for FLEXPART-WRF</span> + +<span class="sd"> Parameters:</span> +<span class="sd"> -----------</span> +<span class="sd"> gauss : int</span> +<span class="sd"> Gaussian grid is retrieved.</span> + +<span class="sd"> eta : int</span> +<span class="sd"> Etadot parameter will be directly retrieved.</span> + +<span class="sd"> omega : int</span> +<span class="sd"> The omega paramterwill be retrieved.</span> + +<span class="sd"> cwc : int</span> +<span class="sd"> The cloud liquid and ice water content will be retrieved.</span> + +<span class="sd"> wrf : int</span> +<span class="sd"> Additional model level and surface level data will be retrieved for</span> +<span class="sd"> WRF/FLEXPART-WRF simulations.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="c1"># SURFACE FIELDS</span> + <span class="c1">#-----------------------------------------------------------------------</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'SH__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'LNSP'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="s1">'OFF'</span><span class="p">]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'SD/MSL/TCC/10U/10V/2T/2D/Z/LSM'</span><span class="p">,</span> \ + <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">addpar</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">addpar</span> + + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EA'</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EP'</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_OROLSM__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"SDOR/CVL/CVH/FSR"</span><span class="p">,</span> + <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_OROLSM__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"SDOR/CVL/CVH/SR"</span><span class="p">,</span> \ + <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> + + <span class="c1"># MODEL LEVEL FIELDS</span> + <span class="c1">#-----------------------------------------------------------------------</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'T/Q'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">gauss</span> <span class="ow">and</span> <span class="n">eta</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/U/V/ETADOT'</span> + <span class="k">elif</span> <span class="n">gauss</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">eta</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'GG__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'Q'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> + <span class="s1">'</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span><span class="p">)]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'SH__ML'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'U/V/D'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">glevelist</span><span class="p">,</span> <span class="s1">'OFF'</span><span class="p">]</span> + <span class="k">elif</span> <span class="ow">not</span> <span class="n">gauss</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">eta</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/U/V'</span> + <span class="k">else</span><span class="p">:</span> <span class="c1"># GAUSS and ETA</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Warning: Collecting etadot and parameters for gaussian grid '</span> + <span class="s1">'is a very costly parameter combination, '</span> + <span class="s1">'use this combination only for debugging!'</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'GG__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'Q'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> + <span class="s1">'</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span><span class="p">)]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'GG__ML'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'U/V/D/ETADOT'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">glevelist</span><span class="p">,</span> + <span class="s1">'</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span><span class="p">)]</span> + + <span class="k">if</span> <span class="n">omega</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/W'</span> + + <span class="k">if</span> <span class="n">cwc</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/CLWC/CIWC'</span> + + <span class="c1"># ADDITIONAL FIELDS FOR FLEXPART-WRF MODEL (IF QUESTIONED)</span> + <span class="c1"># ----------------------------------------------------------------------</span> + <span class="k">if</span> <span class="n">wrf</span><span class="p">:</span> + <span class="c1"># @WRF</span> + <span class="c1"># THIS IS NOT YET CORRECTLY IMPLEMENTED !!!</span> + <span class="c1">#</span> + <span class="c1"># UNDER CONSTRUCTION !!!</span> + <span class="c1">#</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'WRF VERSION IS UNDER CONSTRUCTION!'</span><span class="p">)</span> <span class="c1"># dummy argument</span> + + <span class="c1">#self.params['OG__ML'][0] += '/Z/VO'</span> + <span class="c1">#if '/D' not in self.params['OG__ML'][0]:</span> + <span class="c1"># self.params['OG__ML'][0] += '/D'</span> + + <span class="c1">#wrf_sfc = ['SP','SKT','SST','CI','STL1','STL2', 'STL3','STL4',</span> + <span class="c1"># 'SWVL1','SWVL2','SWVL3','SWVL4']</span> + <span class="c1">#for par in wrf_sfc:</span> + <span class="c1"># if par not in self.params['OG__SL'][0]:</span> + <span class="c1"># self.params['OG__SL'][0] += '/' + par</span> + + <span class="k">return</span> + + + <span class="k">def</span> <span class="nf">_create_params_fluxes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">'''Define the parameter setting for flux data.</span> + +<span class="sd"> Flux data are accumulated fields in time and are stored on the</span> +<span class="sd"> surface level. The leading short cut name for the grib files is:</span> +<span class="sd"> "OG_acc_SL" with OG for Regular Output Grid, SL for Surface Level, and</span> +<span class="sd"> acc for Accumulated Grid.</span> +<span class="sd"> The params dictionary stores a list of parameter names, the level type,</span> +<span class="sd"> the level list and the grid resolution.</span> + +<span class="sd"> The flux data are: LSP/CP/SSHF/EWSS/NSSS/SSR</span> + +<span class="sd"> Parameters:</span> +<span class="sd"> -----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_acc_SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"LSP/CP/SSHF/EWSS/NSSS/SSR"</span><span class="p">,</span> + <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> + <span class="k">return</span> + + + <span class="k">def</span> <span class="nf">_mk_targetname</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ftype</span><span class="p">,</span> <span class="n">param</span><span class="p">,</span> <span class="n">date</span><span class="p">):</span> + <span class="sd">'''Creates the filename for the requested grib data to be stored in.</span> +<span class="sd"> This name is passed as the "target" parameter in the request.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> ftype : str</span> +<span class="sd"> Shortcut name of the type of the field. E.g. AN, FC, PF, ...</span> + +<span class="sd"> param : str</span> +<span class="sd"> Shortcut of the grid type. E.g. SH__ML, SH__SL, GG__ML,</span> +<span class="sd"> GG__SL, OG__ML, OG__SL, OG_OROLSM_SL, OG_acc_SL</span> + +<span class="sd"> date : str</span> +<span class="sd"> The date period of the grib data to be stored in this file.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> targetname : str</span> +<span class="sd"> The target filename for the grib data.</span> +<span class="sd"> '''</span> + <span class="n">targetname</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">+</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">ftype</span> <span class="o">+</span> <span class="n">param</span> <span class="o">+</span> <span class="s1">'.'</span> <span class="o">+</span> <span class="n">date</span> <span class="o">+</span> <span class="s1">'.'</span> <span class="o">+</span> + <span class="nb">str</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getppid</span><span class="p">())</span> <span class="o">+</span> <span class="s1">'.'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getpid</span><span class="p">())</span> <span class="o">+</span> <span class="s1">'.grb'</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">targetname</span> + + + <span class="k">def</span> <span class="nf">_start_retrievement</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">par_dict</span><span class="p">):</span> + <span class="sd">'''Creates the Mars Retrieval and prints or submits the request</span> +<span class="sd"> depending on the status of the request variable.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> request : int</span> +<span class="sd"> Selects the mode of retrieval.</span> +<span class="sd"> 0: Retrieves the data from ECMWF.</span> +<span class="sd"> 1: Prints the mars requests to an output file.</span> +<span class="sd"> 2: Retrieves the data and prints the mars request.</span> + +<span class="sd"> par_dict : dictionary</span> +<span class="sd"> Contains all parameter which have to be set for creating the</span> +<span class="sd"> Mars Retrievals. The parameter are:</span> +<span class="sd"> marsclass, dataset, stream, type, levtype, levelist, resol,</span> +<span class="sd"> gaussian, accuracy, grid, target, area, date, time, number,</span> +<span class="sd"> step, expver, param</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="c1"># increase number of mars requests</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mreq_count</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="n">MR</span> <span class="o">=</span> <span class="n">MarsRetrieval</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">public</span><span class="p">,</span> + <span class="n">marsclass</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'marsclass'</span><span class="p">],</span> + <span class="n">dataset</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'dataset'</span><span class="p">],</span> + <span class="n">stream</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'stream'</span><span class="p">],</span> + <span class="nb">type</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'type'</span><span class="p">],</span> + <span class="n">levtype</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'levtype'</span><span class="p">],</span> + <span class="n">levelist</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'levelist'</span><span class="p">],</span> + <span class="n">resol</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'resol'</span><span class="p">],</span> + <span class="n">gaussian</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'gaussian'</span><span class="p">],</span> + <span class="n">accuracy</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'accuracy'</span><span class="p">],</span> + <span class="n">grid</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'grid'</span><span class="p">],</span> + <span class="n">target</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'target'</span><span class="p">],</span> + <span class="n">area</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'area'</span><span class="p">],</span> + <span class="n">date</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'date'</span><span class="p">],</span> + <span class="n">time</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'time'</span><span class="p">],</span> + <span class="n">number</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'number'</span><span class="p">],</span> + <span class="n">step</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'step'</span><span class="p">],</span> + <span class="n">expver</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'expver'</span><span class="p">],</span> + <span class="n">param</span><span class="o">=</span><span class="n">par_dict</span><span class="p">[</span><span class="s1">'param'</span><span class="p">])</span> + + <span class="k">if</span> <span class="n">request</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="n">MR</span><span class="o">.</span><span class="n">display_info</span><span class="p">()</span> + <span class="n">MR</span><span class="o">.</span><span class="n">data_retrieve</span><span class="p">()</span> + <span class="k">elif</span> <span class="n">request</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> + <span class="n">MR</span><span class="o">.</span><span class="n">print_infodata_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">mreq_count</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> + <span class="n">MR</span><span class="o">.</span><span class="n">print_infodata_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">mreq_count</span><span class="p">)</span> + <span class="n">MR</span><span class="o">.</span><span class="n">display_info</span><span class="p">()</span> + <span class="n">MR</span><span class="o">.</span><span class="n">data_retrieve</span><span class="p">()</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Failure'</span><span class="p">)</span> + + <span class="k">return</span> + + + <span class="k">def</span> <span class="nf">_mk_index_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inputdir</span><span class="p">,</span> <span class="n">inputfiles</span><span class="p">,</span> <span class="n">keys</span><span class="p">):</span> + <span class="sd">'''Creates an index file for a set of grib parameter keys.</span> +<span class="sd"> The values from the index keys are returned in a list.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> keys : dictionary</span> +<span class="sd"> List of parameter names which serves as index.</span> + +<span class="sd"> inputfiles : UioFiles</span> +<span class="sd"> Contains a list of files.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> iid : codes_index</span> +<span class="sd"> This is a grib specific index structure to access</span> +<span class="sd"> messages in a file.</span> + +<span class="sd"> index_vals : list of list of str</span> +<span class="sd"> Contains the values from the keys used for a distinct selection</span> +<span class="sd"> of grib messages in processing the grib files.</span> +<span class="sd"> Content looks like e.g.:</span> +<span class="sd"> index_vals[0]: ('20171106', '20171107', '20171108') ; date</span> +<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="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> + + <span class="n">indexfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FILE_GRIB_INDEX</span><span class="p">)</span> + <span class="n">silent_remove</span><span class="p">(</span><span class="n">indexfile</span><span class="p">)</span> + <span class="n">grib</span> <span class="o">=</span> <span class="n">GribUtil</span><span class="p">(</span><span class="n">inputfiles</span><span class="o">.</span><span class="n">files</span><span class="p">)</span> + <span class="c1"># creates new index file</span> + <span class="n">iid</span> <span class="o">=</span> <span class="n">grib</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">index_keys</span><span class="o">=</span><span class="n">index_keys</span><span class="p">,</span> <span class="n">index_file</span><span class="o">=</span><span class="n">indexfile</span><span class="p">)</span> + + <span class="c1"># read the values of index keys</span> + <span class="n">index_vals</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">index_keys</span><span class="p">:</span> + <span class="n">key_vals</span> <span class="o">=</span> <span class="n">codes_index_get</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> + <span class="c1"># have to sort the key values for correct order,</span> + <span class="c1"># therefore convert to int first</span> + <span class="n">key_vals</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">key_vals</span><span class="p">]</span> + <span class="n">key_vals</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span> + <span class="n">key_vals</span> <span class="o">=</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">key_vals</span><span class="p">]</span> + <span class="n">index_vals</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">key_vals</span><span class="p">)</span> + <span class="c1"># index_vals looks for example like:</span> + <span class="c1"># index_vals[0]: ('20171106', '20171107', '20171108') ; date</span> + <span class="c1"># index_vals[1]: ('0', '1200') ; time</span> + <span class="c1"># index_vals[2]: (3', '6', '9', '12') ; stepRange</span> + + <span class="k">return</span> <span class="n">iid</span><span class="p">,</span> <span class="n">index_vals</span> + + +<div class="viewcode-block" id="EcFlexpart.retrieve"><a class="viewcode-back" href="../Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.retrieve">[docs]</a> <span class="k">def</span> <span class="nf">retrieve</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">dates</span><span class="p">,</span> <span class="n">public</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">inputdir</span><span class="o">=</span><span class="s1">'.'</span><span class="p">):</span> + <span class="sd">'''Finalizing the retrieval information by setting final details</span> +<span class="sd"> depending on grid type.</span> +<span class="sd"> Prepares MARS retrievals per grid type and submits them.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> server : ECMWFService or ECMWFDataServer</span> +<span class="sd"> The connection to the ECMWF server. This is different</span> +<span class="sd"> for member state users which have full access and non</span> +<span class="sd"> member state users which have only access to the public</span> +<span class="sd"> data sets. The decision is made from command line argument</span> +<span class="sd"> "public"; for public access its True (ECMWFDataServer)</span> +<span class="sd"> for member state users its False (ECMWFService)</span> + +<span class="sd"> dates : str</span> +<span class="sd"> Contains start and end date of the retrieval in the format</span> +<span class="sd"> "YYYYMMDD/to/YYYYMMDD"</span> + +<span class="sd"> request : int</span> +<span class="sd"> Selects the mode of retrieval.</span> +<span class="sd"> 0: Retrieves the data from ECMWF.</span> +<span class="sd"> 1: Prints the mars requests to an output file.</span> +<span class="sd"> 2: Retrieves the data and prints the mars request.</span> + +<span class="sd"> inputdir : str, optional</span> +<span class="sd"> Path to the directory where the retrieved data is about</span> +<span class="sd"> to be stored. The default is the current directory ('.').</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="bp">self</span><span class="o">.</span><span class="n">dates</span> <span class="o">=</span> <span class="n">dates</span> + <span class="bp">self</span><span class="o">.</span><span class="n">server</span> <span class="o">=</span> <span class="n">server</span> + <span class="bp">self</span><span class="o">.</span><span class="n">public</span> <span class="o">=</span> <span class="n">public</span> + <span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">=</span> <span class="n">inputdir</span> + <span class="n">oro</span> <span class="o">=</span> <span class="kc">False</span> + + <span class="c1"># define times with datetime module</span> + <span class="n">t12h</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">12</span><span class="p">)</span> + <span class="n">t24h</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">24</span><span class="p">)</span> + + <span class="c1"># dictionary which contains all parameter for the mars request,</span> + <span class="c1"># entries with a "None" will change in different requests and will</span> + <span class="c1"># therefore be set in each request seperately</span> + <span class="n">retr_param_dict</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'marsclass'</span><span class="p">:</span><span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span><span class="p">,</span> + <span class="s1">'dataset'</span><span class="p">:</span><span class="bp">self</span><span class="o">.</span><span class="n">dataset</span><span class="p">,</span> + <span class="s1">'stream'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> + <span class="s1">'type'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> + <span class="s1">'levtype'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> + <span class="s1">'levelist'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> + <span class="s1">'resol'</span><span class="p">:</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">,</span> + <span class="s1">'gaussian'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> + <span class="s1">'accuracy'</span><span class="p">:</span><span class="bp">self</span><span class="o">.</span><span class="n">accuracy</span><span class="p">,</span> + <span class="s1">'grid'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> + <span class="s1">'target'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> + <span class="s1">'area'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> + <span class="s1">'date'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> + <span class="s1">'time'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> + <span class="s1">'number'</span><span class="p">:</span><span class="bp">self</span><span class="o">.</span><span class="n">number</span><span class="p">,</span> + <span class="s1">'step'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> + <span class="s1">'expver'</span><span class="p">:</span><span class="bp">self</span><span class="o">.</span><span class="n">expver</span><span class="p">,</span> + <span class="s1">'param'</span><span class="p">:</span><span class="kc">None</span><span class="p">}</span> + + <span class="k">for</span> <span class="n">ftype</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">):</span> + <span class="c1"># ftype contains field types such as</span> + <span class="c1"># [AN, FC, PF, CV]</span> + <span class="k">for</span> <span class="n">pk</span><span class="p">,</span> <span class="n">pv</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">items</span><span class="p">()):</span> + <span class="c1"># pk contains one of these keys of params</span> + <span class="c1"># [SH__ML, SH__SL, GG__ML, GG__SL, OG__ML, OG__SL,</span> + <span class="c1"># OG_OROLSM_SL, OG_acc_SL]</span> + <span class="c1"># pv contains all of the items of the belonging key</span> + <span class="c1"># [param, levtype, levelist, grid]</span> + <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pv</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span> + <span class="k">continue</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]</span> <span class="o">=</span> <span class="n">ftype</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'time'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ftype</span><span class="p">][</span><span class="s1">'times'</span><span class="p">]</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'step'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ftype</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'date'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dates</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'stream'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stream</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'target'</span><span class="p">]</span> <span class="o">=</span> \ + <span class="bp">self</span><span class="o">.</span><span class="n">_mk_targetname</span><span class="p">(</span><span class="n">ftype</span><span class="p">,</span> + <span class="n">pk</span><span class="p">,</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'date'</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="mi">0</span><span class="p">])</span> + <span class="n">table128</span> <span class="o">=</span> <span class="n">init128</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_GRIBTABLE</span><span class="p">)</span> + <span class="n">ids</span> <span class="o">=</span> <span class="n">to_param_id_with_tablenumber</span><span class="p">(</span><span class="n">pv</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">table128</span><span class="p">)</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'param'</span><span class="p">]</span> <span class="o">=</span> <span class="n">ids</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'levtype'</span><span class="p">]</span> <span class="o">=</span> <span class="n">pv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'levelist'</span><span class="p">]</span> <span class="o">=</span> <span class="n">pv</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'grid'</span><span class="p">]</span> <span class="o">=</span> <span class="n">pv</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'area'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">area</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'gaussian'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gaussian</span> + + <span class="k">if</span> <span class="n">pk</span> <span class="o">==</span> <span class="s1">'OG_OROLSM__SL'</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">oro</span><span class="p">:</span> + <span class="n">oro</span> <span class="o">=</span> <span class="kc">True</span> + <span class="c1"># in CERA20C (class EP) there is no stream "OPER"!</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">!=</span> <span class="s1">'EP'</span><span class="p">:</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'stream'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'OPER'</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'AN'</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'time'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'00'</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'step'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'000'</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'date'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dates</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'target'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mk_targetname</span><span class="p">(</span><span class="s1">''</span><span class="p">,</span> + <span class="n">pk</span><span class="p">,</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'date'</span><span class="p">])</span> + <span class="k">elif</span> <span class="n">pk</span> <span class="o">==</span> <span class="s1">'OG_OROLSM__SL'</span> <span class="ow">and</span> <span class="n">oro</span><span class="p">:</span> + <span class="k">continue</span> + <span class="k">if</span> <span class="n">pk</span> <span class="o">==</span> <span class="s1">'GG__SL'</span> <span class="ow">and</span> <span class="n">pv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'Q'</span><span class="p">:</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'area'</span><span class="p">]</span> <span class="o">=</span> <span class="s2">""</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'gaussian'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'reduced'</span> + <span class="k">if</span> <span class="n">ftype</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'FC'</span> <span class="ow">and</span> \ + <span class="s1">'acc'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'target'</span><span class="p">]:</span> + <span class="k">if</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'time'</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> + <span class="nb">int</span><span class="p">(</span><span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'step'</span><span class="p">][</span><span class="mi">0</span><span class="p">]))</span> <span class="o">></span> <span class="mi">23</span><span class="p">:</span> + <span class="n">dates</span> <span class="o">=</span> <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'date'</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="n">sdate</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">dates</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="n">sdate</span> <span class="o">=</span> <span class="n">sdate</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'date'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'/'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> + <span class="p">[</span><span class="n">sdate</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)]</span> <span class="o">+</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'date'</span><span class="p">][</span><span class="mi">1</span><span class="p">:])</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'CHANGED FC start date to '</span> <span class="o">+</span> + <span class="n">sdate</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span> <span class="o">+</span> + <span class="s1">' to accomodate TIME='</span> <span class="o">+</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'time'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> + <span class="s1">', STEP='</span> <span class="o">+</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'time'</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> + + <span class="c1"># ------ on demand path --------------------------------------------------</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> + <span class="c1"># ******* start retrievement</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_start_retrievement</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">retr_param_dict</span><span class="p">)</span> + <span class="c1"># ------ operational path ------------------------------------------------</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># check if mars job requests fields beyond basetime.</span> + <span class="c1"># if yes eliminate those fields since they may not</span> + <span class="c1"># be accessible with user's credentials</span> + + <span class="n">enddate</span> <span class="o">=</span> <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'date'</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="n">elimit</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">enddate</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">basetime</span><span class="p">),</span> + <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="mi">12</span><span class="p">:</span> + <span class="c1"># -------------- flux data ----------------------------</span> + <span class="k">if</span> <span class="s1">'acc'</span> <span class="ow">in</span> <span class="n">pk</span><span class="p">:</span> + <span class="n">startdate</span> <span class="o">=</span> <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'date'</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="mi">0</span><span class="p">]</span> + <span class="n">enddate</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">elimit</span> <span class="o">-</span> <span class="n">t24h</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'date'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'/'</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">startdate</span><span class="p">,</span> + <span class="s1">'to'</span><span class="p">,</span> + <span class="n">enddate</span><span class="p">])</span> + + <span class="c1"># ******* start retrievement</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_start_retrievement</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">retr_param_dict</span><span class="p">)</span> + + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'date'</span><span class="p">]</span> <span class="o">=</span> \ + <span class="n">datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">elimit</span> <span class="o">-</span> <span class="n">t12h</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'time'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'00'</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'target'</span><span class="p">]</span> <span class="o">=</span> \ + <span class="bp">self</span><span class="o">.</span><span class="n">_mk_targetname</span><span class="p">(</span><span class="n">ftype</span><span class="p">,</span> <span class="n">pk</span><span class="p">,</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'date'</span><span class="p">])</span> + + <span class="c1"># ******* start retrievement</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_start_retrievement</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">retr_param_dict</span><span class="p">)</span> + + <span class="c1"># -------------- non flux data ------------------------</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># ******* start retrievement</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_start_retrievement</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">retr_param_dict</span><span class="p">)</span> + + <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> +<span class="c1"># retr_param_dict['date'] = \</span> +<span class="c1"># datetime.strftime(elimit - t24h, '%Y%m%d')</span> + + <span class="n">timesave</span> <span class="o">=</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'time'</span><span class="p">])</span> + + <span class="k">if</span> <span class="nb">all</span><span class="p">([</span><span class="s1">'/'</span> <span class="ow">in</span> <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'time'</span><span class="p">],</span> + <span class="n">pk</span> <span class="o">!=</span> <span class="s1">'OG_OROLSM__SL'</span><span class="p">,</span> + <span class="s1">'acc'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">pk</span><span class="p">]):</span> + <span class="n">times</span> <span class="o">=</span> <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'time'</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="n">steps</span> <span class="o">=</span> <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'step'</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="k">while</span> <span class="nb">int</span><span class="p">(</span><span class="n">times</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o"><=</span> <span class="mi">12</span><span class="p">:</span> + <span class="n">times</span> <span class="o">=</span> <span class="n">times</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">times</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'time'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'/'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">times</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'time'</span><span class="p">]</span> <span class="o">=</span> <span class="n">times</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> + + <span class="k">if</span> <span class="nb">all</span><span class="p">([</span><span class="n">pk</span> <span class="o">!=</span> <span class="s1">'OG_OROLSM__SL'</span><span class="p">,</span> + <span class="nb">int</span><span class="p">(</span><span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'step'</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="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="mi">0</span><span class="p">,</span> + <span class="nb">int</span><span class="p">(</span><span class="n">timesave</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="mi">0</span><span class="p">]):</span> + + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'date'</span><span class="p">]</span> <span class="o">=</span> \ + <span class="n">datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">elimit</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'time'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'00'</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'step'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'000'</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'target'</span><span class="p">]</span> <span class="o">=</span> \ + <span class="bp">self</span><span class="o">.</span><span class="n">_mk_targetname</span><span class="p">(</span><span class="n">ftype</span><span class="p">,</span> <span class="n">pk</span><span class="p">,</span> + <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'date'</span><span class="p">])</span> + + <span class="c1"># ******* start retrievement</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_start_retrievement</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">retr_param_dict</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'ERROR: Basetime has an invalid value '</span> + <span class="s1">'-> </span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">basetime</span><span class="p">)))</span> + + <span class="k">if</span> <span class="n">request</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'MARS retrieve done ... '</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">request</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'MARS request printed ...'</span><span class="p">)</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="EcFlexpart.write_namelist"><a class="viewcode-back" href="../Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.write_namelist">[docs]</a> <span class="k">def</span> <span class="nf">write_namelist</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="sd">'''Creates a namelist file in the temporary directory and writes</span> +<span class="sd"> the following values to it: maxl, maxb, mlevel,</span> +<span class="sd"> mlevelist, mnauf, metapar, rlo0, rlo1, rla0, rla1,</span> +<span class="sd"> momega, momegadiff, mgauss, msmooth, meta, metadiff, mdpdeta</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> filename : str</span> +<span class="sd"> Name of the namelist file.</span> + +<span class="sd"> Return</span> +<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">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> + <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> + <span class="n">namelist_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_NAMELIST</span><span class="p">,</span> + <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span> + <span class="n">area</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">area</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">))</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span> + <span class="n">grid</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">))</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">></span> <span class="n">area</span><span class="p">[</span><span class="mi">3</span><span class="p">]:</span> + <span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-=</span> <span class="mi">360</span> + <span class="n">maxl</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">round</span><span class="p">((</span><span class="n">area</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">-</span> <span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">/</span> <span class="n">grid</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> <span class="o">+</span> <span class="mi">1</span> + <span class="n">maxb</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">round</span><span class="p">((</span><span class="n">area</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">area</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">/</span> <span class="n">grid</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> <span class="o">+</span> <span class="mi">1</span> + + <span class="n">stream</span> <span class="o">=</span> <span class="n">namelist_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span> + <span class="n">maxl</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">maxl</span><span class="p">),</span> + <span class="n">maxb</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">maxb</span><span class="p">),</span> + <span class="n">mlevel</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">),</span> + <span class="n">mlevelist</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">),</span> + <span class="n">mnauf</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">),</span> + <span class="n">metapar</span><span class="o">=</span><span class="s1">'77'</span><span class="p">,</span> + <span class="n">rlo0</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> + <span class="n">rlo1</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">3</span><span class="p">]),</span> + <span class="n">rla0</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> + <span class="n">rla1</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> + <span class="n">momega</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">omega</span><span class="p">),</span> + <span class="n">momegadiff</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">omegadiff</span><span class="p">),</span> + <span class="n">mgauss</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">gauss</span><span class="p">),</span> + <span class="n">msmooth</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">smooth</span><span class="p">),</span> + <span class="n">meta</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">eta</span><span class="p">),</span> + <span class="n">metadiff</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">etadiff</span><span class="p">),</span> + <span class="n">mdpdeta</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dpdeta</span><span class="p">)</span> + <span class="p">)</span> + <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate namelist '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_NAMELIST</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_NAMELIST</span><span class="p">)</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">namelistfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FILE_NAMELIST</span><span class="p">)</span> + + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">namelistfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to write '</span> <span class="o">+</span> + <span class="n">namelistfile</span><span class="p">)</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="EcFlexpart.deacc_fluxes"><a class="viewcode-back" href="../Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.deacc_fluxes">[docs]</a> <span class="k">def</span> <span class="nf">deacc_fluxes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inputfiles</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span> + <span class="sd">'''De-accumulate and disaggregate flux data.</span> + +<span class="sd"> Goes through all flux fields in ordered time and de-accumulate</span> +<span class="sd"> the fields. Afterwards the fields are disaggregated in time.</span> +<span class="sd"> Different versions of disaggregation is provided for rainfall</span> +<span class="sd"> data (darain, modified linear) and the surface fluxes and</span> +<span class="sd"> stress data (dapoly, cubic polynomial).</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> inputfiles : UioFiles</span> +<span class="sd"> Contains the list of files that contain flux data.</span> + +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<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="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> + + <span class="n">table128</span> <span class="o">=</span> <span class="n">init128</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_GRIBTABLE</span><span class="p">)</span> + <span class="c1"># get ids from the flux parameter names</span> + <span class="n">pars</span> <span class="o">=</span> <span class="n">to_param_id</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_acc_SL'</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="n">table128</span><span class="p">)</span> + + <span class="n">iid</span> <span class="o">=</span> <span class="kc">None</span> + <span class="n">index_vals</span> <span class="o">=</span> <span class="kc">None</span> + + <span class="c1"># get the values of the keys which are used for distinct access</span> + <span class="c1"># of grib messages via product and save the maximum number of</span> + <span class="c1"># ensemble members if there is more than one</span> + <span class="k">if</span> <span class="s1">'/'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">number</span><span class="p">:</span> + <span class="c1"># more than one ensemble member is selected</span> + <span class="n">index_keys</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"number"</span><span class="p">,</span> <span class="s2">"date"</span><span class="p">,</span> <span class="s2">"time"</span><span class="p">,</span> <span class="s2">"step"</span><span class="p">]</span> + <span class="c1"># maximum ensemble number retrieved</span> + <span class="c1"># + 1 for the control run (ensemble number 0)</span> + <span class="n">maxnum</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">number</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="mi">1</span> + <span class="c1"># remember the index of the number values</span> + <span class="n">index_number</span> <span class="o">=</span> <span class="n">index_keys</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'number'</span><span class="p">)</span> + <span class="c1"># empty set to save ensemble numbers which were already processed</span> + <span class="n">ens_numbers</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span> + <span class="c1"># index for the ensemble number</span> + <span class="n">inumb</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">index_keys</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"date"</span><span class="p">,</span> <span class="s2">"time"</span><span class="p">,</span> <span class="s2">"step"</span><span class="p">]</span> + <span class="c1"># maximum ensemble number</span> + <span class="n">maxnum</span> <span class="o">=</span> <span class="kc">None</span> + + <span class="c1"># get sorted lists of the index values</span> + <span class="c1"># this is very important for disaggregating</span> + <span class="c1"># the flux data in correct order</span> + <span class="n">iid</span><span class="p">,</span> <span class="n">index_vals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mk_index_values</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> + <span class="n">inputfiles</span><span class="p">,</span> + <span class="n">index_keys</span><span class="p">)</span> + <span class="c1"># index_vals looks like e.g.:</span> + <span class="c1"># index_vals[0]: ('20171106', '20171107', '20171108') ; date</span> + <span class="c1"># index_vals[1]: ('0', '600', '1200', '1800') ; time</span> + <span class="c1"># index_vals[2]: ('0', '3', '6', '9', '12') ; stepRange</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span><span class="p">:</span> + <span class="c1"># set start and end timestamps for retrieval period</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="n">start_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span> <span class="o">+</span> <span class="s1">'00'</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="n">end_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">+</span> <span class="s1">'23'</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">sdate_str</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">start_date</span> <span class="o">+</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> + <span class="n">start_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">sdate_str</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="n">edate_str</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">+</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> + <span class="n">end_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">edate_str</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="n">end_date</span> <span class="o">=</span> <span class="n">end_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">maxstep</span><span class="p">)</span> + + <span class="c1"># get necessary grid dimensions from grib files for storing the</span> + <span class="c1"># precipitation fields</span> + <span class="n">info</span> <span class="o">=</span> <span class="n">get_informations</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> + <span class="n">inputfiles</span><span class="o">.</span><span class="n">files</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> + <span class="n">dims</span> <span class="o">=</span> <span class="n">get_dimensions</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">,</span> <span class="n">index_vals</span><span class="p">,</span> + <span class="n">start_date</span><span class="p">,</span> <span class="n">end_date</span><span class="p">)</span> + + <span class="c1"># create empty numpy arrays</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">maxnum</span><span class="p">:</span> + <span class="n">lsp_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">dims</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">dims</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">dims</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> + <span class="n">cp_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">dims</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">dims</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">dims</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">lsp_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">maxnum</span><span class="p">,</span> <span class="n">dims</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">dims</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">dims</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> + <span class="n">cp_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">maxnum</span><span class="p">,</span> <span class="n">dims</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">dims</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">dims</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> + + <span class="c1"># index counter for time line</span> + <span class="n">it_lsp</span> <span class="o">=</span> <span class="mi">0</span> + <span class="n">it_cp</span> <span class="o">=</span> <span class="mi">0</span> + + <span class="c1"># store the order of date and step</span> + <span class="n">date_list</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">step_list</span> <span class="o">=</span> <span class="p">[]</span> + + <span class="c1"># initialize dictionaries to store flux values per parameter</span> + <span class="n">orig_vals</span> <span class="o">=</span> <span class="p">{}</span> + <span class="n">deac_vals</span> <span class="o">=</span> <span class="p">{}</span> + <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pars</span><span class="p">:</span> + <span class="n">orig_vals</span><span class="p">[</span><span class="n">p</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">deac_vals</span><span class="p">[</span><span class="n">p</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span> + + <span class="c1"># "product" genereates each possible combination between the</span> + <span class="c1"># values of the index keys</span> + <span class="k">for</span> <span class="n">prod</span> <span class="ow">in</span> <span class="n">product</span><span class="p">(</span><span class="o">*</span><span class="n">index_vals</span><span class="p">):</span> + <span class="c1"># e.g. prod = ('20170505', '0', '12')</span> + <span class="c1"># ( date ,time, step)</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'CURRENT PRODUCT: '</span><span class="p">,</span> <span class="n">prod</span><span class="p">)</span> + + <span class="c1"># the whole process has to be done for each seperate ensemble member</span> + <span class="c1"># therefore, for each new ensemble member we delete old flux values</span> + <span class="c1"># and start collecting flux data from the beginning time step</span> + <span class="k">if</span> <span class="n">maxnum</span> <span class="ow">and</span> <span class="n">prod</span><span class="p">[</span><span class="n">index_number</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">ens_numbers</span><span class="p">:</span> + <span class="n">ens_numbers</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">prod</span><span class="p">[</span><span class="n">index_number</span><span class="p">])</span> + <span class="n">inumb</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">ens_numbers</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span> + <span class="c1"># re-initialize dictionaries to store flux values per parameter</span> + <span class="c1"># for the next ensemble member</span> + <span class="n">it_lsp</span> <span class="o">=</span> <span class="mi">0</span> + <span class="n">it_cp</span> <span class="o">=</span> <span class="mi">0</span> + <span class="n">orig_vals</span> <span class="o">=</span> <span class="p">{}</span> + <span class="n">deac_vals</span> <span class="o">=</span> <span class="p">{}</span> + <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pars</span><span class="p">:</span> + <span class="n">orig_vals</span><span class="p">[</span><span class="n">p</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">deac_vals</span><span class="p">[</span><span class="n">p</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span> + + <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">index_keys</span><span class="p">)):</span> + <span class="n">codes_index_select</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">index_keys</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">prod</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> + + <span class="c1"># get first id from current product</span> + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> + + <span class="c1"># if there is no data for this specific time combination / product</span> + <span class="c1"># skip the rest of the for loop and start with next timestep/product</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">gid</span><span class="p">:</span> + <span class="k">continue</span> + + <span class="c1"># create correct timestamp from the three time informations</span> + <span class="n">cdate</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">))</span> + <span class="n">time</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">)</span> <span class="o">//</span> <span class="mi">100</span> <span class="c1"># integer</span> + <span class="n">step</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">)</span> <span class="c1"># integer</span> + <span class="n">ctime</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">time</span><span class="p">)</span> + + <span class="n">t_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">cdate</span> <span class="o">+</span> <span class="n">ctime</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="n">t_dt</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n">step</span><span class="p">)</span> + <span class="n">t_m1dt</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n">step</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + <span class="n">t_m2dt</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n">step</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">t_enddate</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">basetime</span><span class="p">),</span> + <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">t_enddate</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + + <span class="c1"># if necessary, add ensemble member number to filename suffix</span> + <span class="c1"># otherwise, add empty string</span> + <span class="k">if</span> <span class="n">maxnum</span><span class="p">:</span> + <span class="n">numbersuffix</span> <span class="o">=</span> <span class="s1">'.N</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">prod</span><span class="p">[</span><span class="n">index_number</span><span class="p">]))</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">numbersuffix</span> <span class="o">=</span> <span class="s1">''</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="n">fnout</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'flux'</span> <span class="o">+</span> + <span class="n">t_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">.%H'</span><span class="p">)</span> <span class="o">+</span> + <span class="s1">'.</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">step</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> <span class="o">+</span> + <span class="n">numbersuffix</span><span class="p">)</span> + <span class="n">gnout</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'flux'</span> <span class="o">+</span> + <span class="n">t_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">.%H'</span><span class="p">)</span> <span class="o">+</span> + <span class="s1">'.</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">step</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> <span class="o">+</span> + <span class="n">numbersuffix</span><span class="p">)</span> + <span class="n">hnout</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'flux'</span> <span class="o">+</span> + <span class="n">t_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">.%H'</span><span class="p">)</span> <span class="o">+</span> + <span class="s1">'.</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">step</span><span class="p">)</span> <span class="o">+</span> + <span class="n">numbersuffix</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">fnout</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'flux'</span> <span class="o">+</span> + <span class="n">t_m2dt</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> <span class="o">+</span> <span class="n">numbersuffix</span><span class="p">)</span> + <span class="n">gnout</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'flux'</span> <span class="o">+</span> + <span class="n">t_m1dt</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> <span class="o">+</span> <span class="n">numbersuffix</span><span class="p">)</span> + <span class="n">hnout</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'flux'</span> <span class="o">+</span> + <span class="n">t_dt</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> <span class="o">+</span> <span class="n">numbersuffix</span><span class="p">)</span> + + <span class="nb">print</span><span class="p">(</span><span class="s2">"outputfile = "</span> <span class="o">+</span> <span class="n">fnout</span><span class="p">)</span> + <span class="n">f_handle</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fnout</span><span class="p">,</span> <span class="s1">'wb'</span><span class="p">)</span> + <span class="n">h_handle</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">hnout</span><span class="p">,</span> <span class="s1">'wb'</span><span class="p">)</span> + <span class="n">g_handle</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">gnout</span><span class="p">,</span> <span class="s1">'wb'</span><span class="p">)</span> + + <span class="c1"># read message for message and store relevant data fields, where</span> + <span class="c1"># data keywords are stored in pars</span> + <span class="k">while</span> <span class="kc">True</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">gid</span><span class="p">:</span> + <span class="k">break</span> + <span class="n">parId</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'paramId'</span><span class="p">)</span> <span class="c1"># integer</span> + <span class="n">step</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">)</span> <span class="c1"># integer</span> + <span class="n">time</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">)</span> <span class="c1"># integer</span> + <span class="n">ni</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'Ni'</span><span class="p">)</span> <span class="c1"># integer</span> + <span class="n">nj</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'Nj'</span><span class="p">)</span> <span class="c1"># integer</span> + <span class="k">if</span> <span class="n">parId</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">orig_vals</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> + <span class="c1"># parameter is not a flux, find next one</span> + <span class="k">continue</span> + + <span class="c1"># define conversion factor</span> + <span class="k">if</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span> <span class="ow">or</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">:</span> + <span class="n">fak</span> <span class="o">=</span> <span class="mf">1.</span> <span class="o">/</span> <span class="mf">1000.</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">fak</span> <span class="o">=</span> <span class="mf">3600.</span> + + <span class="c1"># get parameter values and reshape</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">codes_get_values</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + <span class="n">values</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="p">(</span><span class="n">nj</span><span class="p">,</span> <span class="n">ni</span><span class="p">)))</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span> <span class="o">/</span> <span class="n">fak</span> + + <span class="c1"># save the original and accumulated values</span> + <span class="n">orig_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">values</span><span class="p">[:])</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EA'</span> <span class="ow">or</span> <span class="n">step</span> <span class="o"><=</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">):</span> + <span class="c1"># no de-accumulation needed</span> + <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">values</span><span class="p">[:]</span> <span class="o">/</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># do de-accumulation</span> + <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> + <span class="p">(</span><span class="n">orig_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">orig_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span> <span class="o">/</span> + <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + + <span class="c1"># store precipitation if new disaggregation method is selected</span> + <span class="c1"># only the exact days are needed</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span><span class="p">:</span> + <span class="k">if</span> <span class="n">start_date</span> <span class="o"><=</span> <span class="n">t_dt</span> <span class="o"><=</span> <span class="n">end_date</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="k">if</span> <span class="n">t_dt</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">date_list</span><span class="p">:</span> + <span class="n">date_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">t_dt</span><span class="p">)</span> + <span class="n">step_list</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">if</span> <span class="n">t_date</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">date_list</span><span class="p">:</span> + <span class="n">date_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">t_date</span><span class="p">)</span> + <span class="k">if</span> <span class="n">step</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">step_list</span><span class="p">:</span> + <span class="n">step_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">step</span><span class="p">)</span> + <span class="c1"># store precipitation values</span> + <span class="k">if</span> <span class="n">maxnum</span> <span class="ow">and</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span><span class="p">:</span> + <span class="n">lsp_np</span><span class="p">[</span><span class="n">inumb</span><span class="p">,</span> <span class="p">:,</span> <span class="n">it_lsp</span><span class="p">]</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">][:]</span> + <span class="n">it_lsp</span> <span class="o">+=</span> <span class="mi">1</span> + <span class="k">elif</span> <span class="ow">not</span> <span class="n">maxnum</span> <span class="ow">and</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span><span class="p">:</span> + <span class="n">lsp_np</span><span class="p">[:,</span> <span class="n">it_lsp</span><span class="p">]</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">][:]</span> + <span class="n">it_lsp</span> <span class="o">+=</span> <span class="mi">1</span> + <span class="k">elif</span> <span class="n">maxnum</span> <span class="ow">and</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">:</span> + <span class="n">cp_np</span><span class="p">[</span><span class="n">inumb</span><span class="p">,</span> <span class="p">:,</span> <span class="n">it_cp</span><span class="p">]</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">][:]</span> + <span class="n">it_cp</span> <span class="o">+=</span> <span class="mi">1</span> + <span class="k">elif</span> <span class="ow">not</span> <span class="n">maxnum</span> <span class="ow">and</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">:</span> + <span class="n">cp_np</span><span class="p">[:,</span> <span class="n">it_cp</span><span class="p">]</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">][:]</span> + <span class="n">it_cp</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="c1"># information printout</span> + <span class="nb">print</span><span class="p">(</span><span class="n">parId</span><span class="p">,</span> <span class="n">time</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">values</span><span class="p">),</span> <span class="n">values</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">std</span><span class="p">(</span><span class="n">values</span><span class="p">))</span> + + <span class="c1"># length of deac_vals[parId] corresponds to the</span> + <span class="c1"># number of time steps, max. 4 are needed for disaggegration</span> + <span class="c1"># with the old and original method</span> + <span class="c1"># run over all grib messages and perform</span> + <span class="c1"># shifting in time</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])</span> <span class="o">>=</span> <span class="mi">3</span><span class="p">:</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])</span> <span class="o">></span> <span class="mi">3</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span> <span class="ow">and</span> <span class="p">(</span><span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span> <span class="ow">or</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">):</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">darain</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">dapoly</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">step</span> <span class="o">==</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span> \ + <span class="ow">or</span> <span class="n">t_dt</span> <span class="o">==</span> <span class="n">t_enddate</span><span class="p">):</span> + <span class="c1"># remove first time step in list to shift</span> + <span class="c1"># time line</span> + <span class="n">orig_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> + <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># if the third time step is read (per parId),</span> + <span class="c1"># write out the first one as a boundary value</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">rrint</span> <span class="ow">and</span> <span class="p">(</span><span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span> <span class="ow">or</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">)):</span> + <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">step</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">)))</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> <span class="n">t_m2dt</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">)</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">t_m2dt</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)))</span> + + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">f_handle</span><span class="p">)</span> + + <span class="c1"># squeeze out information of last two steps</span> + <span class="c1"># contained in deac_vals[parId]</span> + <span class="c1"># Note that deac_vals[parId][0] has not been popped</span> + <span class="c1"># in this case</span> + + <span class="k">if</span> <span class="n">step</span> <span class="o">==</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span> <span class="ow">or</span> \ + <span class="n">t_dt</span> <span class="o">==</span> <span class="n">t_enddate</span><span class="p">:</span> + <span class="c1"># last step</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span> + <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span> + <span class="c1">#truedatetime = t_m2dt + timedelta(hours=2*int(c.dtime))</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">h_handle</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span> + <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> + <span class="n">truedatetime</span> <span class="o">=</span> <span class="n">t_m2dt</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> <span class="n">truedatetime</span><span class="o">.</span><span class="n">hour</span> <span class="o">*</span> <span class="mi">100</span><span class="p">)</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">truedatetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)))</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">h_handle</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span> <span class="ow">or</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">:</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">darain</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])))</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">dapoly</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])))</span> + + <span class="c1"># step before last step</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="n">step</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + <span class="c1">#truedatetime = t_m2dt + timedelta(hours=int(c.dtime))</span> + <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">g_handle</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> + <span class="n">truedatetime</span> <span class="o">=</span> <span class="n">t_m2dt</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> <span class="n">truedatetime</span><span class="o">.</span><span class="n">hour</span> <span class="o">*</span> <span class="mi">100</span><span class="p">)</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">truedatetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)))</span> + <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">g_handle</span><span class="p">)</span> + + <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> + + <span class="n">f_handle</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + <span class="n">g_handle</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + <span class="n">h_handle</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + + <span class="n">codes_index_release</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_create_rr_grib_dummy</span><span class="p">(</span><span class="n">inputfiles</span><span class="o">.</span><span class="n">files</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">_prep_new_rrint</span><span class="p">(</span><span class="n">dims</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">dims</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">dims</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">lsp_np</span><span class="p">,</span> + <span class="n">cp_np</span><span class="p">,</span> <span class="n">maxnum</span><span class="p">,</span> <span class="n">index_keys</span><span class="p">,</span> <span class="n">index_vals</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> + + <span class="k">return</span></div> + + <span class="k">def</span> <span class="nf">_prep_new_rrint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ni</span><span class="p">,</span> <span class="n">nj</span><span class="p">,</span> <span class="n">nt</span><span class="p">,</span> <span class="n">lsp_np</span><span class="p">,</span> <span class="n">cp_np</span><span class="p">,</span> <span class="n">maxnum</span><span class="p">,</span> <span class="n">index_keys</span><span class="p">,</span> <span class="n">index_vals</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span> + <span class="sd">'''Calculates and writes out the disaggregated precipitation fields.</span> + +<span class="sd"> Disaggregation is done in time and original times are written to the</span> +<span class="sd"> flux files, while the additional subgrid times are written to</span> +<span class="sd"> extra files output files. They are named like the original files with</span> +<span class="sd"> suffixes "_1" and "_2" for the first and second subgrid point.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> ni : int</span> +<span class="sd"> Amount of zonal grid points.</span> + +<span class="sd"> nj : int</span> +<span class="sd"> Amount of meridional grid points.</span> + +<span class="sd"> nt : int</span> +<span class="sd"> Number of time steps.</span> + +<span class="sd"> lsp_np : numpy array of float</span> +<span class="sd"> The large scale precipitation fields for each time step.</span> +<span class="sd"> Shape (ni * nj, nt).</span> + +<span class="sd"> cp_np : numpy array of float</span> +<span class="sd"> The convective precipitation fields for each time step.</span> +<span class="sd"> Shape (ni * nj, nt).</span> + +<span class="sd"> maxnum : int</span> +<span class="sd"> The maximum number of ensemble members. It is None</span> +<span class="sd"> if there are no or just one ensemble.</span> + +<span class="sd"> index_keys : dictionary</span> +<span class="sd"> List of parameter names which serves as index.</span> + +<span class="sd"> index_vals : list of list of str</span> +<span class="sd"> Contains the values from the keys used for a distinct selection</span> +<span class="sd"> of grib messages in processing the grib files.</span> +<span class="sd"> Content looks like e.g.:</span> +<span class="sd"> index_vals[0]: ('20171106', '20171107', '20171108') ; date</span> +<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"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<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="nb">print</span><span class="p">(</span><span class="s1">'... disaggregation of precipitation with new method.'</span><span class="p">)</span> + + <span class="n">tmpfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'rr_grib_dummy.grb'</span><span class="p">)</span> + + <span class="c1"># initialize new numpy arrays for disaggregated fields</span> + <span class="k">if</span> <span class="n">maxnum</span><span class="p">:</span> + <span class="n">lsp_new_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">maxnum</span><span class="p">,</span> <span class="n">ni</span> <span class="o">*</span> <span class="n">nj</span><span class="p">,</span> <span class="n">nt</span> <span class="o">*</span> <span class="mi">3</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> + <span class="n">cp_new_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">maxnum</span><span class="p">,</span> <span class="n">ni</span> <span class="o">*</span> <span class="n">nj</span><span class="p">,</span> <span class="n">nt</span> <span class="o">*</span> <span class="mi">3</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">lsp_new_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span> <span class="n">ni</span> <span class="o">*</span> <span class="n">nj</span><span class="p">,</span> <span class="n">nt</span> <span class="o">*</span> <span class="mi">3</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> + <span class="n">cp_new_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span> <span class="n">ni</span> <span class="o">*</span> <span class="n">nj</span><span class="p">,</span> <span class="n">nt</span> <span class="o">*</span> <span class="mi">3</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> + + <span class="c1"># do the disaggregation, but neglect the last value of the</span> + <span class="c1"># original time series. This one corresponds for example to</span> + <span class="c1"># 24 hour, which we don't need. we use 0 - 23 UTC for a day.</span> + <span class="k">if</span> <span class="n">maxnum</span><span class="p">:</span> + <span class="k">for</span> <span class="n">inum</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">maxnum</span><span class="p">):</span> + <span class="k">for</span> <span class="n">ix</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ni</span><span class="o">*</span><span class="n">nj</span><span class="p">):</span> + <span class="n">lsp_new_np</span><span class="p">[</span><span class="n">inum</span><span class="p">,</span> <span class="n">ix</span><span class="p">,</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">IA3</span><span class="p">(</span><span class="n">lsp_np</span><span class="p">[</span><span class="n">inum</span><span class="p">,</span> <span class="n">ix</span><span class="p">,</span> <span class="p">:])[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> + <span class="n">cp_new_np</span><span class="p">[</span><span class="n">inum</span><span class="p">,</span> <span class="n">ix</span><span class="p">,</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">IA3</span><span class="p">(</span><span class="n">cp_np</span><span class="p">[</span><span class="n">inum</span><span class="p">,</span> <span class="n">ix</span><span class="p">,</span> <span class="p">:])[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">for</span> <span class="n">ix</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ni</span><span class="o">*</span><span class="n">nj</span><span class="p">):</span> + <span class="n">lsp_new_np</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">ix</span><span class="p">,</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">IA3</span><span class="p">(</span><span class="n">lsp_np</span><span class="p">[</span><span class="n">ix</span><span class="p">,</span> <span class="p">:])[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> + <span class="n">cp_new_np</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">ix</span><span class="p">,</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">IA3</span><span class="p">(</span><span class="n">cp_np</span><span class="p">[</span><span class="n">ix</span><span class="p">,</span> <span class="p">:])[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> + + <span class="c1"># write to grib files (full/orig times to flux file and inbetween</span> + <span class="c1"># times with step 1 and 2, respectively)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... write disaggregated precipitation to files.'</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">maxnum</span><span class="p">:</span> + <span class="c1"># remember the index of the number values</span> + <span class="n">index_number</span> <span class="o">=</span> <span class="n">index_keys</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'number'</span><span class="p">)</span> + <span class="c1"># empty set to save unique ensemble numbers which were already processed</span> + <span class="n">ens_numbers</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span> + <span class="c1"># index for the ensemble number</span> + <span class="n">inumb</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">inumb</span> <span class="o">=</span> <span class="mi">0</span> + + <span class="c1"># index variable of disaggregated fields</span> + <span class="n">it</span> <span class="o">=</span> <span class="mi">0</span> + + <span class="c1"># "product" genereates each possible combination between the</span> + <span class="c1"># values of the index keys</span> + <span class="k">for</span> <span class="n">prod</span> <span class="ow">in</span> <span class="n">product</span><span class="p">(</span><span class="o">*</span><span class="n">index_vals</span><span class="p">):</span> + <span class="c1"># e.g. prod = ('20170505', '0', '12')</span> + <span class="c1"># ( date ,time, step)</span> + <span class="c1"># or prod = ('0' , '20170505', '0', '12')</span> + <span class="c1"># (number, date ,time, step)</span> + + <span class="n">cdate</span> <span class="o">=</span> <span class="n">prod</span><span class="p">[</span><span class="n">index_keys</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'date'</span><span class="p">)]</span> + <span class="n">ctime</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">prod</span><span class="p">[</span><span class="n">index_keys</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'time'</span><span class="p">)])</span><span class="o">//</span><span class="mi">100</span><span class="p">)</span> + <span class="n">cstep</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">prod</span><span class="p">[</span><span class="n">index_keys</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'step'</span><span class="p">)]))</span> + + <span class="n">date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">cdate</span> <span class="o">+</span> <span class="n">ctime</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="n">date</span> <span class="o">+=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">cstep</span><span class="p">))</span> + + <span class="n">start_period</span><span class="p">,</span> <span class="n">end_period</span> <span class="o">=</span> <span class="n">generate_retrieval_period_boundary</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> + <span class="c1"># skip all temporary times</span> + <span class="c1"># which are outside the retrieval period</span> + <span class="k">if</span> <span class="n">date</span> <span class="o"><</span> <span class="n">start_period</span> <span class="ow">or</span> \ + <span class="n">date</span> <span class="o">></span> <span class="n">end_period</span><span class="p">:</span> + <span class="k">continue</span> + + <span class="c1"># the whole process has to be done for each seperate ensemble member</span> + <span class="c1"># therefore, for each new ensemble member we delete old flux values</span> + <span class="c1"># and start collecting flux data from the beginning time step</span> + <span class="k">if</span> <span class="n">maxnum</span> <span class="ow">and</span> <span class="n">prod</span><span class="p">[</span><span class="n">index_number</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">ens_numbers</span><span class="p">:</span> + <span class="n">ens_numbers</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">prod</span><span class="p">[</span><span class="n">index_number</span><span class="p">])</span> + <span class="n">inumb</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">prod</span><span class="p">[</span><span class="n">index_number</span><span class="p">])</span> + <span class="n">it</span> <span class="o">=</span> <span class="mi">0</span> + + <span class="c1"># if necessary, add ensemble member number to filename suffix</span> + <span class="c1"># otherwise, add empty string</span> + <span class="k">if</span> <span class="n">maxnum</span><span class="p">:</span> + <span class="n">numbersuffix</span> <span class="o">=</span> <span class="s1">'.N</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">prod</span><span class="p">[</span><span class="n">index_number</span><span class="p">]))</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">numbersuffix</span> <span class="o">=</span> <span class="s1">''</span> + + <span class="c1"># per original time stamp: write original time step and</span> + <span class="c1"># the two newly generated sub time steps</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="n">fluxfilename</span> <span class="o">=</span> <span class="s1">'flux'</span> <span class="o">+</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">.%H'</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'.'</span> <span class="o">+</span> <span class="n">cstep</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">fluxfilename</span> <span class="o">=</span> <span class="s1">'flux'</span> <span class="o">+</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> <span class="o">+</span> <span class="n">numbersuffix</span> + + <span class="c1"># write original time step to flux file as usual</span> + <span class="n">fluxfile</span> <span class="o">=</span> <span class="n">GribUtil</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">fluxfilename</span><span class="p">))</span> + <span class="n">fluxfile</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'ab'</span><span class="p">,</span> + <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">142</span><span class="p">],</span> + <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'perturbationNumber'</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> + <span class="s1">'stepRange'</span><span class="p">,</span> <span class="s1">'values'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="n">inumb</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> + <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">lsp_new_np</span><span class="p">[</span><span class="n">inumb</span><span class="p">,</span> <span class="p">:,</span> <span class="n">it</span><span class="p">]],</span> + <span class="p">)</span> + <span class="n">fluxfile</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'ab'</span><span class="p">,</span> + <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">143</span><span class="p">],</span> + <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'perturbationNumber'</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> + <span class="s1">'stepRange'</span><span class="p">,</span> <span class="s1">'values'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="n">inumb</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> + <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cp_new_np</span><span class="p">[</span><span class="n">inumb</span><span class="p">,</span> <span class="p">:,</span> <span class="n">it</span><span class="p">]]</span> + <span class="p">)</span> + + <span class="c1"># rr for first subgrid point is identified by step = 1</span> + <span class="n">fluxfile</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'ab'</span><span class="p">,</span> + <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">142</span><span class="p">],</span> + <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'perturbationNumber'</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> + <span class="s1">'stepRange'</span><span class="p">,</span> <span class="s1">'values'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="n">inumb</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> + <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="n">lsp_new_np</span><span class="p">[</span><span class="n">inumb</span><span class="p">,</span> <span class="p">:,</span> <span class="n">it</span><span class="o">+</span><span class="mi">1</span><span class="p">]]</span> + <span class="p">)</span> + <span class="n">fluxfile</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'ab'</span><span class="p">,</span> + <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">143</span><span class="p">],</span> + <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'perturbationNumber'</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> + <span class="s1">'stepRange'</span><span class="p">,</span> <span class="s1">'values'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="n">inumb</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> + <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="n">cp_new_np</span><span class="p">[</span><span class="n">inumb</span><span class="p">,</span> <span class="p">:,</span> <span class="n">it</span><span class="o">+</span><span class="mi">1</span><span class="p">]]</span> + <span class="p">)</span> + + <span class="c1"># rr for second subgrid point is identified by step = 2</span> + <span class="n">fluxfile</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'ab'</span><span class="p">,</span> + <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">142</span><span class="p">],</span> + <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'perturbationNumber'</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> + <span class="s1">'stepRange'</span><span class="p">,</span> <span class="s1">'values'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="n">inumb</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> + <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="s1">'2'</span><span class="p">,</span> <span class="n">lsp_new_np</span><span class="p">[</span><span class="n">inumb</span><span class="p">,</span> <span class="p">:,</span> <span class="n">it</span><span class="o">+</span><span class="mi">2</span><span class="p">]]</span> + <span class="p">)</span> + <span class="n">fluxfile</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'ab'</span><span class="p">,</span> + <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">143</span><span class="p">],</span> + <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'perturbationNumber'</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> + <span class="s1">'stepRange'</span><span class="p">,</span> <span class="s1">'values'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="n">inumb</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> + <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="s1">'2'</span><span class="p">,</span> <span class="n">cp_new_np</span><span class="p">[</span><span class="n">inumb</span><span class="p">,</span> <span class="p">:,</span> <span class="n">it</span><span class="o">+</span><span class="mi">2</span><span class="p">]]</span> + <span class="p">)</span> + + <span class="n">it</span> <span class="o">=</span> <span class="n">it</span> <span class="o">+</span> <span class="mi">3</span> <span class="c1"># jump to next original time step in rr fields</span> + <span class="k">return</span> + + <span class="k">def</span> <span class="nf">_create_rr_grib_dummy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ifile</span><span class="p">,</span> <span class="n">inputdir</span><span class="p">):</span> + <span class="sd">'''Creates a grib file with a dummy message for the two precipitation</span> +<span class="sd"> types lsp and cp each.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> ifile : str</span> +<span class="sd"> Filename of the input file to read the grib messages from.</span> + +<span class="sd"> inputdir : str, optional</span> +<span class="sd"> Path to the directory where the retrieved data is stored.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="n">gribfile</span> <span class="o">=</span> <span class="n">GribUtil</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'rr_grib_dummy.grb'</span><span class="p">))</span> + + <span class="n">gribfile</span><span class="o">.</span><span class="n">copy_dummy_msg</span><span class="p">(</span><span class="n">ifile</span><span class="p">,</span> <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">142</span><span class="p">],</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'wb'</span><span class="p">)</span> + + <span class="n">gribfile</span><span class="o">.</span><span class="n">copy_dummy_msg</span><span class="p">(</span><span class="n">ifile</span><span class="p">,</span> <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">143</span><span class="p">],</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'ab'</span><span class="p">)</span> + + <span class="k">return</span> + +<div class="viewcode-block" id="EcFlexpart.create"><a class="viewcode-back" href="../Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.create">[docs]</a> <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inputfiles</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span> + <span class="sd">'''An index file will be created which depends on the combination</span> +<span class="sd"> of "date", "time" and "stepRange" values. This is used to iterate</span> +<span class="sd"> over all messages in each grib file which were passed through the</span> +<span class="sd"> parameter "inputfiles" to seperate specific parameters into fort.*</span> +<span class="sd"> files. Afterwards the FORTRAN program is called to convert</span> +<span class="sd"> the data fields all to the same grid and put them in one file</span> +<span class="sd"> per unique time step (combination of "date", "time" and</span> +<span class="sd"> "stepRange").</span> + +<span class="sd"> Note</span> +<span class="sd"> ----</span> +<span class="sd"> This method is based on the ECMWF example index.py</span> +<span class="sd"> https://software.ecmwf.int/wiki/display/GRIB/index.py</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> inputfiles : UioFiles</span> +<span class="sd"> Contains a list of files.</span> + +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> Return</span> +<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="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> + + <span class="c1"># generate start and end timestamp of the retrieval period</span> + <span class="n">start_period</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="n">start_period</span> <span class="o">=</span> <span class="n">start_period</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> + <span class="n">end_period</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="n">end_period</span> <span class="o">=</span> <span class="n">end_period</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span> + + <span class="c1"># @WRF</span> + <span class="c1"># THIS IS NOT YET CORRECTLY IMPLEMENTED !!!</span> + <span class="c1">#</span> + <span class="c1"># UNDER CONSTRUCTION !!!</span> + <span class="c1">#</span> + <span class="c1">#if c.wrf:</span> + <span class="c1"># table128 = init128(_config.PATH_GRIBTABLE)</span> + <span class="c1"># wrfpars = to_param_id('sp/mslp/skt/2t/10u/10v/2d/z/lsm/sst/ci/sd/\</span> + <span class="c1"># stl1/stl2/stl3/stl4/swvl1/swvl2/swvl3/swvl4',</span> + <span class="c1"># table128)</span> + + <span class="c1"># these numbers are indices for the temporary files "fort.xx"</span> + <span class="c1"># which are used to seperate the grib fields to,</span> + <span class="c1"># for the Fortran program input</span> + <span class="c1"># 10: U,V | 11: T | 12: lnsp | 13: D | 16: sfc fields</span> + <span class="c1"># 17: Q | 18: Q, SL, GG| 19: omega | 21: etadot | 22: clwc+ciwc</span> + <span class="n">fdict</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'10'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'11'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'12'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'13'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'16'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> + <span class="s1">'17'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'18'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'19'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'21'</span><span class="p">:</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'22'</span><span class="p">:</span><span class="kc">None</span><span class="p">}</span> + + <span class="n">iid</span> <span class="o">=</span> <span class="kc">None</span> + <span class="n">index_vals</span> <span class="o">=</span> <span class="kc">None</span> + + <span class="c1"># get the values of the keys which are used for distinct access</span> + <span class="c1"># of grib messages via product</span> + <span class="k">if</span> <span class="s1">'/'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">number</span><span class="p">:</span> + <span class="c1"># more than one ensemble member is selected</span> + <span class="n">index_keys</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"number"</span><span class="p">,</span> <span class="s2">"date"</span><span class="p">,</span> <span class="s2">"time"</span><span class="p">,</span> <span class="s2">"step"</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">index_keys</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"date"</span><span class="p">,</span> <span class="s2">"time"</span><span class="p">,</span> <span class="s2">"step"</span><span class="p">]</span> + <span class="n">iid</span><span class="p">,</span> <span class="n">index_vals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mk_index_values</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> + <span class="n">inputfiles</span><span class="p">,</span> + <span class="n">index_keys</span><span class="p">)</span> + <span class="c1"># index_vals looks like e.g.:</span> + <span class="c1"># index_vals[0]: ('20171106', '20171107', '20171108') ; date</span> + <span class="c1"># index_vals[1]: ('0', '600', '1200', '1800') ; time</span> + <span class="c1"># index_vals[2]: ('0', '12', '3', '6', '9') ; stepRange</span> + + <span class="c1"># "product" genereates each possible combination between the</span> + <span class="c1"># values of the index keys</span> + <span class="k">for</span> <span class="n">prod</span> <span class="ow">in</span> <span class="n">product</span><span class="p">(</span><span class="o">*</span><span class="n">index_vals</span><span class="p">):</span> + <span class="c1"># e.g. prod = ('20170505', '0', '12')</span> + <span class="c1"># ( date ,time, step)</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'current product: '</span><span class="p">,</span> <span class="n">prod</span><span class="p">)</span> + + <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">index_keys</span><span class="p">)):</span> + <span class="n">codes_index_select</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">index_keys</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">prod</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> + + <span class="c1"># get first id from current product</span> + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> + + <span class="c1"># if there is no data for this specific time combination / product</span> + <span class="c1"># skip the rest of the for loop and start with next timestep/product</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">gid</span><span class="p">:</span> + <span class="k">continue</span> +<span class="c1">#============================================================================================</span> + <span class="c1"># remove old fort.* files and open new ones</span> + <span class="c1"># they are just valid for a single product</span> + <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fdict</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> + <span class="n">fortfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'fort.'</span> <span class="o">+</span> <span class="n">k</span><span class="p">)</span> + <span class="n">silent_remove</span><span class="p">(</span><span class="n">fortfile</span><span class="p">)</span> + <span class="n">fdict</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fortfile</span><span class="p">,</span> <span class="s1">'wb'</span><span class="p">)</span> +<span class="c1">#============================================================================================</span> + <span class="c1"># create correct timestamp from the three time informations</span> + <span class="n">cdate</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">))</span> + <span class="n">ctime</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">)</span> <span class="o">//</span> <span class="mi">100</span><span class="p">)</span> + <span class="n">cstep</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">))</span> + <span class="n">timestamp</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">cdate</span> <span class="o">+</span> <span class="n">ctime</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="n">timestamp</span> <span class="o">+=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">cstep</span><span class="p">))</span> + <span class="n">cdate_hour</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">timestamp</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + + <span class="c1"># if basetime is used, adapt start/end date period</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">time_delta</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">12</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + <span class="n">start_period</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">basetime</span><span class="p">),</span> + <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> <span class="o">-</span> <span class="n">time_delta</span> + <span class="n">end_period</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">basetime</span><span class="p">),</span> + <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + + <span class="c1"># skip all temporary times</span> + <span class="c1"># which are outside the retrieval period</span> + <span class="k">if</span> <span class="n">timestamp</span> <span class="o"><</span> <span class="n">start_period</span> <span class="ow">or</span> \ + <span class="n">timestamp</span> <span class="o">></span> <span class="n">end_period</span><span class="p">:</span> + <span class="k">continue</span> + + + <span class="c1"># @WRF</span> + <span class="c1"># THIS IS NOT YET CORRECTLY IMPLEMENTED !!!</span> + <span class="c1">#</span> + <span class="c1"># UNDER CONSTRUCTION !!!</span> + <span class="c1">#</span> + <span class="c1">#if c.wrf:</span> + <span class="c1"># if 'olddate' not in locals() or cdate != olddate:</span> + <span class="c1"># fwrf = open(os.path.join(c.outputdir,</span> + <span class="c1"># 'WRF' + cdate + '.' + ctime + '.000.grb2'), 'wb')</span> + <span class="c1"># olddate = cdate[:]</span> +<span class="c1">#============================================================================================</span> + <span class="c1"># savedfields remembers which fields were already used.</span> + <span class="n">savedfields</span> <span class="o">=</span> <span class="p">[]</span> + <span class="c1"># sum of cloud liquid and ice water content</span> + <span class="n">scwc</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">while</span> <span class="mi">1</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">gid</span><span class="p">:</span> + <span class="k">break</span> + <span class="n">paramId</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'paramId'</span><span class="p">)</span> + <span class="n">gridtype</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'gridType'</span><span class="p">)</span> + <span class="k">if</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">77</span><span class="p">:</span> <span class="c1"># ETADOT</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'21'</span><span class="p">])</span> + <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">130</span><span class="p">:</span> <span class="c1"># T</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'11'</span><span class="p">])</span> + <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">131</span> <span class="ow">or</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">132</span><span class="p">:</span> <span class="c1"># U, V wind component</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'10'</span><span class="p">])</span> + <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">133</span> <span class="ow">and</span> <span class="n">gridtype</span> <span class="o">!=</span> <span class="s1">'reduced_gg'</span><span class="p">:</span> <span class="c1"># Q</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'17'</span><span class="p">])</span> + <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">133</span> <span class="ow">and</span> <span class="n">gridtype</span> <span class="o">==</span> <span class="s1">'reduced_gg'</span><span class="p">:</span> <span class="c1"># Q, gaussian</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'18'</span><span class="p">])</span> + <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">135</span><span class="p">:</span> <span class="c1"># W</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'19'</span><span class="p">])</span> + <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">152</span><span class="p">:</span> <span class="c1"># LNSP</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'12'</span><span class="p">])</span> + <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">155</span> <span class="ow">and</span> <span class="n">gridtype</span> <span class="o">==</span> <span class="s1">'sh'</span><span class="p">:</span> <span class="c1"># D</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'13'</span><span class="p">])</span> + <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">246</span> <span class="ow">or</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">247</span><span class="p">:</span> <span class="c1"># CLWC, CIWC</span> + <span class="c1"># sum cloud liquid water and ice</span> + <span class="k">if</span> <span class="n">scwc</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">scwc</span> <span class="o">=</span> <span class="n">codes_get_values</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">scwc</span> <span class="o">+=</span> <span class="n">codes_get_values</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">scwc</span><span class="p">)</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'paramId'</span><span class="p">,</span> <span class="mi">201031</span><span class="p">)</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'22'</span><span class="p">])</span> + <span class="n">scwc</span> <span class="o">=</span> <span class="kc">None</span> + <span class="c1"># @WRF</span> + <span class="c1"># THIS IS NOT YET CORRECTLY IMPLEMENTED !!!</span> + <span class="c1">#</span> + <span class="c1"># UNDER CONSTRUCTION !!!</span> + <span class="c1">#</span> + <span class="c1">#elif c.wrf and paramId in [129, 138, 155] and \</span> + <span class="c1"># levtype == 'hybrid': # Z, VO, D</span> + <span class="c1"># # do not do anything right now</span> + <span class="c1"># # these are specific parameter for WRF</span> + <span class="c1"># pass</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">if</span> <span class="n">paramId</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">savedfields</span><span class="p">:</span> + <span class="c1"># SD/MSL/TCC/10U/10V/2T/2D/Z/LSM/SDOR/CVL/CVH/SR</span> + <span class="c1"># and all ADDPAR parameter</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'16'</span><span class="p">])</span> + <span class="n">savedfields</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">paramId</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'duplicate '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">paramId</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' not written'</span><span class="p">)</span> + <span class="c1"># @WRF</span> + <span class="c1"># THIS IS NOT YET CORRECTLY IMPLEMENTED !!!</span> + <span class="c1">#</span> + <span class="c1"># UNDER CONSTRUCTION !!!</span> + <span class="c1">#</span> + <span class="c1">#try:</span> + <span class="c1"># if c.wrf:</span> + <span class="c1"># # model layer</span> + <span class="c1"># if levtype == 'hybrid' and \</span> + <span class="c1"># paramId in [129, 130, 131, 132, 133, 138, 155]:</span> + <span class="c1"># codes_write(gid, fwrf)</span> + <span class="c1"># # sfc layer</span> + <span class="c1"># elif paramId in wrfpars:</span> + <span class="c1"># codes_write(gid, fwrf)</span> + <span class="c1">#except AttributeError:</span> + <span class="c1"># pass</span> + + <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> +<span class="c1">#============================================================================================</span> + <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fdict</span><span class="o">.</span><span class="n">values</span><span class="p">():</span> + <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +<span class="c1">#============================================================================================</span> + <span class="c1"># call for Fortran program to convert e.g. reduced_gg grids to</span> + <span class="c1"># regular_ll and calculate detadot/dp</span> + <span class="n">pwd</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">()</span> + <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="s1">'fort.21'</span><span class="p">)</span><span class="o">.</span><span class="n">st_size</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">eta</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Parameter 77 (etadot) is missing, most likely it is '</span> + <span class="s1">'not available for this type or date / time</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Check parameters CLASS, TYPE, STREAM, START_DATE</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> + <span class="n">my_error</span><span class="p">(</span><span class="s1">'fort.21 is empty while parameter eta '</span> + <span class="s1">'is set to 1 in CONTROL file'</span><span class="p">)</span> +<span class="c1"># ============================================================================================</span> + <span class="c1"># write out all output to log file before starting fortran programm</span> + <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span> + + <span class="c1"># Fortran program creates file fort.15 (with u,v,etadot,t,sp,q)</span> + <span class="n">execute_subprocess</span><span class="p">([</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">exedir</span><span class="p">,</span> + <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span><span class="p">)],</span> + <span class="n">error_msg</span><span class="o">=</span><span class="s1">'FORTRAN PROGRAM FAILED!'</span><span class="p">)</span><span class="c1">#shell=True)</span> + + <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">pwd</span><span class="p">)</span> +<span class="c1"># ============================================================================================</span> + <span class="c1"># create name of final output file, e.g. EN13040500 (ENYYMMDDHH)</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="n">suffix</span> <span class="o">=</span> <span class="n">cdate</span><span class="p">[</span><span class="mi">2</span><span class="p">:</span><span class="mi">8</span><span class="p">]</span> <span class="o">+</span> <span class="s1">'.'</span> <span class="o">+</span> <span class="n">ctime</span> <span class="o">+</span> <span class="s1">'.'</span> <span class="o">+</span> <span class="n">cstep</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">suffix</span> <span class="o">=</span> <span class="n">cdate_hour</span><span class="p">[</span><span class="mi">2</span><span class="p">:</span><span class="mi">10</span><span class="p">]</span> + + <span class="c1"># if necessary, add ensemble member number to filename suffix</span> + <span class="k">if</span> <span class="s1">'number'</span> <span class="ow">in</span> <span class="n">index_keys</span><span class="p">:</span> + <span class="n">index_number</span> <span class="o">=</span> <span class="n">index_keys</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'number'</span><span class="p">)</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="n">index_number</span><span class="p">])</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> + <span class="n">suffix</span> <span class="o">=</span> <span class="n">suffix</span> <span class="o">+</span> <span class="s1">'.N</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">prod</span><span class="p">[</span><span class="n">index_number</span><span class="p">]))</span> + + <span class="n">fnout</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">suffix</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"outputfile = "</span> <span class="o">+</span> <span class="n">fnout</span><span class="p">)</span> + <span class="c1"># collect for final processing</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">fnout</span><span class="p">))</span> + <span class="c1"># # get additional precipitation subgrid data if available</span> + <span class="c1"># if c.rrint:</span> + <span class="c1"># self.outputfilelist.append(os.path.basename(fnout + '_1'))</span> + <span class="c1"># self.outputfilelist.append(os.path.basename(fnout + '_2'))</span> +<span class="c1"># ============================================================================================</span> + <span class="c1"># create outputfile and copy all data from intermediate files</span> + <span class="c1"># to the outputfile (final GRIB input files for FLEXPART)</span> + <span class="n">orolsm</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">basename</span><span class="p">(</span><span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">+</span> + <span class="s1">'/OG_OROLSM__SL.*.'</span> <span class="o">+</span> + <span class="n">c</span><span class="o">.</span><span class="n">ppid</span> <span class="o">+</span> + <span class="s1">'*'</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span> + <span class="n">fluxfile</span> <span class="o">=</span> <span class="s1">'flux'</span> <span class="o">+</span> <span class="n">cdate</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="n">suffix</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">cwc</span><span class="p">:</span> + <span class="n">flist</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'fort.15'</span><span class="p">,</span> <span class="n">fluxfile</span><span class="p">,</span> <span class="s1">'fort.16'</span><span class="p">,</span> <span class="n">orolsm</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">flist</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'fort.15'</span><span class="p">,</span> <span class="s1">'fort.22'</span><span class="p">,</span> <span class="n">fluxfile</span><span class="p">,</span> <span class="s1">'fort.16'</span><span class="p">,</span> <span class="n">orolsm</span><span class="p">]</span> + + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">fnout</span><span class="p">,</span> <span class="s1">'wb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">fout</span><span class="p">:</span> + <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">flist</span><span class="p">:</span> + <span class="n">shutil</span><span class="o">.</span><span class="n">copyfileobj</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">f</span><span class="p">),</span> <span class="s1">'rb'</span><span class="p">),</span> + <span class="n">fout</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">omega</span><span class="p">:</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">outputdir</span><span class="p">,</span> <span class="s1">'OMEGA'</span><span class="p">),</span> <span class="s1">'wb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">fout</span><span class="p">:</span> + <span class="n">shutil</span><span class="o">.</span><span class="n">copyfileobj</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'fort.25'</span><span class="p">),</span> + <span class="s1">'rb'</span><span class="p">),</span> <span class="n">fout</span><span class="p">)</span> +<span class="c1"># ============================================================================================</span> + + <span class="c1"># @WRF</span> + <span class="c1"># THIS IS NOT YET CORRECTLY IMPLEMENTED !!!</span> + <span class="c1">#</span> + <span class="c1"># UNDER CONSTRUCTION !!!</span> + <span class="c1">#</span> + <span class="c1">#if c.wrf:</span> + <span class="c1"># fwrf.close()</span> + + <span class="n">codes_index_release</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="EcFlexpart.calc_extra_elda"><a class="viewcode-back" href="../Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.calc_extra_elda">[docs]</a> <span class="k">def</span> <span class="nf">calc_extra_elda</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">prefix</span><span class="p">):</span> + <span class="sd">''' Calculates extra ensemble members for ELDA - Stream.</span> + +<span class="sd"> This is a specific feature which doubles the number of ensemble members</span> +<span class="sd"> for the ELDA Stream.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> path : str</span> +<span class="sd"> Path to the output files.</span> + +<span class="sd"> prefix : str</span> +<span class="sd"> The prefix of the output filenames as defined in Control file.</span> + +<span class="sd"> Return</span> +<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="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> + + <span class="c1"># max number</span> + <span class="n">maxnum</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">number</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="c1"># get a list of all prepared output files with control forecast (CF)</span> + <span class="n">cf_filelist</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">prefix</span> <span class="o">+</span> <span class="s1">'*.N000'</span><span class="p">)</span> + <span class="n">cf_filelist</span><span class="o">.</span><span class="n">files</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">cf_filelist</span><span class="o">.</span><span class="n">files</span><span class="p">)</span> + + <span class="k">for</span> <span class="n">cffile</span> <span class="ow">in</span> <span class="n">cf_filelist</span><span class="o">.</span><span class="n">files</span><span class="p">:</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">cffile</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">cfvalues</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">while</span> <span class="kc">True</span><span class="p">:</span> + <span class="n">fid</span> <span class="o">=</span> <span class="n">codes_grib_new_from_file</span><span class="p">(</span><span class="n">f</span><span class="p">)</span> + <span class="k">if</span> <span class="n">fid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> + <span class="k">break</span> + <span class="n">cfvalues</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">codes_get_array</span><span class="p">(</span><span class="n">fid</span><span class="p">,</span> <span class="s1">'values'</span><span class="p">))</span> + <span class="n">codes_release</span><span class="p">(</span><span class="n">fid</span><span class="p">)</span> + + <span class="n">filename</span> <span class="o">=</span> <span class="n">cffile</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'N000'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> + <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">maxnum</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span> + <span class="c1"># read an ensemble member</span> + <span class="n">g</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span> <span class="o">+</span> <span class="s1">'N</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">),</span> <span class="s1">'rb'</span><span class="p">)</span> + <span class="c1"># create file for newly calculated ensemble member</span> + <span class="n">h</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span> <span class="o">+</span> <span class="s1">'N</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="n">maxnum</span><span class="p">),</span> <span class="s1">'wb'</span><span class="p">)</span> + <span class="c1"># number of message in grib file</span> + <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">while</span> <span class="kc">True</span><span class="p">:</span> + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_grib_new_from_file</span><span class="p">(</span><span class="n">g</span><span class="p">)</span> + <span class="k">if</span> <span class="n">gid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> + <span class="k">break</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">codes_get_array</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'values'</span><span class="p">)</span> + <span class="c1"># generate a new ensemble member by subtracting</span> + <span class="c1"># 2 * ( current time step value - last time step value )</span> + <span class="n">codes_set_array</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'values'</span><span class="p">,</span> + <span class="n">values</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="p">(</span><span class="n">values</span><span class="o">-</span><span class="n">cfvalues</span><span class="p">[</span><span class="n">j</span><span class="p">]))</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'number'</span><span class="p">,</span> <span class="n">i</span><span class="o">+</span><span class="n">maxnum</span><span class="p">)</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">h</span><span class="p">)</span> + <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + <span class="n">j</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="n">g</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + <span class="n">h</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'wrote '</span> <span class="o">+</span> <span class="n">filename</span> <span class="o">+</span> <span class="s1">'N</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="n">maxnum</span><span class="p">))</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">filename</span> <span class="o">+</span> <span class="s1">'N</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="n">maxnum</span><span class="p">)))</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="EcFlexpart.process_output"><a class="viewcode-back" href="../Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.process_output">[docs]</a> <span class="k">def</span> <span class="nf">process_output</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span> + <span class="sd">'''Postprocessing of FLEXPART input files.</span> + +<span class="sd"> The grib files are postprocessed depending on the selection in</span> +<span class="sd"> CONTROL file. The resulting files are moved to the output</span> +<span class="sd"> directory if its not equal to the input directory.</span> +<span class="sd"> The following modifications might be done if</span> +<span class="sd"> properly switched in CONTROL file:</span> +<span class="sd"> GRIB2 - Conversion to GRIB2</span> +<span class="sd"> ECTRANS - Transfer of files to gateway server</span> +<span class="sd"> ECSTORAGE - Storage at ECMWF server</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n\n</span><span class="s1">Postprocessing:</span><span class="se">\n</span><span class="s1"> Format: </span><span class="si">{}</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">format</span><span class="p">))</span> + + <span class="k">if</span> <span class="n">_config</span><span class="o">.</span><span class="n">FLAG_ON_ECMWFSERVER</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'ecstorage: </span><span class="si">{}</span><span class="se">\n</span><span class="s1"> ecfsdir: </span><span class="si">{}</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span> + <span class="nb">format</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecstorage</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecfsdir</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'ectrans: </span><span class="si">{}</span><span class="se">\n</span><span class="s1"> gateway: </span><span class="si">{}</span><span class="se">\n</span><span class="s1"> destination: </span><span class="si">{}</span><span class="se">\n</span><span class="s1"> '</span> + <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ectrans</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">gateway</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">))</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'Output filelist: '</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span><span class="p">))</span> + + <span class="k">for</span> <span class="n">ofile</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span><span class="p">:</span> + <span class="n">ofile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">ofile</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">format</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'grib2'</span><span class="p">:</span> + <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'grib_set'</span><span class="p">,</span> <span class="s1">'-s'</span><span class="p">,</span> <span class="s1">'edition=2,'</span> <span class="o">+</span> + <span class="s1">'productDefinitionTemplateNumber=8'</span><span class="p">,</span> + <span class="n">ofile</span><span class="p">,</span> <span class="n">ofile</span> <span class="o">+</span> <span class="s1">'_2'</span><span class="p">],</span> + <span class="n">error_msg</span><span class="o">=</span><span class="s1">'GRIB2 CONVERSION FAILED!'</span><span class="p">)</span> + + <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'mv'</span><span class="p">,</span> <span class="n">ofile</span> <span class="o">+</span> <span class="s1">'_2'</span><span class="p">,</span> <span class="n">ofile</span><span class="p">],</span> + <span class="n">error_msg</span><span class="o">=</span><span class="s1">'RENAMING FOR NEW GRIB2 FORMAT '</span> + <span class="s1">'FILES FAILED!'</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">ectrans</span> <span class="ow">and</span> <span class="n">_config</span><span class="o">.</span><span class="n">FLAG_ON_ECMWFSERVER</span><span class="p">:</span> + <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'ectrans'</span><span class="p">,</span> <span class="s1">'-overwrite'</span><span class="p">,</span> <span class="s1">'-gateway'</span><span class="p">,</span> + <span class="n">c</span><span class="o">.</span><span class="n">gateway</span><span class="p">,</span> <span class="s1">'-remote'</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span> + <span class="s1">'-source'</span><span class="p">,</span> <span class="n">ofile</span><span class="p">],</span> + <span class="n">error_msg</span><span class="o">=</span><span class="s1">'TRANSFER TO LOCAL SERVER FAILED!'</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">ecstorage</span> <span class="ow">and</span> <span class="n">_config</span><span class="o">.</span><span class="n">FLAG_ON_ECMWFSERVER</span><span class="p">:</span> + <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'ecp'</span><span class="p">,</span> <span class="s1">'-o'</span><span class="p">,</span> <span class="n">ofile</span><span class="p">,</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecfsdir</span><span class="p">)],</span> + <span class="n">error_msg</span><span class="o">=</span><span class="s1">'COPY OF FILES TO ECSTORAGE '</span> + <span class="s1">'AREA FAILED!'</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">outputdir</span> <span class="o">!=</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">:</span> + <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'mv'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">ofile</span><span class="p">),</span> + <span class="n">c</span><span class="o">.</span><span class="n">outputdir</span><span class="p">],</span> + <span class="n">error_msg</span><span class="o">=</span><span class="s1">'RELOCATION OF OUTPUT FILES '</span> + <span class="s1">'TO OUTPUTDIR FAILED!'</span><span class="p">)</span> + + <span class="k">return</span></div></div> +</pre></div> + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/_modules/GribUtil.html b/Documentation/html/_modules/GribUtil.html new file mode 100644 index 0000000000000000000000000000000000000000..e1fc92c08ed39c34700f270259c4e80e539ff302 --- /dev/null +++ b/Documentation/html/_modules/GribUtil.html @@ -0,0 +1,512 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>GribUtil — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="index.html">Module code</a> »</li> + + <li>GribUtil</li> + + + <li class="wy-breadcrumbs-aside"> + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for GribUtil</h1><div class="highlight"><pre> +<span></span><span class="ch">#!/usr/bin/env python3</span> +<span class="c1"># -*- coding: utf-8 -*-</span> +<span class="c1">#*******************************************************************************</span> +<span class="c1"># @Author: Anne Fouilloux (University of Oslo)</span> +<span class="c1">#</span> +<span class="c1"># @Date: July 2014</span> +<span class="c1">#</span> +<span class="c1"># @Change History:</span> +<span class="c1"># February 2018 - Anne Philipp (University of Vienna):</span> +<span class="c1"># - applied PEP8 style guide</span> +<span class="c1"># - added documentation</span> +<span class="c1"># - changed some naming</span> +<span class="c1">#</span> +<span class="c1"># @License:</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> +<span class="c1">#</span> +<span class="c1"># SPDX-License-Identifier: CC-BY-4.0</span> +<span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> +<span class="c1">#*******************************************************************************</span> + +<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">import</span> <span class="nn">os</span> + +<span class="c1"># ------------------------------------------------------------------------------</span> +<span class="c1"># CLASS</span> +<span class="c1"># ------------------------------------------------------------------------------</span> +<div class="viewcode-block" id="GribUtil"><a class="viewcode-back" href="../Documentation/Api/api_python.html#GribUtil.GribUtil">[docs]</a><span class="k">class</span> <span class="nc">GribUtil</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">'''</span> +<span class="sd"> Class for GRIB utilities (new methods) based on GRIB API</span> + +<span class="sd"> The GRIB API provides all necessary tools to work directly with the</span> +<span class="sd"> grib files. Nevertheless, the GRIB API tools are very basic and are in</span> +<span class="sd"> direct connection with the grib files. This class provides some higher</span> +<span class="sd"> functions which apply a set of GRIB API tools together in the respective</span> +<span class="sd"> context. So, the class initially contains a list of grib files (their</span> +<span class="sd"> names) and the using program then applies the methods directly on the</span> +<span class="sd"> class objects without having to think about how the actual GRIB API</span> +<span class="sd"> tools have to be arranged.</span> +<span class="sd"> '''</span> + <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="sd">'''Initialise an object of GribUtil and assign a list of filenames.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filenames : :obj:`list` of :obj:`strings`</span> +<span class="sd"> A list of filenames.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">filenames</span> <span class="o">=</span> <span class="n">filenames</span> + + <span class="k">return</span> + + +<div class="viewcode-block" id="GribUtil.get_keys"><a class="viewcode-back" href="../Documentation/Api/api_python.html#GribUtil.GribUtil.get_keys">[docs]</a> <span class="k">def</span> <span class="nf">get_keys</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">keynames</span><span class="p">,</span> <span class="n">wherekeynames</span><span class="p">,</span> <span class="n">wherekeyvalues</span><span class="p">):</span> + <span class="sd">'''Get keyvalues for a given list of keynames a where statement</span> +<span class="sd"> can be given (list of key and list of values)</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> keynames : :obj:`list` of :obj:`string`</span> +<span class="sd"> List of keynames.</span> + +<span class="sd"> wherekeynames : :obj:`list` of :obj:`string`</span> +<span class="sd"> List of key names for indexing grib message parameter.</span> + +<span class="sd"> wherekeyvalues : :obj:`list` of :obj:`string`</span> +<span class="sd"> List of key values corresponding the key names.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<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="n">codes_release</span><span class="p">)</span> + + <span class="n">return_list</span> <span class="o">=</span> <span class="p">[]</span> + + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filenames</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">fileid</span><span class="p">:</span> + + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_new_from_file</span><span class="p">(</span><span class="n">fileid</span><span class="p">)</span> + + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">wherekeynames</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">wherekeyvalues</span><span class="p">):</span> + <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Number of key values and key names must be </span><span class="se">\</span> +<span class="s2"> the same. Give a value for each keyname!"</span><span class="p">)</span> + + <span class="n">select</span> <span class="o">=</span> <span class="kc">True</span> + <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">for</span> <span class="n">wherekey</span> <span class="ow">in</span> <span class="n">wherekeynames</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">codes_is_defined</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">wherekey</span><span class="p">):</span> + <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"where key was not defined"</span><span class="p">)</span> + + <span class="n">select</span> <span class="o">=</span> <span class="p">(</span><span class="n">select</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">wherekeyvalues</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">==</span> + <span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">wherekey</span><span class="p">))))</span> + <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="k">if</span> <span class="n">select</span><span class="p">:</span> + <span class="n">llist</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keynames</span><span class="p">:</span> + <span class="n">llist</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">key</span><span class="p">))])</span> + <span class="n">return_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">llist</span><span class="p">)</span> + + <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">return_list</span></div> + + +<div class="viewcode-block" id="GribUtil.set_keys"><a class="viewcode-back" href="../Documentation/Api/api_python.html#GribUtil.GribUtil.set_keys">[docs]</a> <span class="k">def</span> <span class="nf">set_keys</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fromfile</span><span class="p">,</span> <span class="n">keynames</span><span class="p">,</span> <span class="n">keyvalues</span><span class="p">,</span> <span class="n">wherekeynames</span><span class="p">,</span> + <span class="n">wherekeyvalues</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'wb'</span><span class="p">):</span> + <span class="sd">'''Opens the file to read the grib messages and then write</span> +<span class="sd"> the selected messages (with wherekeys) to a new output file.</span> +<span class="sd"> Also, the keyvalues of the passed list of keynames are set.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> fromfile : :obj:`string`</span> +<span class="sd"> Filename of the input file to read the grib messages from.</span> + +<span class="sd"> keynames : :obj:`list` of :obj:`string`</span> +<span class="sd"> List of keynames to set in the selected messages.</span> +<span class="sd"> Default is an empty list.</span> + +<span class="sd"> keyvalues : :obj:`list` of :obj:`string`</span> +<span class="sd"> List of keyvalues to set in the selected messages.</span> +<span class="sd"> Default is an empty list.</span> + +<span class="sd"> wherekeynames : :obj:`list` of :obj:`string`</span> +<span class="sd"> List of keynames to select correct message.</span> + +<span class="sd"> wherekeyvalues : :obj:`list` of :obj:`string`</span> +<span class="sd"> List of keyvalues for keynames to select correct message.</span> + +<span class="sd"> filemode : :obj:`string`, optional</span> +<span class="sd"> Sets the mode for the output file. Default is "wb".</span> + +<span class="sd"> Return</span> +<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="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> + + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">wherekeynames</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">wherekeyvalues</span><span class="p">):</span> + <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Give a value for each keyname!"</span><span class="p">)</span> + + <span class="n">fout</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filenames</span><span class="p">,</span> <span class="n">filemode</span><span class="p">)</span> + + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">fromfile</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">fin</span><span class="p">:</span> + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_grib_new_from_file</span><span class="p">(</span><span class="n">fin</span><span class="p">)</span> + + <span class="n">select</span> <span class="o">=</span> <span class="kc">True</span> + <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">for</span> <span class="n">wherekey</span> <span class="ow">in</span> <span class="n">wherekeynames</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">codes_is_defined</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">wherekey</span><span class="p">):</span> + <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"wherekey was not defined"</span><span class="p">)</span> + + <span class="n">select</span> <span class="o">=</span> <span class="p">(</span><span class="n">select</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">wherekeyvalues</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">==</span> + <span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">wherekey</span><span class="p">))))</span> + <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="k">if</span> <span class="n">select</span><span class="p">:</span> + <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keynames</span><span class="p">:</span> + <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s1">'values'</span><span class="p">:</span> + <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">keyvalues</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">keyvalues</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> + <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fout</span><span class="p">)</span> + + <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + + <span class="n">fout</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="GribUtil.copy_dummy_msg"><a class="viewcode-back" href="../Documentation/Api/api_python.html#GribUtil.GribUtil.copy_dummy_msg">[docs]</a> <span class="k">def</span> <span class="nf">copy_dummy_msg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename_in</span><span class="p">,</span> <span class="n">keynames</span><span class="p">,</span> <span class="n">keyvalues</span><span class="p">,</span> + <span class="n">selectwhere</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'wb'</span><span class="p">):</span> + <span class="sd">'''Add the content of another input grib file to the objects file but</span> +<span class="sd"> only messages corresponding to keys/values passed to the function.</span> +<span class="sd"> The selectWhere switch decides if to copy the keys equal to (True) or</span> +<span class="sd"> different to (False) the keynames/keyvalues list passed to the function.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filename_in : :obj:`string`</span> +<span class="sd"> Filename of the input file to read the grib messages from.</span> + +<span class="sd"> selectwhere : :obj:`boolean`, optional</span> +<span class="sd"> Decides if to copy the keynames and values equal to (True) or</span> +<span class="sd"> different to (False) the keynames/keyvalues list passed to the</span> +<span class="sd"> function. Default is True.</span> + +<span class="sd"> keynames : :obj:`list` of :obj:`string`</span> +<span class="sd"> List of keynames.</span> + +<span class="sd"> keyvalues : :obj:`list` of :obj:`string`</span> +<span class="sd"> List of keyvalues.</span> + +<span class="sd"> filemode : :obj:`string`, optional</span> +<span class="sd"> Sets the mode for the output file. Default is "wb".</span> + +<span class="sd"> Return</span> +<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="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> + <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Give a value for each keyname!"</span><span class="p">)</span> + + + <span class="n">fout</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filenames</span><span class="p">,</span> <span class="n">filemode</span><span class="p">)</span> + + <span class="n">fields</span> <span class="o">=</span> <span class="mi">0</span> + + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename_in</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">fin</span><span class="p">:</span> + <span class="k">if</span> <span class="n">fields</span> <span class="o">>=</span> <span class="mi">1</span><span class="p">:</span> + <span class="n">fout</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + <span class="k">return</span> + + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_grib_new_from_file</span><span class="p">(</span><span class="n">fin</span><span class="p">)</span> + + <span class="n">select</span> <span class="o">=</span> <span class="kc">True</span> + <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keynames</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">codes_is_defined</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span> + <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Key was not defined"</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">selectwhere</span><span class="p">:</span> + <span class="n">select</span> <span class="o">=</span> <span class="p">(</span><span class="n">select</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">keyvalues</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">==</span> + <span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">key</span><span class="p">))))</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">select</span> <span class="o">=</span> <span class="p">(</span><span class="n">select</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">keyvalues</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">!=</span> + <span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">key</span><span class="p">))))</span> + <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="k">if</span> <span class="n">select</span><span class="p">:</span> + <span class="n">fields</span> <span class="o">=</span> <span class="n">fields</span> <span class="o">+</span> <span class="mi">1</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fout</span><span class="p">)</span> + + <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + + <span class="n">fout</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="GribUtil.index"><a class="viewcode-back" href="../Documentation/Api/api_python.html#GribUtil.GribUtil.index">[docs]</a> <span class="k">def</span> <span class="nf">index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index_keys</span><span class="p">,</span> <span class="n">index_file</span><span class="o">=</span><span class="s2">"my.idx"</span><span class="p">):</span> + <span class="sd">'''Create index file from a list of files if it does not exist or</span> +<span class="sd"> read an index file.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> index_keys: :obj:`list` of :obj:`string`</span> +<span class="sd"> Contains the list of key parameter names from</span> +<span class="sd"> which the index is to be created.</span> + +<span class="sd"> index_file: :obj:`string`, optional</span> +<span class="sd"> Filename where the indices are stored.</span> +<span class="sd"> Default is "my.idx".</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<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="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> + <span class="n">iid</span> <span class="o">=</span> <span class="kc">None</span> + + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">index_file</span><span class="p">):</span> + <span class="n">iid</span> <span class="o">=</span> <span class="n">codes_index_read</span><span class="p">(</span><span class="n">index_file</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"Use existing index file: </span><span class="si">%s</span><span class="s2"> "</span> <span class="o">%</span> <span class="p">(</span><span class="n">index_file</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">for</span> <span class="n">filename</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">filenames</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"Inputfile: </span><span class="si">%s</span><span class="s2"> "</span> <span class="o">%</span> <span class="p">(</span><span class="n">filename</span><span class="p">))</span> + <span class="k">if</span> <span class="n">iid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">iid</span> <span class="o">=</span> <span class="n">codes_index_new_from_file</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">index_keys</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">codes_index_add_file</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">iid</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">codes_index_write</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">index_file</span><span class="p">)</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'... index done'</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">iid</span></div></div> +</pre></div> + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/_modules/MarsRetrieval.html b/Documentation/html/_modules/MarsRetrieval.html new file mode 100644 index 0000000000000000000000000000000000000000..5bc24a5b0c996f7f68308d3c6f28c67e463c7ed7 --- /dev/null +++ b/Documentation/html/_modules/MarsRetrieval.html @@ -0,0 +1,744 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>MarsRetrieval — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="index.html">Module code</a> »</li> + + <li>MarsRetrieval</li> + + + <li class="wy-breadcrumbs-aside"> + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for MarsRetrieval</h1><div class="highlight"><pre> +<span></span><span class="ch">#!/usr/bin/env python3</span> +<span class="c1"># -*- coding: utf-8 -*-</span> +<span class="c1">#*******************************************************************************</span> +<span class="c1"># @Author: Anne Fouilloux (University of Oslo)</span> +<span class="c1">#</span> +<span class="c1"># @Date: October 2014</span> +<span class="c1">#</span> +<span class="c1"># @Change History:</span> +<span class="c1">#</span> +<span class="c1"># November 2015 - Leopold Haimberger (University of Vienna):</span> +<span class="c1"># - optimized display_info</span> +<span class="c1"># - optimized data_retrieve and seperate between python and shell</span> +<span class="c1"># script call</span> +<span class="c1">#</span> +<span class="c1"># February 2018 - Anne Philipp (University of Vienna):</span> +<span class="c1"># - applied PEP8 style guide</span> +<span class="c1"># - added documentation</span> +<span class="c1"># - applied some minor modifications in programming style/structure</span> +<span class="c1"># - added writing of mars request attributes to a csv file</span> +<span class="c1">#</span> +<span class="c1"># @License:</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> +<span class="c1">#</span> +<span class="c1"># SPDX-License-Identifier: CC-BY-4.0</span> +<span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> +<span class="c1">#*******************************************************************************</span> + +<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">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">traceback</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="c1">#pylint: disable=invalid-name</span> +<span class="k">try</span><span class="p">:</span> + <span class="n">ec_api</span> <span class="o">=</span> <span class="kc">True</span> + <span class="kn">import</span> <span class="nn">ecmwfapi</span> +<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> + <span class="n">ec_api</span> <span class="o">=</span> <span class="kc">False</span> + +<span class="k">try</span><span class="p">:</span> + <span class="n">cds_api</span> <span class="o">=</span> <span class="kc">True</span> + <span class="kn">import</span> <span class="nn">cdsapi</span> +<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> + <span class="n">cds_api</span> <span class="o">=</span> <span class="kc">False</span> +<span class="c1">#pylint: enable=invalid-name</span> +<span class="c1">#pylint: enable=wrong-import-position</span> +<span class="c1"># ------------------------------------------------------------------------------</span> +<span class="c1"># CLASS</span> +<span class="c1"># ------------------------------------------------------------------------------</span> +<div class="viewcode-block" id="MarsRetrieval"><a class="viewcode-back" href="../Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval">[docs]</a><span class="k">class</span> <span class="nc">MarsRetrieval</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">'''Specific syntax and content for submission of MARS retrievals.</span> + +<span class="sd"> A MARS revtrieval has a specific syntax with a selection of keywords and</span> +<span class="sd"> their corresponding values. This class provides the necessary functions</span> +<span class="sd"> by displaying the selected parameters and their values and the actual</span> +<span class="sd"> retrievement of the data through a mars request or a Python web api</span> +<span class="sd"> interface. The initialization already expects all the keyword values.</span> + +<span class="sd"> A description of MARS keywords/arguments and examples of their</span> +<span class="sd"> values can be found here:</span> +<span class="sd"> https://software.ecmwf.int/wiki/display/UDOC/\</span> +<span class="sd"> Identification+keywords#Identificationkeywords-class</span> + +<span class="sd"> Attributes</span> +<span class="sd"> ----------</span> +<span class="sd"> server : ECMWFService or ECMWFDataServer</span> +<span class="sd"> This is the connection to the ECMWF data servers.</span> + +<span class="sd"> public : int</span> +<span class="sd"> Decides which Web API Server version is used.</span> + +<span class="sd"> marsclass : str, optional</span> +<span class="sd"> Characterisation of dataset.</span> + +<span class="sd"> dataset : str, optional</span> +<span class="sd"> For public datasets there is the specific naming and parameter</span> +<span class="sd"> dataset which has to be used to characterize the type of</span> +<span class="sd"> data.</span> + +<span class="sd"> type : str, optional</span> +<span class="sd"> Determines the type of fields to be retrieved.</span> + +<span class="sd"> levtype : str, optional</span> +<span class="sd"> Denotes type of level.</span> + +<span class="sd"> levelist : str, optional</span> +<span class="sd"> Specifies the required levels.</span> + +<span class="sd"> repres : str, optional</span> +<span class="sd"> Selects the representation of the archived data.</span> + +<span class="sd"> date : str, optional</span> +<span class="sd"> Specifies the Analysis date, the Forecast base date or</span> +<span class="sd"> Observations date.</span> + +<span class="sd"> resol : str, optional</span> +<span class="sd"> Specifies the desired triangular truncation of retrieved data,</span> +<span class="sd"> before carrying out any other selected post-processing.</span> + +<span class="sd"> stream : str, optional</span> +<span class="sd"> Identifies the forecasting system used to generate the data.</span> + +<span class="sd"> area : str, optional</span> +<span class="sd"> Specifies the desired sub-area of data to be extracted.</span> + +<span class="sd"> time : str, optional</span> +<span class="sd"> Specifies the time of the data in hours and minutes.</span> + +<span class="sd"> step : str, optional</span> +<span class="sd"> Specifies the forecast time step from forecast base time.</span> + +<span class="sd"> expver : str, optional</span> +<span class="sd"> The version of the dataset.</span> + +<span class="sd"> number : str, optional</span> +<span class="sd"> Selects the member in ensemble forecast run.</span> + +<span class="sd"> accuracy : str, optional</span> +<span class="sd"> Specifies the number of bits per value to be used in the</span> +<span class="sd"> generated GRIB coded fields.</span> + +<span class="sd"> grid : str, optional</span> +<span class="sd"> Specifies the output grid which can be either a Gaussian grid</span> +<span class="sd"> or a Latitude/Longitude grid.</span> + +<span class="sd"> gaussian : str, optional</span> +<span class="sd"> This parameter is deprecated and should no longer be used.</span> +<span class="sd"> Specifies the desired type of Gaussian grid for the output.</span> + +<span class="sd"> target : str, optional</span> +<span class="sd"> Specifies a file into which data is to be written after</span> +<span class="sd"> retrieval or manipulation.</span> + +<span class="sd"> param : str, optional</span> +<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="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> + <span class="n">param</span><span class="o">=</span><span class="s2">""</span><span class="p">):</span> + <span class="sd">'''Initialises the instance of the MarsRetrieval class and</span> +<span class="sd"> defines and assigns a set of the necessary retrieval parameters</span> +<span class="sd"> for the FLEXPART input data.</span> +<span class="sd"> A description of MARS keywords/arguments, their dependencies</span> +<span class="sd"> on each other and examples of their values can be found here:</span> + +<span class="sd"> https://software.ecmwf.int/wiki/display/UDOC/MARS+keywords</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> server : ECMWFService or ECMWFDataServer</span> +<span class="sd"> This is the connection to the ECMWF data servers.</span> +<span class="sd"> It is needed for the pythonic access of ECMWF data.</span> + +<span class="sd"> public : int</span> +<span class="sd"> Decides which Web API version is used:</span> +<span class="sd"> 0: member-state users and full archive access</span> +<span class="sd"> 1: public access and limited access to the public server and</span> +<span class="sd"> datasets. Needs the parameter dataset.</span> +<span class="sd"> Default is "0" and for member-state users.</span> + +<span class="sd"> marsclass : str, optional</span> +<span class="sd"> Characterisation of dataset. E.g. EI (ERA-Interim),</span> +<span class="sd"> E4 (ERA40), OD (Operational archive), EA (ERA5).</span> +<span class="sd"> Default is the ERA5 dataset "EA".</span> + +<span class="sd"> dataset : str, optional</span> +<span class="sd"> For public datasets there is the specific naming and parameter</span> +<span class="sd"> dataset which has to be used to characterize the type of</span> +<span class="sd"> data. Usually there is less data available, either in times,</span> +<span class="sd"> domain or parameter.</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> type : str, optional</span> +<span class="sd"> Determines the type of fields to be retrieved.</span> +<span class="sd"> Selects between observations, images or fields.</span> +<span class="sd"> Examples for fields: Analysis (an), Forecast (fc),</span> +<span class="sd"> Perturbed Forecast (pf), Control Forecast (cf) and so on.</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> levtype : str, optional</span> +<span class="sd"> Denotes type of level. Has a direct implication on valid</span> +<span class="sd"> levelist values!</span> +<span class="sd"> E.g. model level (ml), pressure level (pl), surface (sfc),</span> +<span class="sd"> potential vorticity (pv), potential temperature (pt)</span> +<span class="sd"> and depth (dp).</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> levelist : str, optional</span> +<span class="sd"> Specifies the required levels. It has to have a valid</span> +<span class="sd"> correspondence to the selected levtype.</span> +<span class="sd"> Examples: model level: 1/to/137, pressure levels: 500/to/1000</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> repres : str, optional</span> +<span class="sd"> Selects the representation of the archived data.</span> +<span class="sd"> E.g. sh - spherical harmonics, gg - Gaussian grid,</span> +<span class="sd"> ll - latitude/longitude, ...</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> date : str, optional</span> +<span class="sd"> Specifies the Analysis date, the Forecast base date or</span> +<span class="sd"> Observations date. Valid formats are:</span> +<span class="sd"> Absolute as YYYY-MM-DD or YYYYMMDD.</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> resol : str, optional</span> +<span class="sd"> Specifies the desired triangular truncation of retrieved data,</span> +<span class="sd"> before carrying out any other selected post-processing.</span> +<span class="sd"> The default is automatic truncation (auto), by which the lowest</span> +<span class="sd"> resolution compatible with the value specified in grid is</span> +<span class="sd"> automatically selected for the retrieval.</span> +<span class="sd"> Users wanting to perform post-processing from full spectral</span> +<span class="sd"> resolution should specify Archived Value (av).</span> +<span class="sd"> The following are examples of existing resolutions found in</span> +<span class="sd"> the archive: 63, 106, 159, 213, 255, 319, 399, 511, 799 or 1279.</span> +<span class="sd"> This keyword has no meaning/effect if the archived data is</span> +<span class="sd"> not in spherical harmonics representation.</span> +<span class="sd"> The best selection can be found here:</span> +<span class="sd"> https://software.ecmwf.int/wiki/display/UDOC/\</span> +<span class="sd"> Retrieve#Retrieve-Truncationbeforeinterpolation</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> stream : str, optional</span> +<span class="sd"> Identifies the forecasting system used to generate the data.</span> +<span class="sd"> E.g. oper (Atmospheric model), enfo (Ensemble forecats), ...</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> area : str, optional</span> +<span class="sd"> Specifies the desired sub-area of data to be extracted.</span> +<span class="sd"> Areas can be defined to wrap around the globe.</span> + +<span class="sd"> Latitude values must be given as signed numbers, with:</span> +<span class="sd"> north latitudes (i.e. north of the equator)</span> +<span class="sd"> being positive (e.g: 40.5)</span> +<span class="sd"> south latitutes (i.e. south of the equator)</span> +<span class="sd"> being negative (e.g: -50.5)</span> +<span class="sd"> Longtitude values must be given as signed numbers, with:</span> +<span class="sd"> east longitudes (i.e. east of the 0 degree meridian)</span> +<span class="sd"> being positive (e.g: 35.0)</span> +<span class="sd"> west longitudes (i.e. west of the 0 degree meridian)</span> +<span class="sd"> being negative (e.g: -20.5)</span> + +<span class="sd"> E.g.: North/West/South/East</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> time : str, optional</span> +<span class="sd"> Specifies the time of the data in hours and minutes.</span> +<span class="sd"> Valid values depend on the type of data: Analysis time,</span> +<span class="sd"> Forecast base time or First guess verification time</span> +<span class="sd"> (all usually at synoptic hours: 00, 06, 12 and 18 ).</span> +<span class="sd"> Observation time (any combination in hours and minutes is valid,</span> +<span class="sd"> subject to data availability in the archive).</span> +<span class="sd"> The syntax is HHMM or HH:MM. If MM is omitted it defaults to 00.</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> step : str, optional</span> +<span class="sd"> Specifies the forecast time step from forecast base time.</span> +<span class="sd"> Valid values are hours (HH) from forecast base time. It also</span> +<span class="sd"> specifies the length of the forecast which verifies at</span> +<span class="sd"> First Guess time.</span> +<span class="sd"> E.g. 1/3/6-hourly</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> expver : str, optional</span> +<span class="sd"> The version of the dataset. Each experiment is assigned a</span> +<span class="sd"> unique code (version). Production data is assigned 1 or 2,</span> +<span class="sd"> and experimental data in Operations 11, 12 ,...</span> +<span class="sd"> Research or Member State's experiments have a four letter</span> +<span class="sd"> experiment identifier.</span> +<span class="sd"> Default is "1".</span> + +<span class="sd"> number : str, optional</span> +<span class="sd"> Selects the member in ensemble forecast run. (Only then it</span> +<span class="sd"> is necessary.) It has a different meaning depending on</span> +<span class="sd"> the type of data.</span> +<span class="sd"> E.g. Perturbed Forecasts: specifies the Ensemble forecast member</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> accuracy : str, optional</span> +<span class="sd"> Specifies the number of bits per value to be used in the</span> +<span class="sd"> generated GRIB coded fields.</span> +<span class="sd"> A positive integer may be given to specify the preferred number</span> +<span class="sd"> of bits per packed value. This must not be greater than the</span> +<span class="sd"> number of bits normally used for a Fortran integer on the</span> +<span class="sd"> processor handling the request (typically 32 or 64 bit).</span> +<span class="sd"> Within a compute request the accuracy of the original fields</span> +<span class="sd"> can be passed to the result field by specifying accuracy=av.</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> grid : str, optional</span> +<span class="sd"> Specifies the output grid which can be either a Gaussian grid</span> +<span class="sd"> or a Latitude/Longitude grid. MARS requests specifying</span> +<span class="sd"> grid=av will return the archived model grid.</span> + +<span class="sd"> Lat/Lon grid: The grid spacing needs to be an integer</span> +<span class="sd"> fraction of 90 degrees e.g. grid = 0.5/0.5</span> + +<span class="sd"> Gaussian grid: specified by a letter denoting the type of</span> +<span class="sd"> Gaussian grid followed by an integer (the grid number)</span> +<span class="sd"> representing the number of lines between the Pole and Equator,</span> +<span class="sd"> e.g.</span> +<span class="sd"> grid = F160 - full (or regular) Gaussian grid with</span> +<span class="sd"> 160 latitude lines between the pole and equator</span> +<span class="sd"> grid = N320 - ECMWF original reduced Gaussian grid with</span> +<span class="sd"> 320 latitude lines between the pole and equator,</span> +<span class="sd"> see Reduced Gaussian Grids for grid numbers used at ECMWF</span> +<span class="sd"> grid = O640 - ECMWF octahedral (reduced) Gaussian grid with</span> +<span class="sd"> 640 latitude lines between the pole and equator</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> gaussian : str, optional</span> +<span class="sd"> This parameter is deprecated and should no longer be used.</span> +<span class="sd"> Specifies the desired type of Gaussian grid for the output.</span> +<span class="sd"> Valid Gaussian grids are quasi-regular (reduced) or regular.</span> +<span class="sd"> Keyword gaussian can only be specified together with</span> +<span class="sd"> keyword grid. Gaussian without grid has no effect.</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> target : str, optional</span> +<span class="sd"> Specifies a file into which data is to be written after</span> +<span class="sd"> retrieval or manipulation. Path names should always be</span> +<span class="sd"> enclosed in double quotes. The MARS client supports automatic</span> +<span class="sd"> generation of multiple target files using MARS keywords</span> +<span class="sd"> enclosed in square brackets [ ]. If the environment variable</span> +<span class="sd"> MARS_MULTITARGET_STRICT_FORMAT is set to 1 before calling mars,</span> +<span class="sd"> the keyword values will be used in the filename as shown by</span> +<span class="sd"> the ecCodes GRIB tool grib_ls -m, e.g. with</span> +<span class="sd"> MARS_MULTITARGET_STRICT_FORMAT set to 1 the keywords time,</span> +<span class="sd"> expver and param will be formatted as 0600, 0001 and 129.128</span> +<span class="sd"> rather than 600, 1 and 129.</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> param : str, optional</span> +<span class="sd"> Specifies the meteorological parameter.</span> +<span class="sd"> The list of meteorological parameters in MARS is extensive.</span> +<span class="sd"> Their availability is directly related to their meteorological</span> +<span class="sd"> meaning and, therefore, the rest of directives specified</span> +<span class="sd"> in the MARS request.</span> +<span class="sd"> Meteorological parameters can be specified by their</span> +<span class="sd"> GRIB code (param=130), their mnemonic (param=t) or</span> +<span class="sd"> full name (param=temperature).</span> +<span class="sd"> The list of parameter should be seperated by a "/"-sign.</span> +<span class="sd"> E.g. 130/131/133</span> +<span class="sd"> Default is an empty string.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">server</span> <span class="o">=</span> <span class="n">server</span> + <span class="bp">self</span><span class="o">.</span><span class="n">public</span> <span class="o">=</span> <span class="n">public</span> + <span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span> <span class="o">=</span> <span class="n">marsclass</span> + <span class="bp">self</span><span class="o">.</span><span class="n">dataset</span> <span class="o">=</span> <span class="n">dataset</span> + <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="nb">type</span> + <span class="bp">self</span><span class="o">.</span><span class="n">levtype</span> <span class="o">=</span> <span class="n">levtype</span> + <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span> <span class="o">=</span> <span class="n">levelist</span> + <span class="bp">self</span><span class="o">.</span><span class="n">repres</span> <span class="o">=</span> <span class="n">repres</span> + <span class="bp">self</span><span class="o">.</span><span class="n">date</span> <span class="o">=</span> <span class="n">date</span> + <span class="bp">self</span><span class="o">.</span><span class="n">resol</span> <span class="o">=</span> <span class="n">resol</span> + <span class="bp">self</span><span class="o">.</span><span class="n">stream</span> <span class="o">=</span> <span class="n">stream</span> + <span class="bp">self</span><span class="o">.</span><span class="n">area</span> <span class="o">=</span> <span class="n">area</span> + <span class="bp">self</span><span class="o">.</span><span class="n">time</span> <span class="o">=</span> <span class="n">time</span> + <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="n">step</span> + <span class="bp">self</span><span class="o">.</span><span class="n">expver</span> <span class="o">=</span> <span class="n">expver</span> + <span class="bp">self</span><span class="o">.</span><span class="n">number</span> <span class="o">=</span> <span class="n">number</span> + <span class="bp">self</span><span class="o">.</span><span class="n">accuracy</span> <span class="o">=</span> <span class="n">accuracy</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid</span> <span class="o">=</span> <span class="n">grid</span> + <span class="bp">self</span><span class="o">.</span><span class="n">gaussian</span> <span class="o">=</span> <span class="n">gaussian</span> + <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span> + <span class="bp">self</span><span class="o">.</span><span class="n">param</span> <span class="o">=</span> <span class="n">param</span> + + <span class="k">return</span> + + +<div class="viewcode-block" id="MarsRetrieval.display_info"><a class="viewcode-back" href="../Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.display_info">[docs]</a> <span class="k">def</span> <span class="nf">display_info</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">'''Prints all class attributes and their values to the</span> +<span class="sd"> standard output.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="c1"># Get all class attributes and their values as a dictionary</span> + <span class="n">attrs</span> <span class="o">=</span> <span class="nb">vars</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + + <span class="c1"># iterate through all attributes and print them</span> + <span class="c1"># with their corresponding values</span> + <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">attrs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> + <span class="k">if</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'server'</span><span class="p">,</span> <span class="s1">'public'</span><span class="p">]:</span> + <span class="k">pass</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s1">': '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="MarsRetrieval.print_infodata_csv"><a class="viewcode-back" href="../Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.print_infodata_csv">[docs]</a> <span class="k">def</span> <span class="nf">print_infodata_csv</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inputdir</span><span class="p">,</span> <span class="n">request_number</span><span class="p">):</span> + <span class="sd">'''Write all request parameter in alpabetical order into a "csv" file.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> inputdir : str</span> +<span class="sd"> The path where all data from the retrievals are stored.</span> + +<span class="sd"> request_number : int</span> +<span class="sd"> Number of mars requests for flux and non-flux data.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="c1"># Get all class attributes and their values as a dictionary</span> + <span class="n">attrs</span> <span class="o">=</span> <span class="nb">vars</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + <span class="k">del</span> <span class="n">attrs</span><span class="p">[</span><span class="s1">'server'</span><span class="p">]</span> + <span class="k">del</span> <span class="n">attrs</span><span class="p">[</span><span class="s1">'public'</span><span class="p">]</span> + + <span class="c1"># open a file to store all requests to</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">inputdir</span><span class="p">,</span> + <span class="n">_config</span><span class="o">.</span><span class="n">FILE_MARS_REQUESTS</span><span class="p">),</span> <span class="s1">'a'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">request_number</span><span class="p">)</span> <span class="o">+</span> <span class="s1">', '</span><span class="p">)</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">attrs</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> + <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">attrs</span><span class="o">.</span><span class="n">keys</span><span class="p">())))</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="MarsRetrieval.data_retrieve"><a class="viewcode-back" href="../Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.data_retrieve">[docs]</a> <span class="k">def</span> <span class="nf">data_retrieve</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">'''Submits a MARS retrieval. Depending on the existence of</span> +<span class="sd"> ECMWF Web-API or CDS API it is submitted via Python or a</span> +<span class="sd"> subprocess in the Shell. The parameter for the mars retrieval</span> +<span class="sd"> are taken from the defined class attributes.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="c1"># Get all class attributes and their values as a dictionary</span> + <span class="n">attrs</span> <span class="o">=</span> <span class="nb">vars</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + + <span class="c1"># eliminate unnecessary attributes from the dictionary attrs</span> + <span class="k">del</span> <span class="n">attrs</span><span class="p">[</span><span class="s1">'server'</span><span class="p">]</span> + <span class="k">del</span> <span class="n">attrs</span><span class="p">[</span><span class="s1">'public'</span><span class="p">]</span> + + <span class="c1"># exchange parameter name for marsclass</span> + <span class="n">mclass</span> <span class="o">=</span> <span class="n">attrs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'marsclass'</span><span class="p">)</span> + <span class="k">del</span> <span class="n">attrs</span><span class="p">[</span><span class="s1">'marsclass'</span><span class="p">]</span> + <span class="n">attrs</span><span class="p">[</span><span class="s1">'class'</span><span class="p">]</span> <span class="o">=</span> <span class="n">mclass</span> + + <span class="c1"># prepare target variable as needed for the Web API or CDS API mode</span> + <span class="c1"># within the dictionary for full access</span> + <span class="c1"># as a single variable for public access</span> + <span class="n">target</span> <span class="o">=</span> <span class="n">attrs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'target'</span><span class="p">)</span> + <span class="k">if</span> <span class="ow">not</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">public</span><span class="p">):</span> + <span class="k">del</span> <span class="n">attrs</span><span class="p">[</span><span class="s1">'target'</span><span class="p">]</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'target: '</span> <span class="o">+</span> <span class="n">target</span><span class="p">)</span> + + <span class="c1"># find all keys without a value and convert all other values to strings</span> + <span class="n">empty_keys</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">attrs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> + <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="s1">''</span><span class="p">:</span> + <span class="n">empty_keys</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">key</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">attrs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> + + <span class="c1"># delete all empty parameter from the dictionary</span> + <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">empty_keys</span><span class="p">:</span> + <span class="k">del</span> <span class="n">attrs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> + +<span class="c1"># attrs['ppengine'] = 'emos'</span> + + <span class="c1"># MARS request via Python script</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="p">:</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">if</span> <span class="n">cds_api</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="p">,</span> <span class="n">cdsapi</span><span class="o">.</span><span class="n">Client</span><span class="p">):</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'RETRIEVE ERA5 WITH CDS API!'</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">retrieve</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">CDS_DATASET</span><span class="p">,</span> + <span class="n">attrs</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">ec_api</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="p">,</span> <span class="n">ecmwfapi</span><span class="o">.</span><span class="n">ECMWFDataServer</span><span class="p">):</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'RETRIEVE PUBLIC DATA (NOT ERA5)!'</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">retrieve</span><span class="p">(</span><span class="n">attrs</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">ec_api</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="p">,</span> <span class="n">ecmwfapi</span><span class="o">.</span><span class="n">ECMWFService</span><span class="p">):</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'EXECUTE NON-PUBLIC RETRIEVAL (NOT ERA5)!'</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">attrs</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR:'</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'No match for Web API instance!'</span><span class="p">)</span> + <span class="k">raise</span> <span class="ne">IOError</span> + <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n\n</span><span class="s1">MARS Request failed!'</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</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="c1"># MARS request via call in shell</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">request_str</span> <span class="o">=</span> <span class="s1">'ret'</span> + <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">attrs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> + <span class="n">request_str</span> <span class="o">=</span> <span class="n">request_str</span> <span class="o">+</span> <span class="s1">','</span> <span class="o">+</span> <span class="n">key</span> <span class="o">+</span> <span class="s1">'='</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> + <span class="n">request_str</span> <span class="o">+=</span> <span class="s1">',target="'</span> <span class="o">+</span> <span class="n">target</span> <span class="o">+</span> <span class="s1">'"'</span> + <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'mars'</span><span class="p">],</span> <span class="c1">#'-e'],</span> + <span class="n">stdin</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> + <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> + <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> + <span class="n">bufsize</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + <span class="n">pout</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">(</span><span class="nb">input</span><span class="o">=</span><span class="n">request_str</span><span class="o">.</span><span class="n">encode</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span> + <span class="nb">print</span><span class="p">(</span><span class="n">pout</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span> + + <span class="k">if</span> <span class="s1">'Some errors reported'</span> <span class="ow">in</span> <span class="n">pout</span><span class="o">.</span><span class="n">decode</span><span class="p">():</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'MARS Request failed - please check request'</span><span class="p">)</span> + <span class="k">raise</span> <span class="ne">IOError</span> + <span class="k">elif</span> <span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">target</span><span class="p">)</span><span class="o">.</span><span class="n">st_size</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'MARS Request returned no data - please check request'</span><span class="p">)</span> + <span class="k">raise</span> <span class="ne">IOError</span> + + <span class="k">return</span></div></div> +</pre></div> + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/_modules/UioFiles.html b/Documentation/html/_modules/UioFiles.html new file mode 100644 index 0000000000000000000000000000000000000000..d939348aa9c2185bad0205d0069e05c539a0df40 --- /dev/null +++ b/Documentation/html/_modules/UioFiles.html @@ -0,0 +1,361 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>UioFiles — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="index.html">Module code</a> »</li> + + <li>UioFiles</li> + + + <li class="wy-breadcrumbs-aside"> + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for UioFiles</h1><div class="highlight"><pre> +<span></span><span class="ch">#!/usr/bin/env python3</span> +<span class="c1"># -*- coding: utf-8 -*-</span> +<span class="c1">#*******************************************************************************</span> +<span class="c1"># @Author: Anne Fouilloux (University of Oslo)</span> +<span class="c1">#</span> +<span class="c1"># @Date: October 2014</span> +<span class="c1">#</span> +<span class="c1"># @Change History:</span> +<span class="c1">#</span> +<span class="c1"># November 2015 - Leopold Haimberger (University of Vienna):</span> +<span class="c1"># - modified method list_files to work with glob instead of listdir</span> +<span class="c1"># - added pattern search in method list_files</span> +<span class="c1">#</span> +<span class="c1"># February - December 2018 - Anne Philipp (University of Vienna):</span> +<span class="c1"># - applied PEP8 style guide</span> +<span class="c1"># - added documentation</span> +<span class="c1"># - optimisation of method list_files since it didn't work correctly</span> +<span class="c1"># for sub directories</span> +<span class="c1"># - additional speed up of method list_files</span> +<span class="c1"># - modified the class so that it is initiated with a pattern instead</span> +<span class="c1"># of suffixes. Gives more precision in selection of files.</span> +<span class="c1"># - added delete method</span> +<span class="c1">#</span> +<span class="c1"># @License:</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> +<span class="c1">#</span> +<span class="c1"># SPDX-License-Identifier: CC-BY-4.0</span> +<span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> +<span class="c1">#*******************************************************************************</span> + +<span class="c1"># ------------------------------------------------------------------------------</span> +<span class="c1"># MODULES</span> +<span class="c1"># ------------------------------------------------------------------------------</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">fnmatch</span> + +<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="c1">#pylint: enable=wrong-import-position</span> + +<span class="c1"># ------------------------------------------------------------------------------</span> +<span class="c1"># CLASS</span> +<span class="c1"># ------------------------------------------------------------------------------</span> + +<div class="viewcode-block" id="UioFiles"><a class="viewcode-back" href="../Documentation/Api/api_python.html#UioFiles.UioFiles">[docs]</a><span class="k">class</span> <span class="nc">UioFiles</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Collection of files matching a specific pattern.</span> + +<span class="sd"> The pattern can contain regular expressions for the files.</span> +<span class="sd"> The files are listed and can be transformed to a single string or</span> +<span class="sd"> they can be deleted.</span> + +<span class="sd"> Attributes</span> +<span class="sd"> ----------</span> +<span class="sd"> path : str</span> +<span class="sd"> Directory where to list the files.</span> + +<span class="sd"> pattern : str</span> +<span class="sd"> Regular expression pattern. For example: '*.grb'</span> + +<span class="sd"> files : list of str</span> +<span class="sd"> List of files matching the pattern in the path.</span> +<span class="sd"> """</span> + <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="sd">"""Assignes a specific pattern for these files.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> path : str</span> +<span class="sd"> Directory where to list the files.</span> + +<span class="sd"> pattern : str</span> +<span class="sd"> Regular expression pattern. For example: '*.grb'</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> """</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">path</span> <span class="o">=</span> <span class="n">path</span> + <span class="bp">self</span><span class="o">.</span><span class="n">pattern</span> <span class="o">=</span> <span class="n">pattern</span> + <span class="bp">self</span><span class="o">.</span><span class="n">files</span> <span class="o">=</span> <span class="p">[]</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">_list_files</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">)</span> + + <span class="k">return</span> + + + <span class="k">def</span> <span class="nf">_list_files</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span> + <span class="sd">"""Lists all files in the directory with the matching</span> +<span class="sd"> regular expression pattern.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> path : str</span> +<span class="sd"> Path to the files.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> """</span> + <span class="c1"># Get the absolute path</span> + <span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> + + <span class="c1"># get all files in the dir and subdir as absolut path</span> + <span class="c1"># pylint: disable=W0612</span> + <span class="k">for</span> <span class="n">root</span><span class="p">,</span> <span class="n">dirnames</span><span class="p">,</span> <span class="n">filenames</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> + <span class="k">for</span> <span class="n">filename</span> <span class="ow">in</span> <span class="n">fnmatch</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">filenames</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pattern</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">files</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">filename</span><span class="p">))</span> + + <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="sd">"""Converts the list of files into a single string.</span> +<span class="sd"> The entries are sepereated by "," sign.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> files_string : str</span> +<span class="sd"> The content of the list as a single string.</span> +<span class="sd"> """</span> + + <span class="n">filenames</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">f</span><span class="p">)</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">files_string</span> <span class="o">=</span> <span class="n">get_list_as_string</span><span class="p">(</span><span class="n">filenames</span><span class="p">,</span> <span class="n">concatenate_sign</span><span class="o">=</span><span class="s1">', '</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">files_string</span> + + +<div class="viewcode-block" id="UioFiles.delete_files"><a class="viewcode-back" href="../Documentation/Api/api_python.html#UioFiles.UioFiles.delete_files">[docs]</a> <span class="k">def</span> <span class="nf">delete_files</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Deletes the files.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> """</span> + + <span class="k">for</span> <span class="n">old_file</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">files</span><span class="p">:</span> + <span class="n">silent_remove</span><span class="p">(</span><span class="n">old_file</span><span class="p">)</span> + + <span class="k">return</span></div></div> +</pre></div> + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/_modules/checks.html b/Documentation/html/_modules/checks.html new file mode 100644 index 0000000000000000000000000000000000000000..e38379b8748852fbd9316888957cc807b59d877c --- /dev/null +++ b/Documentation/html/_modules/checks.html @@ -0,0 +1,1086 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>checks — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="index.html">Module code</a> »</li> + + <li>checks</li> + + + <li class="wy-breadcrumbs-aside"> + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for checks</h1><div class="highlight"><pre> +<span></span><span class="ch">#!/usr/bin/env python3</span> +<span class="c1"># -*- coding: utf-8 -*-</span> +<span class="c1">#*******************************************************************************</span> +<span class="c1"># @Author: Anne Philipp (University of Vienna)</span> +<span class="c1">#</span> +<span class="c1"># @Date: November 2018</span> +<span class="c1">#</span> +<span class="c1"># @Change History:</span> +<span class="c1">#</span> +<span class="c1"># @License:</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> +<span class="c1">#</span> +<span class="c1"># SPDX-License-Identifier: CC-BY-4.0</span> +<span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> +<span class="c1">#*******************************************************************************</span> +<span class="sd">'''This module contains check methods for the CONTROL paramaters.</span> +<span class="sd">'''</span> + +<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">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="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> +<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="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="c1"># ------------------------------------------------------------------------------</span> +<span class="c1"># FUNCTIONS</span> +<span class="c1"># ------------------------------------------------------------------------------</span> + +<div class="viewcode-block" id="check_logicals_type"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_logicals_type">[docs]</a><span class="k">def</span> <span class="nf">check_logicals_type</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">logicals</span><span class="p">):</span> + <span class="sd">'''Check that the logical variables have correct type integer.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> logicals : list of (str or int)</span> +<span class="sd"> Names of the switches that are used to control the flow of the</span> +<span class="sd"> program.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="k">for</span> <span class="n">var</span> <span class="ow">in</span> <span class="n">logicals</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">var</span><span class="p">),</span> <span class="nb">int</span><span class="p">):</span> + <span class="nb">setattr</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">var</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">var</span><span class="p">)))</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="check_grid"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_grid">[docs]</a><span class="k">def</span> <span class="nf">check_grid</span><span class="p">(</span><span class="n">grid</span><span class="p">):</span> + <span class="sd">'''Convert grid into correct Lat/Lon format. E.g. '0.5/0.5'</span> + +<span class="sd"> Checks on format of original grid. Wether it is in the order of 1000 or 1.</span> +<span class="sd"> Convert to correct grid format and substitute into "Lat/Lon" format string.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> grid : str</span> +<span class="sd"> Contains grid information</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> grid : str</span> +<span class="sd"> Contains grid in format Lat/lon. E.g. 0.1/0.1</span> +<span class="sd"> '''</span> + + <span class="k">if</span> <span class="s1">'N'</span> <span class="ow">in</span> <span class="n">grid</span><span class="p">:</span> + <span class="k">return</span> <span class="n">grid</span> + <span class="k">if</span> <span class="s1">'/'</span> <span class="ow">in</span> <span class="n">grid</span><span class="p">:</span> + <span class="n">gridx</span><span class="p">,</span> <span class="n">gridy</span> <span class="o">=</span> <span class="n">grid</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> + <span class="k">if</span> <span class="n">gridx</span> <span class="o">==</span> <span class="n">gridy</span><span class="p">:</span> + <span class="n">grid</span> <span class="o">=</span> <span class="n">gridx</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'GRID parameter contains two '</span> + <span class="s1">'different values: </span><span class="si">%s</span><span class="s1">'</span> <span class="p">(</span><span class="n">grid</span><span class="p">))</span> + <span class="c1"># # determine grid format</span> + <span class="c1"># if float(grid) / 100. >= 0.5:</span> + <span class="c1"># # grid is defined in 1/1000 degrees; old format</span> + <span class="c1"># grid = '{}/{}'.format(float(grid) / 1000.,</span> + <span class="c1"># float(grid) / 1000.)</span> + <span class="c1"># elif float(grid) / 100. < 0.5:</span> + <span class="c1"># # grid is defined in normal degree; new format</span> + <span class="c1"># grid = '{}/{}'.format(float(grid), float(grid))</span> + + + <span class="c1"># determine grid format</span> + <span class="c1"># assumes that nobody wants grid spacings of 20 deg or more</span> + <span class="k">if</span> <span class="nb">float</span><span class="p">(</span><span class="n">grid</span><span class="p">)</span> <span class="o">>=</span> <span class="mf">20.</span><span class="p">:</span> + <span class="c1"># grid is defined in 1/1000 degree; old format</span> + <span class="n">grid</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">grid</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">,</span> <span class="nb">float</span><span class="p">(</span><span class="n">grid</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># grid is defined in degree; new format</span> + <span class="n">grid</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">grid</span><span class="p">),</span> <span class="nb">float</span><span class="p">(</span><span class="n">grid</span><span class="p">))</span> + + + <span class="k">return</span> <span class="n">grid</span></div> + +<div class="viewcode-block" id="check_area"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_area">[docs]</a><span class="k">def</span> <span class="nf">check_area</span><span class="p">(</span><span class="n">grid</span><span class="p">,</span> <span class="n">area</span><span class="p">,</span> <span class="n">upper</span><span class="p">,</span> <span class="n">lower</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">):</span> + <span class="sd">'''Defines the correct area string.</span> + +<span class="sd"> Checks on the format of the four area components. Wether it is of</span> +<span class="sd"> the order of 1000 or 1. Also checks wether area was already set by command</span> +<span class="sd"> line, then the four components are overwritten.</span> +<span class="sd"> Convert to correct format of the order of magnitude "1" and sets the</span> +<span class="sd"> area parameter (North/West/South/East).</span> +<span class="sd"> E.g.: -5./20./10./10.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> grid : str</span> +<span class="sd"> Contains grid information.</span> + +<span class="sd"> area : str</span> +<span class="sd"> Contains area informtion.</span> + +<span class="sd"> upper : str</span> +<span class="sd"> The northern most latitude.</span> + +<span class="sd"> lower : str</span> +<span class="sd"> The souther most latitude.</span> + +<span class="sd"> left : str</span> +<span class="sd"> The western most longitude.</span> + +<span class="sd"> right : str</span> +<span class="sd"> The eastern most longiude.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> grid : str</span> +<span class="sd"> Contains grid in format Lat/lon. E.g. 0.1/0.1</span> +<span class="sd"> '''</span> + <span class="k">if</span> <span class="s1">'N'</span> <span class="ow">in</span> <span class="n">grid</span><span class="p">:</span> <span class="c1"># Gaussian output grid</span> + <span class="n">area</span> <span class="o">=</span> <span class="s1">'G'</span> + <span class="k">return</span> <span class="n">area</span> + + <span class="c1"># if area was provided decompose area into its 4 components</span> + <span class="k">if</span> <span class="n">area</span><span class="p">:</span> + <span class="n">components</span> <span class="o">=</span> <span class="n">area</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> + <span class="n">upper</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">lower</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="n">components</span> + + <span class="c1"># determine area format</span> + <span class="k">if</span> <span class="nb">all</span><span class="p">([(</span><span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o">>=</span> <span class="mf">0.01</span> <span class="ow">or</span> <span class="nb">float</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">),</span> + <span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">lower</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o">>=</span> <span class="mf">0.01</span> <span class="ow">or</span> <span class="nb">float</span><span class="p">(</span><span class="n">lower</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">),</span> + <span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o">>=</span> <span class="mf">0.01</span> <span class="ow">or</span> <span class="nb">float</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">),</span> + <span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">right</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o">>=</span> <span class="mf">0.01</span> <span class="ow">or</span> <span class="nb">float</span><span class="p">(</span><span class="n">right</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">)]):</span> + <span class="c1"># area is defined in 1/1000 degrees; old format</span> + <span class="n">area</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">,</span> + <span class="nb">float</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">,</span> + <span class="nb">float</span><span class="p">(</span><span class="n">lower</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">,</span> + <span class="nb">float</span><span class="p">(</span><span class="n">right</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">)</span> + <span class="k">elif</span> <span class="nb">all</span><span class="p">([</span><span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o"><</span> <span class="mf">0.05</span><span class="p">,</span> + <span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">lower</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o"><</span> <span class="mf">0.05</span><span class="p">,</span> + <span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o"><</span> <span class="mf">0.05</span><span class="p">,</span> + <span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">right</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o"><</span> <span class="mf">0.05</span><span class="p">]):</span> + <span class="c1"># area is already in new format</span> + <span class="n">area</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">upper</span><span class="p">),</span> + <span class="nb">float</span><span class="p">(</span><span class="n">left</span><span class="p">),</span> + <span class="nb">float</span><span class="p">(</span><span class="n">lower</span><span class="p">),</span> + <span class="nb">float</span><span class="p">(</span><span class="n">right</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'The area components have different '</span> + <span class="s1">'formats (upper, lower, left, right): '</span> + <span class="s1">'</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">upper</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">lower</span><span class="p">),</span> + <span class="nb">str</span><span class="p">(</span><span class="n">left</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">right</span><span class="p">)))</span> + + <span class="k">return</span> <span class="n">area</span></div> + +<div class="viewcode-block" id="check_levels"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_levels">[docs]</a><span class="k">def</span> <span class="nf">check_levels</span><span class="p">(</span><span class="n">levelist</span><span class="p">,</span> <span class="n">level</span><span class="p">):</span> + <span class="sd">'''Defines correct level list and guarantees that the maximum level is</span> +<span class="sd"> one of the available maximum levels.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> levelist : str</span> +<span class="sd"> Specifies the level list.</span> +<span class="sd"> Examples: model level: 1/to/137, pressure levels: 500/to/1000</span> + +<span class="sd"> level : str</span> +<span class="sd"> Specifies the maximum level.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> levelist : str</span> +<span class="sd"> Specifies the required levels. It has to have a valid</span> +<span class="sd"> correspondence to the selected levtype.</span> +<span class="sd"> Examples: model level: 1/to/137, pressure levels: 500/to/1000</span> + +<span class="sd"> level : str</span> +<span class="sd"> Specifies the maximum level. It has to be one of the</span> +<span class="sd"> available maximum level number as contained in the variable</span> +<span class="sd"> MAX_LEVEL_LIST in "_config". E.g. [16, 19, 31, 40, 50, 60, 62, 91, 137]</span> + +<span class="sd"> '''</span> + <span class="c1"># assure consistency of levelist and level</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">levelist</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">level</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'ERROR: neither levelist nor level '</span> + <span class="s1">'specified in CONTROL file'</span><span class="p">)</span> + <span class="k">elif</span> <span class="ow">not</span> <span class="n">levelist</span> <span class="ow">and</span> <span class="n">level</span><span class="p">:</span> + <span class="n">levelist</span> <span class="o">=</span> <span class="s1">'1/to/'</span> <span class="o">+</span> <span class="n">level</span> + <span class="k">elif</span> <span class="p">(</span><span class="n">levelist</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">level</span><span class="p">)</span> <span class="ow">or</span> \ + <span class="p">(</span><span class="n">levelist</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="n">level</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]):</span> + <span class="n">level</span> <span class="o">=</span> <span class="n">levelist</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">pass</span> + + <span class="c1"># check if max level is a valid level</span> + <span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">level</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">_config</span><span class="o">.</span><span class="n">MAX_LEVEL_LIST</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'ERROR: </span><span class="se">\n</span><span class="s1">'</span> + <span class="s1">'LEVEL must be the maximum level of a specified '</span> + <span class="s1">'level list from ECMWF, e.g. </span><span class="si">{}</span><span class="s1"> </span><span class="se">\n</span><span class="s1">'</span> + <span class="s1">'Check parameter "LEVEL" or the max level of '</span> + <span class="s1">'"LEVELIST"!'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">MAX_LEVEL_LIST</span><span class="p">)))</span> + + <span class="k">return</span> <span class="n">levelist</span><span class="p">,</span> <span class="n">level</span></div> + + +<div class="viewcode-block" id="check_ppid"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_ppid">[docs]</a><span class="k">def</span> <span class="nf">check_ppid</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">ppid</span><span class="p">):</span> + <span class="sd">'''Sets the current PPID.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> ppid : int or None</span> +<span class="sd"> Contains the ppid number provided by the command line parameter</span> +<span class="sd"> of is None otherwise.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">ppid</span><span class="p">:</span> + <span class="n">c</span><span class="o">.</span><span class="n">ppid</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getppid</span><span class="p">())</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">c</span><span class="o">.</span><span class="n">ppid</span> <span class="o">=</span> <span class="n">ppid</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="check_purefc"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_purefc">[docs]</a><span class="k">def</span> <span class="nf">check_purefc</span><span class="p">(</span><span class="n">ftype</span><span class="p">):</span> + <span class="sd">'''Check for a pure forecast mode.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> ftype : list of str</span> +<span class="sd"> List of field types.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> True or False:</span> +<span class="sd"> True if pure forecasts are to be retrieved. False if there are</span> +<span class="sd"> analysis fields in between.</span> +<span class="sd"> '''</span> + + <span class="k">if</span> <span class="s1">'AN'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">ftype</span> <span class="ow">and</span> <span class="s1">'4V'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">ftype</span><span class="p">:</span> + <span class="c1"># pure forecast</span> + <span class="k">return</span> <span class="mi">1</span> + + <span class="k">return</span> <span class="mi">0</span></div> + + +<div class="viewcode-block" id="check_step"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_step">[docs]</a><span class="k">def</span> <span class="nf">check_step</span><span class="p">(</span><span class="n">step</span><span class="p">):</span> + <span class="sd">'''Checks on step format and convert into a list of steps.</span> + +<span class="sd"> If the steps were defined with "to" and "by" they are converted into</span> +<span class="sd"> a list of steps. If the steps were set in a string, it is</span> +<span class="sd"> converted into a list.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> step : list of str or str</span> +<span class="sd"> Specifies the forecast time step from forecast base time.</span> +<span class="sd"> Valid values are hours (HH) from forecast base time.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> step : list of str</span> +<span class="sd"> List of forecast steps in format e.g. [001, 002, ...]</span> +<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="k">if</span> <span class="s1">'/'</span> <span class="ow">in</span> <span class="n">step</span><span class="p">:</span> + <span class="n">steps</span> <span class="o">=</span> <span class="n">step</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> + <span class="k">if</span> <span class="s1">'to'</span> <span class="ow">in</span> <span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="s1">'by'</span> <span class="ow">in</span> <span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> + <span class="n">ilist</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> + <span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> + <span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">[</span><span class="mi">4</span><span class="p">]))</span> + <span class="n">step</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">ilist</span><span class="p">]</span> + <span class="k">elif</span> <span class="s1">'to'</span> <span class="ow">in</span> <span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="s1">'by'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> + <span class="n">my_error</span><span class="p">(</span><span class="n">step</span> <span class="o">+</span> <span class="s1">':</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span> + <span class="s1">'if "to" is used in steps parameter, '</span> + <span class="s1">'please use "by" as well'</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">step</span> <span class="o">=</span> <span class="n">steps</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">step</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> + <span class="n">step</span> <span class="o">=</span> <span class="p">[</span><span class="n">step</span><span class="p">]</span> + + <span class="k">return</span> <span class="n">step</span></div> + +<div class="viewcode-block" id="check_type"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_type">[docs]</a><span class="k">def</span> <span class="nf">check_type</span><span class="p">(</span><span class="n">ftype</span><span class="p">,</span> <span class="n">steps</span><span class="p">):</span> + <span class="sd">'''Check if type variable is of type list and if analysis field has</span> +<span class="sd"> forecast step 0.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> ftype : list of str or str</span> +<span class="sd"> List of field types.</span> + +<span class="sd"> steps : str</span> +<span class="sd"> Specifies the forecast time step from forecast base time.</span> +<span class="sd"> Valid values are hours (HH) from forecast base time.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> ftype : list of str</span> +<span class="sd"> List of field types.</span> +<span class="sd"> '''</span> + <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ftype</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> + <span class="n">ftype</span> <span class="o">=</span> <span class="p">[</span><span class="n">ftype</span><span class="p">]</span> + + <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">ftype</span><span class="p">):</span> + <span class="k">if</span> <span class="n">ftype</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'AN'</span> <span class="ow">and</span> <span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Analysis retrievals must have STEP = 0 (now set to 0)'</span><span class="p">)</span> + <span class="n">ftype</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span> + + <span class="k">return</span> <span class="n">ftype</span></div> + +<div class="viewcode-block" id="check_time"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_time">[docs]</a><span class="k">def</span> <span class="nf">check_time</span><span class="p">(</span><span class="n">ftime</span><span class="p">):</span> + <span class="sd">'''Check if time variable is of type list. Otherwise convert to list.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> ftime : list of str or str</span> +<span class="sd"> The time in hours of the field.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> ftime : list of str</span> +<span class="sd"> The time in hours of the field.</span> +<span class="sd"> '''</span> + <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ftime</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> + <span class="n">ftime</span> <span class="o">=</span> <span class="p">[</span><span class="n">ftime</span><span class="p">]</span> + + <span class="k">return</span> <span class="n">ftime</span></div> + +<div class="viewcode-block" id="check_len_type_time_step"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_len_type_time_step">[docs]</a><span class="k">def</span> <span class="nf">check_len_type_time_step</span><span class="p">(</span><span class="n">ftype</span><span class="p">,</span> <span class="n">ftime</span><span class="p">,</span> <span class="n">steps</span><span class="p">,</span> <span class="n">maxstep</span><span class="p">,</span> <span class="n">purefc</span><span class="p">):</span> + <span class="sd">'''Check if</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> ftype : list of str</span> +<span class="sd"> List of field types.</span> + +<span class="sd"> ftime : list of str or str</span> +<span class="sd"> The time in hours of the field.</span> + +<span class="sd"> steps : str</span> +<span class="sd"> Specifies the forecast time step from forecast base time.</span> +<span class="sd"> Valid values are hours (HH) from forecast base time.</span> + +<span class="sd"> maxstep : int</span> +<span class="sd"> The maximum forecast time step in hours from the forecast base time.</span> +<span class="sd"> This is the maximum step for non flux (accumulated) forecast data.</span> + +<span class="sd"> purefc : int</span> +<span class="sd"> Switch for definition of pure forecast mode or not.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> ftype : list of str</span> +<span class="sd"> List of field types.</span> + +<span class="sd"> ftime : list of str</span> +<span class="sd"> The time in hours of the field.</span> + +<span class="sd"> steps : str</span> +<span class="sd"> Specifies the forecast time step from forecast base time.</span> +<span class="sd"> Valid values are hours (HH) from forecast base time.</span> +<span class="sd"> '''</span> + <span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">ftype</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">ftime</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">steps</span><span class="p">):</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'ERROR: The number of field types, times and steps '</span> + <span class="s1">'are not the same! Please check the setting in the '</span> + <span class="s1">'CONTROL file!'</span><span class="p">)</span> + + <span class="c1"># if pure forecast is selected and only one field type/time is set</span> + <span class="c1"># prepare a complete list of type/time/step combination upto maxstep</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">ftype</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">purefc</span><span class="p">:</span> + <span class="n">nftype</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">nsteps</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">nftime</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">maxstep</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span> + <span class="n">nftype</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ftype</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + <span class="n">nsteps</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">))</span> + <span class="n">nftime</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ftime</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + <span class="k">return</span> <span class="n">nftype</span><span class="p">,</span> <span class="n">nftime</span><span class="p">,</span> <span class="n">nsteps</span> + + <span class="k">return</span> <span class="n">ftype</span><span class="p">,</span> <span class="n">ftime</span><span class="p">,</span> <span class="n">steps</span></div> + +<div class="viewcode-block" id="check_mail"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_mail">[docs]</a><span class="k">def</span> <span class="nf">check_mail</span><span class="p">(</span><span class="n">mail</span><span class="p">):</span> + <span class="sd">'''Check the string of mail addresses, seperate them and convert to a list.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> mail : list of str or str</span> +<span class="sd"> Contains email addresses for notifications.</span> +<span class="sd"> It might also contain just the ecmwf user name which will trigger</span> +<span class="sd"> mailing to the associated email address for this user.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> mail : list of str</span> +<span class="sd"> Contains email addresses for notifications.</span> +<span class="sd"> It might also contain just the ecmwf user name which will trigger</span> +<span class="sd"> mailing to the associated email address for this user.</span> + +<span class="sd"> '''</span> + <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mail</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> + <span class="k">if</span> <span class="s1">','</span> <span class="ow">in</span> <span class="n">mail</span><span class="p">:</span> + <span class="n">mail</span> <span class="o">=</span> <span class="n">mail</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">)</span> + <span class="k">elif</span> <span class="s1">' '</span> <span class="ow">in</span> <span class="n">mail</span><span class="p">:</span> + <span class="n">mail</span> <span class="o">=</span> <span class="n">mail</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">mail</span> <span class="o">=</span> <span class="p">[</span><span class="n">mail</span><span class="p">]</span> + + <span class="k">return</span> <span class="n">mail</span></div> + +<div class="viewcode-block" id="check_queue"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_queue">[docs]</a><span class="k">def</span> <span class="nf">check_queue</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">gateway</span><span class="p">,</span> <span class="n">destination</span><span class="p">,</span> <span class="n">ecuid</span><span class="p">,</span> <span class="n">ecgid</span><span class="p">):</span> + <span class="sd">'''Check if the necessary ECMWF parameters are set if the queue is</span> +<span class="sd"> one of the QUEUES_LIST (in _config).</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> queue : str</span> +<span class="sd"> Name of the queue if submitted to the ECMWF servers.</span> +<span class="sd"> Used to check if ecuid, ecgid, gateway and destination</span> +<span class="sd"> are set correctly and are not empty.</span> + +<span class="sd"> gateway : str</span> +<span class="sd"> The address of the gateway server.</span> + +<span class="sd"> destination : str</span> +<span class="sd"> The name of the destination of the gateway server for data</span> +<span class="sd"> transfer through ectrans. E.g. name@genericSftp</span> + +<span class="sd"> ecuid : str</span> +<span class="sd"> ECMWF user id.</span> + +<span class="sd"> ecgid : str</span> +<span class="sd"> ECMWF group id.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<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="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">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> + <span class="sd">'''Check if output and flexpart pathes are set.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> idir : str</span> +<span class="sd"> Path to the temporary directory for MARS retrieval data.</span> + +<span class="sd"> odir : str</span> +<span class="sd"> Path to the final output directory where the FLEXPART input files</span> +<span class="sd"> will be stored.</span> + +<span class="sd"> fpdir : str</span> +<span class="sd"> Path to FLEXPART root directory.</span> + +<span class="sd"> fedir : str</span> +<span class="sd"> Path to flex_extract root directory.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> odir : str</span> +<span class="sd"> Path to the final output directory where the FLEXPART input files</span> +<span class="sd"> will be stored.</span> + +<span class="sd"> fpdir : str</span> +<span class="sd"> Path to FLEXPART root directory.</span> + +<span class="sd"> '''</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">fpdir</span><span class="p">:</span> + <span class="n">fpdir</span> <span class="o">=</span> <span class="n">fedir</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">odir</span><span class="p">:</span> + <span class="n">odir</span> <span class="o">=</span> <span class="n">idir</span> + + <span class="k">return</span> <span class="n">odir</span><span class="p">,</span> <span class="n">fpdir</span></div> + +<div class="viewcode-block" id="check_dates"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_dates">[docs]</a><span class="k">def</span> <span class="nf">check_dates</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span> + <span class="sd">'''Checks if there is at least a start date for a one day retrieval.</span> + +<span class="sd"> Checks if end date lies after start date and end date is set.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> start : str</span> +<span class="sd"> The start date of the retrieval job.</span> + +<span class="sd"> end : str</span> +<span class="sd"> The end date of the retrieval job.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> start : str</span> +<span class="sd"> The start date of the retrieval job.</span> + +<span class="sd"> end : str</span> +<span class="sd"> The end date of the retrieval job.</span> + +<span class="sd"> '''</span> + <span class="c1"># check for having at least a starting date</span> + <span class="c1"># otherwise program is not allowed to run</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'start_date was neither specified in command line nor '</span> + <span class="s1">'in CONTROL file.</span><span class="se">\n</span><span class="s1">'</span> + <span class="s1">'Try "</span><span class="si">{}</span><span class="s1"> -h" to print usage information'</span> + <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span> + + <span class="c1"># retrieve just one day if end_date isn't set</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">end</span><span class="p">:</span> + <span class="n">end</span> <span class="o">=</span> <span class="n">start</span> + + <span class="n">dstart</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> + <span class="n">dend</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> + <span class="k">if</span> <span class="n">dstart</span> <span class="o">></span> <span class="n">dend</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'ERROR: Start date is after end date! </span><span class="se">\n</span><span class="s1">'</span> + <span class="s1">'Please adapt the dates in CONTROL file or '</span> + <span class="s1">'command line! (start=</span><span class="si">{}</span><span class="s1">; end=</span><span class="si">{}</span><span class="s1">)'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span> + + <span class="k">return</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span></div> + +<div class="viewcode-block" id="check_maxstep"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_maxstep">[docs]</a><span class="k">def</span> <span class="nf">check_maxstep</span><span class="p">(</span><span class="n">maxstep</span><span class="p">,</span> <span class="n">steps</span><span class="p">):</span> + <span class="sd">'''Convert maxstep into integer if it is already given. Otherwise, select</span> +<span class="sd"> maxstep by going through the steps list.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> maxstep : str</span> +<span class="sd"> The maximum forecast time step in hours from the forecast base time.</span> +<span class="sd"> This is the maximum step for non flux (accumulated) forecast data.</span> + +<span class="sd"> steps : str</span> +<span class="sd"> Specifies the forecast time step from forecast base time.</span> +<span class="sd"> Valid values are hours (HH) from forecast base time.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> maxstep : int</span> +<span class="sd"> The maximum forecast time step in hours from the forecast base time.</span> +<span class="sd"> This is the maximum step for non flux (accumulated) forecast data.</span> + +<span class="sd"> '''</span> + <span class="c1"># if maxstep wasn't provided</span> + <span class="c1"># search for it in the "step" parameter</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">maxstep</span><span class="p">:</span> + <span class="n">maxstep</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">steps</span><span class="p">:</span> + <span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">></span> <span class="n">maxstep</span><span class="p">:</span> + <span class="n">maxstep</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">maxstep</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">maxstep</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">maxstep</span></div> + +<div class="viewcode-block" id="check_basetime"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_basetime">[docs]</a><span class="k">def</span> <span class="nf">check_basetime</span><span class="p">(</span><span class="n">basetime</span><span class="p">):</span> + <span class="sd">'''Check if basetime is set and contains one of the two</span> +<span class="sd"> possible values (0, 12).</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> basetime : int or str or None</span> +<span class="sd"> The time for a half day retrieval. The 12 hours upfront are to be</span> +<span class="sd"> retrieved.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> basetime : int or None</span> +<span class="sd"> The time for a half day retrieval. The 12 hours upfront are to be</span> +<span class="sd"> retrieved.</span> +<span class="sd"> '''</span> + <span class="k">if</span> <span class="n">basetime</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">basetime</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">basetime</span><span class="p">)</span> + <span class="k">if</span> <span class="n">basetime</span> <span class="o">!=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">basetime</span> <span class="o">!=</span> <span class="mi">12</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'ERROR: Basetime has an invalid value '</span> + <span class="s1">'-> </span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">basetime</span><span class="p">)))</span> + <span class="k">return</span> <span class="n">basetime</span></div> + +<div class="viewcode-block" id="check_request"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_request">[docs]</a><span class="k">def</span> <span class="nf">check_request</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">marsfile</span><span class="p">):</span> + <span class="sd">'''Check if there is an old mars request file and remove it.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> request : int</span> +<span class="sd"> Selects the mode of retrieval.</span> +<span class="sd"> 0: Retrieves the data from ECMWF.</span> +<span class="sd"> 1: Prints the mars requests to an output file.</span> +<span class="sd"> 2: Retrieves the data and prints the mars request.</span> + +<span class="sd"> marsfile : str</span> +<span class="sd"> Path to the mars request file.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="k">if</span> <span class="n">request</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">marsfile</span><span class="p">):</span> + <span class="n">silent_remove</span><span class="p">(</span><span class="n">marsfile</span><span class="p">)</span> + <span class="k">return</span></div> + +<div class="viewcode-block" id="check_public"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_public">[docs]</a><span class="k">def</span> <span class="nf">check_public</span><span class="p">(</span><span class="n">public</span><span class="p">,</span> <span class="n">dataset</span><span class="p">):</span> + <span class="sd">'''Check wether the dataset parameter is set for a</span> +<span class="sd"> public data set retrieval.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> public : int</span> +<span class="sd"> Specifies if public data are to be retrieved or not.</span> + +<span class="sd"> dataset : str</span> +<span class="sd"> Specific name which identifies the public dataset.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="k">if</span> <span class="n">public</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">dataset</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'ERROR: If public mars data wants to be retrieved, '</span> + <span class="s1">'the "dataset"-parameter has to be set too!'</span><span class="p">)</span> + <span class="k">return</span></div> + +<div class="viewcode-block" id="check_acctype"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_acctype">[docs]</a><span class="k">def</span> <span class="nf">check_acctype</span><span class="p">(</span><span class="n">acctype</span><span class="p">,</span> <span class="n">ftype</span><span class="p">):</span> + <span class="sd">'''Guarantees that the accumulation field type is set.</span> + +<span class="sd"> If not set, it is derivated as in the old method (TYPE[1]).</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> acctype : str</span> +<span class="sd"> The field type for the accumulated forecast fields.</span> + +<span class="sd"> ftype : list of str</span> +<span class="sd"> List of field types.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> acctype : str</span> +<span class="sd"> The field type for the accumulated forecast fields.</span> +<span class="sd"> '''</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">acctype</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... Control parameter ACCTYPE was not defined.'</span><span class="p">)</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">ftype</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">ftype</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'AN'</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... Use same field type as for the non-flux fields.'</span><span class="p">)</span> + <span class="n">acctype</span> <span class="o">=</span> <span class="n">ftype</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> + <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">ftype</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">ftype</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'AN'</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... Use old setting by using TYPE[1] for flux forecast!'</span><span class="p">)</span> + <span class="n">acctype</span> <span class="o">=</span> <span class="n">ftype</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> + <span class="k">except</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'ERROR: Accumulation field type could not be set!'</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">if</span> <span class="n">acctype</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'AN'</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'ERROR: Accumulation forecast fields can not be '</span> + <span class="s1">'of type "analysis"!'</span><span class="p">)</span> + <span class="k">return</span> <span class="n">acctype</span></div> + + +<div class="viewcode-block" id="check_acctime"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_acctime">[docs]</a><span class="k">def</span> <span class="nf">check_acctime</span><span class="p">(</span><span class="n">acctime</span><span class="p">,</span> <span class="n">marsclass</span><span class="p">,</span> <span class="n">purefc</span><span class="p">,</span> <span class="n">time</span><span class="p">):</span> + <span class="sd">'''Guarantees that the accumulation forecast times were set.</span> + +<span class="sd"> If it is not set, it tries to set the value for some of the</span> +<span class="sd"> most commonly used data sets. Otherwise it raises an error.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> acctime : str</span> +<span class="sd"> The starting time from the accumulated forecasts.</span> + +<span class="sd"> marsclass : str</span> +<span class="sd"> ECMWF data classification identifier.</span> + +<span class="sd"> purefc : int</span> +<span class="sd"> Switch for definition of pure forecast mode or not.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> acctime : str</span> +<span class="sd"> The starting time from the accumulated forecasts.</span> +<span class="sd"> '''</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">acctime</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... Control parameter ACCTIME was not defined.'</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... Value will be set depending on field type:</span><span class="se">\n</span><span class="s1"> '</span> + <span class="s1">'</span><span class="se">\t\t</span><span class="s1"> EA=06/18</span><span class="se">\n\t\t</span><span class="s1"> EI/OD=00/12</span><span class="se">\n\t\t</span><span class="s1"> EP=18'</span><span class="p">)</span> + <span class="k">if</span> <span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EA'</span><span class="p">:</span> <span class="c1"># Era 5</span> + <span class="n">acctime</span> <span class="o">=</span> <span class="s1">'06/18'</span> + <span class="k">elif</span> <span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EI'</span><span class="p">:</span> <span class="c1"># Era-Interim</span> + <span class="n">acctime</span> <span class="o">=</span> <span class="s1">'00/12'</span> + <span class="k">elif</span> <span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EP'</span><span class="p">:</span> <span class="c1"># CERA</span> + <span class="n">acctime</span> <span class="o">=</span> <span class="s1">'18'</span> + <span class="k">elif</span> <span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'OD'</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">purefc</span><span class="p">:</span> <span class="c1"># On-demand</span> + <span class="n">acctime</span> <span class="o">=</span> <span class="s1">'00/12'</span> + <span class="k">elif</span> <span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'OD'</span> <span class="ow">and</span> <span class="n">purefc</span><span class="p">:</span> <span class="c1"># On-demand</span> + <span class="n">acctime</span> <span class="o">=</span> <span class="n">time</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'ERROR: Accumulation forecast time can not '</span> + <span class="s1">'automatically be derived!'</span><span class="p">)</span> + <span class="k">return</span> <span class="n">acctime</span></div> + +<div class="viewcode-block" id="check_accmaxstep"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_accmaxstep">[docs]</a><span class="k">def</span> <span class="nf">check_accmaxstep</span><span class="p">(</span><span class="n">accmaxstep</span><span class="p">,</span> <span class="n">marsclass</span><span class="p">,</span> <span class="n">purefc</span><span class="p">,</span> <span class="n">maxstep</span><span class="p">):</span> + <span class="sd">'''Guarantees that the accumulation forecast step were set.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> accmaxstep : str</span> +<span class="sd"> The maximum forecast step for the accumulated forecast fields.</span> + +<span class="sd"> marsclass : str</span> +<span class="sd"> ECMWF data classification identifier.</span> + +<span class="sd"> purefc : int</span> +<span class="sd"> Switch for definition of pure forecast mode or not.</span> + +<span class="sd"> maxstep : str</span> +<span class="sd"> The maximum forecast time step in hours from the forecast base time.</span> +<span class="sd"> This is the maximum step for non flux (accumulated) forecast data.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> accmaxstep : str</span> +<span class="sd"> The maximum forecast step for the accumulated forecast fields.</span> +<span class="sd"> '''</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">accmaxstep</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... Control parameter ACCMAXSTEP was not defined.'</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... Value will be set depending on field type/time: '</span> + <span class="s1">'</span><span class="se">\n\t\t</span><span class="s1"> EA/EI/OD=12</span><span class="se">\n\t\t</span><span class="s1"> EP=24'</span><span class="p">)</span> + <span class="k">if</span> <span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'EA'</span><span class="p">,</span> <span class="s1">'EI'</span><span class="p">,</span> <span class="s1">'OD'</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">purefc</span><span class="p">:</span> + <span class="c1"># Era 5, Era-Interim, On-demand operational</span> + <span class="n">accmaxstep</span> <span class="o">=</span> <span class="s1">'12'</span> + <span class="k">elif</span> <span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EP'</span><span class="p">:</span> <span class="c1"># CERA</span> + <span class="n">accmaxstep</span> <span class="o">=</span> <span class="s1">'24'</span> + <span class="k">elif</span> <span class="n">purefc</span> <span class="ow">and</span> <span class="n">accmaxstep</span> <span class="o">!=</span> <span class="n">maxstep</span><span class="p">:</span> + <span class="n">accmaxstep</span> <span class="o">=</span> <span class="n">maxstep</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... For pure forecast mode, the accumulated forecast must '</span> + <span class="s1">'have the same maxstep as the normal forecast fields!</span><span class="se">\n</span><span class="s1">'</span> + <span class="s1">'</span><span class="se">\t\t</span><span class="s1"> Accmaxstep was set to maxstep!'</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'ERROR: Accumulation forecast step can not '</span> + <span class="s1">'automatically be derived!'</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">if</span> <span class="n">purefc</span> <span class="ow">and</span> <span class="nb">int</span><span class="p">(</span><span class="n">accmaxstep</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">int</span><span class="p">(</span><span class="n">maxstep</span><span class="p">):</span> + <span class="n">accmaxstep</span> <span class="o">=</span> <span class="n">maxstep</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... For pure forecast mode, the accumulated forecast must '</span> + <span class="s1">'have the same maxstep as the normal forecast fields!</span><span class="se">\n</span><span class="s1">'</span> + <span class="s1">'</span><span class="se">\t\t</span><span class="s1"> Accmaxstep was set to maxstep!'</span><span class="p">)</span> + <span class="k">return</span> <span class="n">accmaxstep</span></div> + +<div class="viewcode-block" id="check_addpar"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_addpar">[docs]</a><span class="k">def</span> <span class="nf">check_addpar</span><span class="p">(</span><span class="n">addpar</span><span class="p">):</span> + <span class="sd">'''Check that addpar has correct format of additional parameters in</span> +<span class="sd"> a single string, so that it can be easily appended to the hard coded</span> +<span class="sd"> parameters that are retrieved in any case.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> addpar : str or list of str</span> +<span class="sd"> List of additional parameters to be retrieved.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> addpar : str</span> +<span class="sd"> List of additional parameters to be retrieved.</span> +<span class="sd"> '''</span> + + <span class="k">if</span> <span class="n">addpar</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">addpar</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span> + <span class="k">if</span> <span class="s1">'/'</span> <span class="ow">in</span> <span class="n">addpar</span><span class="p">:</span> + <span class="n">parlist</span> <span class="o">=</span> <span class="n">addpar</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> + <span class="n">parlist</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">parlist</span> <span class="k">if</span> <span class="n">p</span> <span class="ow">is</span> <span class="ow">not</span> <span class="s1">''</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">parlist</span> <span class="o">=</span> <span class="p">[</span><span class="n">addpar</span><span class="p">]</span> + + <span class="n">addpar</span> <span class="o">=</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="s1">'/'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">parlist</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">addpar</span></div> + + +<div class="viewcode-block" id="check_job_chunk"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_job_chunk">[docs]</a><span class="k">def</span> <span class="nf">check_job_chunk</span><span class="p">(</span><span class="n">job_chunk</span><span class="p">):</span> + <span class="sd">'''Checks that if job chunk is set, the number is positive and non zero.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> job_chunk : int</span> +<span class="sd"> The number of days for a single job script.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> job_chunk : int</span> +<span class="sd"> The number of days for a single job script.</span> +<span class="sd"> '''</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">job_chunk</span><span class="p">:</span> + <span class="k">return</span> <span class="n">job_chunk</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">job_chunk</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">job_chunk</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">job_chunk</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'ERROR: The number of job chunk is negative!</span><span class="se">\n</span><span class="s1">'</span> + <span class="s1">'It has to be a positive number!'</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">job_chunk</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="n">job_chunk</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">pass</span> + + <span class="k">return</span> <span class="n">job_chunk</span></div> + + +<div class="viewcode-block" id="check_number"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_number">[docs]</a><span class="k">def</span> <span class="nf">check_number</span><span class="p">(</span><span class="n">number</span><span class="p">):</span> + <span class="sd">'''Check for correct string format of ensemble member numbers.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> number : str</span> +<span class="sd"> List of ensemble member forecast runs.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> number : str</span> +<span class="sd"> String with list of ensemble member forecast runs. E.g. '01/02/03/04'</span> +<span class="sd"> '''</span> + + <span class="k">if</span> <span class="s1">'/'</span> <span class="ow">in</span> <span class="n">number</span><span class="p">:</span> + <span class="n">numbers</span> <span class="o">=</span> <span class="n">number</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> + <span class="k">if</span> <span class="s1">'to'</span> <span class="ow">in</span> <span class="n">number</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="s1">'by'</span> <span class="ow">in</span> <span class="n">number</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> + <span class="n">number</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">numbers</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> <span class="o">+</span> <span class="s1">'/TO/'</span> <span class="o">+</span> \ + <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">numbers</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span> <span class="o">+</span> <span class="s1">'/BY/'</span> <span class="o">+</span> \ + <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">numbers</span><span class="p">[</span><span class="mi">4</span><span class="p">]))</span> + <span class="k">elif</span> <span class="s1">'to'</span> <span class="ow">in</span> <span class="n">number</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="s1">'by'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">number</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> + <span class="n">number</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">numbers</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> <span class="o">+</span> <span class="s1">'/TO/'</span> <span class="o">+</span> \ + <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">numbers</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">numbers</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">numbers</span><span class="p">]</span> + <span class="n">number</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">/'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">numbers</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">number</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span> + <span class="n">number</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">number</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">pass</span> + + <span class="k">return</span> <span class="n">number</span></div> +</pre></div> + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/_modules/disaggregation.html b/Documentation/html/_modules/disaggregation.html new file mode 100644 index 0000000000000000000000000000000000000000..929f61d296eadcea506dee6b0df9b8342e76a94d --- /dev/null +++ b/Documentation/html/_modules/disaggregation.html @@ -0,0 +1,622 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>disaggregation — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="index.html">Module code</a> »</li> + + <li>disaggregation</li> + + + <li class="wy-breadcrumbs-aside"> + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for disaggregation</h1><div class="highlight"><pre> +<span></span><span class="ch">#!/usr/bin/env python3</span> +<span class="c1"># -*- coding: utf-8 -*-</span> +<span class="c1">#*******************************************************************************</span> +<span class="c1"># @Author: Anne Philipp (University of Vienna)</span> +<span class="c1">#</span> +<span class="c1"># @Date: March 2018</span> +<span class="c1">#</span> +<span class="c1"># @Change History:</span> +<span class="c1">#</span> +<span class="c1"># November 2015 - Leopold Haimberger (University of Vienna):</span> +<span class="c1"># - migration of the methods dapoly and darain from Fortran</span> +<span class="c1"># (flex_extract_v6 and earlier) to Python</span> +<span class="c1">#</span> +<span class="c1"># April 2018 - Anne Philipp (University of Vienna):</span> +<span class="c1"># - applied PEP8 style guide</span> +<span class="c1"># - added structured documentation</span> +<span class="c1"># - outsourced the disaggregation functions dapoly and darain</span> +<span class="c1"># to a new module named disaggregation</span> +<span class="c1"># - added the new disaggregation method for precipitation</span> +<span class="c1">#</span> +<span class="c1"># @License:</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> +<span class="c1">#</span> +<span class="c1"># SPDX-License-Identifier: CC-BY-4.0</span> +<span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> +<span class="c1">#</span> +<span class="c1"># @Methods:</span> +<span class="c1"># - dapoly</span> +<span class="c1"># - darain</span> +<span class="c1"># - IA3</span> +<span class="c1">#*******************************************************************************</span> +<span class="sd">'''Disaggregation of deaccumulated flux data from an ECMWF model FG field.</span> + +<span class="sd">Initially the flux data to be concerned are:</span> +<span class="sd"> - large-scale precipitation</span> +<span class="sd"> - convective precipitation</span> +<span class="sd"> - surface sensible heat flux</span> +<span class="sd"> - surface solar radiation</span> +<span class="sd"> - u stress</span> +<span class="sd"> - v stress</span> + +<span class="sd">Different versions of disaggregation is provided for rainfall</span> +<span class="sd">data (darain, modified linear) and the surface fluxes and</span> +<span class="sd">stress data (dapoly, cubic polynomial).</span> +<span class="sd">'''</span> + +<span class="c1"># ------------------------------------------------------------------------------</span> +<span class="c1"># MODULES</span> +<span class="c1"># ------------------------------------------------------------------------------</span> + +<span class="c1"># ------------------------------------------------------------------------------</span> +<span class="c1"># FUNCTIONS</span> +<span class="c1"># ------------------------------------------------------------------------------</span> +<div class="viewcode-block" id="dapoly"><a class="viewcode-back" href="../Documentation/Api/api_python.html#disaggregation.dapoly">[docs]</a><span class="k">def</span> <span class="nf">dapoly</span><span class="p">(</span><span class="n">alist</span><span class="p">):</span> + <span class="sd">"""Cubic polynomial interpolation of deaccumulated fluxes.</span> + +<span class="sd"> Interpolation of deaccumulated fluxes of an ECMWF model FG field</span> +<span class="sd"> using a cubic polynomial solution which conserves the integrals</span> +<span class="sd"> of the fluxes within each timespan.</span> +<span class="sd"> Disaggregation is done for 4 accumluated timespans which</span> +<span class="sd"> generates a new, disaggregated value which is output at the</span> +<span class="sd"> central point of the 4 accumulation timespans.</span> +<span class="sd"> This new point is used for linear interpolation of the complete</span> +<span class="sd"> timeseries afterwards.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> alist : list of array of float</span> +<span class="sd"> List of 4 timespans as 2-dimensional, horizontal fields.</span> +<span class="sd"> E.g. [[array_t1], [array_t2], [array_t3], [array_t4]]</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> nfield : array of float</span> +<span class="sd"> Interpolated flux at central point of accumulation timespan.</span> + +<span class="sd"> Note</span> +<span class="sd"> ----</span> +<span class="sd"> March 2000 : P. JAMES</span> +<span class="sd"> Original author</span> + +<span class="sd"> June 2003 : A. BECK</span> +<span class="sd"> Adaptations</span> + +<span class="sd"> November 2015 : Leopold Haimberger (University of Vienna)</span> +<span class="sd"> Migration from Fortran to Python</span> + +<span class="sd"> """</span> + + <span class="n">pya</span> <span class="o">=</span> <span class="p">(</span><span class="n">alist</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">-</span> <span class="n">alist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="mf">3.</span> <span class="o">*</span> <span class="p">(</span><span class="n">alist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">alist</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span> <span class="o">/</span> <span class="mf">6.</span> + <span class="n">pyb</span> <span class="o">=</span> <span class="p">(</span><span class="n">alist</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="n">alist</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">/</span> <span class="mf">2.</span> <span class="o">-</span> <span class="n">alist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="mf">9.</span> <span class="o">*</span> <span class="n">pya</span> <span class="o">/</span> <span class="mf">2.</span> + <span class="n">pyc</span> <span class="o">=</span> <span class="n">alist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">alist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="mf">7.</span> <span class="o">*</span> <span class="n">pya</span> <span class="o">/</span> <span class="mf">2.</span> <span class="o">-</span> <span class="mf">2.</span> <span class="o">*</span> <span class="n">pyb</span> + <span class="n">pyd</span> <span class="o">=</span> <span class="n">alist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">pya</span> <span class="o">/</span> <span class="mf">4.</span> <span class="o">-</span> <span class="n">pyb</span> <span class="o">/</span> <span class="mf">3.</span> <span class="o">-</span> <span class="n">pyc</span> <span class="o">/</span> <span class="mf">2.</span> + <span class="n">nfield</span> <span class="o">=</span> <span class="mf">8.</span> <span class="o">*</span> <span class="n">pya</span> <span class="o">+</span> <span class="mf">4.</span> <span class="o">*</span> <span class="n">pyb</span> <span class="o">+</span> <span class="mf">2.</span> <span class="o">*</span> <span class="n">pyc</span> <span class="o">+</span> <span class="n">pyd</span> + + <span class="k">return</span> <span class="n">nfield</span></div> + + +<div class="viewcode-block" id="darain"><a class="viewcode-back" href="../Documentation/Api/api_python.html#disaggregation.darain">[docs]</a><span class="k">def</span> <span class="nf">darain</span><span class="p">(</span><span class="n">alist</span><span class="p">):</span> + <span class="sd">"""Linear interpolation of deaccumulated fluxes.</span> + +<span class="sd"> Interpolation of deaccumulated fluxes of an ECMWF model FG rainfall</span> +<span class="sd"> field using a modified linear solution which conserves the integrals</span> +<span class="sd"> of the fluxes within each timespan.</span> +<span class="sd"> Disaggregation is done for 4 accumluated timespans which generates</span> +<span class="sd"> a new, disaggregated value which is output at the central point</span> +<span class="sd"> of the 4 accumulation timespans. This new point is used for linear</span> +<span class="sd"> interpolation of the complete timeseries afterwards.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> alist : list of array of float</span> +<span class="sd"> List of 4 timespans as 2-dimensional, horizontal fields.</span> +<span class="sd"> E.g. [[array_t1], [array_t2], [array_t3], [array_t4]]</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> nfield : array of float</span> +<span class="sd"> Interpolated flux at central point of accumulation timespan.</span> + +<span class="sd"> Note</span> +<span class="sd"> ----</span> +<span class="sd"> March 2000 : P. JAMES</span> +<span class="sd"> Original author</span> + +<span class="sd"> June 2003 : A. BECK</span> +<span class="sd"> Adaptations</span> + +<span class="sd"> November 2015 : Leopold Haimberger (University of Vienna)</span> +<span class="sd"> Migration from Fortran to Python</span> +<span class="sd"> """</span> + + <span class="n">xa</span> <span class="o">=</span> <span class="n">alist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> + <span class="n">xb</span> <span class="o">=</span> <span class="n">alist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> + <span class="n">xc</span> <span class="o">=</span> <span class="n">alist</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> + <span class="n">xd</span> <span class="o">=</span> <span class="n">alist</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> + <span class="n">xa</span><span class="p">[</span><span class="n">xa</span> <span class="o"><</span> <span class="mf">0.</span><span class="p">]</span> <span class="o">=</span> <span class="mf">0.</span> + <span class="n">xb</span><span class="p">[</span><span class="n">xb</span> <span class="o"><</span> <span class="mf">0.</span><span class="p">]</span> <span class="o">=</span> <span class="mf">0.</span> + <span class="n">xc</span><span class="p">[</span><span class="n">xc</span> <span class="o"><</span> <span class="mf">0.</span><span class="p">]</span> <span class="o">=</span> <span class="mf">0.</span> + <span class="n">xd</span><span class="p">[</span><span class="n">xd</span> <span class="o"><</span> <span class="mf">0.</span><span class="p">]</span> <span class="o">=</span> <span class="mf">0.</span> + + <span class="n">xac</span> <span class="o">=</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="n">xb</span> + <span class="n">mask</span> <span class="o">=</span> <span class="n">xa</span> <span class="o">+</span> <span class="n">xc</span> <span class="o">></span> <span class="mf">0.</span> + <span class="n">xac</span><span class="p">[</span><span class="n">mask</span><span class="p">]</span> <span class="o">=</span> <span class="n">xb</span><span class="p">[</span><span class="n">mask</span><span class="p">]</span> <span class="o">*</span> <span class="n">xc</span><span class="p">[</span><span class="n">mask</span><span class="p">]</span> <span class="o">/</span> <span class="p">(</span><span class="n">xa</span><span class="p">[</span><span class="n">mask</span><span class="p">]</span> <span class="o">+</span> <span class="n">xc</span><span class="p">[</span><span class="n">mask</span><span class="p">])</span> + <span class="n">xbd</span> <span class="o">=</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="n">xc</span> + <span class="n">mask</span> <span class="o">=</span> <span class="n">xb</span> <span class="o">+</span> <span class="n">xd</span> <span class="o">></span> <span class="mf">0.</span> + <span class="n">xbd</span><span class="p">[</span><span class="n">mask</span><span class="p">]</span> <span class="o">=</span> <span class="n">xb</span><span class="p">[</span><span class="n">mask</span><span class="p">]</span> <span class="o">*</span> <span class="n">xc</span><span class="p">[</span><span class="n">mask</span><span class="p">]</span> <span class="o">/</span> <span class="p">(</span><span class="n">xb</span><span class="p">[</span><span class="n">mask</span><span class="p">]</span> <span class="o">+</span> <span class="n">xd</span><span class="p">[</span><span class="n">mask</span><span class="p">])</span> + <span class="n">nfield</span> <span class="o">=</span> <span class="n">xac</span> <span class="o">+</span> <span class="n">xbd</span> + + <span class="k">return</span> <span class="n">nfield</span></div> + +<div class="viewcode-block" id="IA3"><a class="viewcode-back" href="../Documentation/Api/api_python.html#disaggregation.IA3">[docs]</a><span class="k">def</span> <span class="nf">IA3</span><span class="p">(</span><span class="n">g</span><span class="p">):</span> + <span class="sd">""" Interpolation with a non-negative geometric mean based algorithm.</span> + +<span class="sd"> The original grid is reconstructed by adding two sampling points in each</span> +<span class="sd"> data series interval. This subgrid is used to keep all information during</span> +<span class="sd"> the interpolation within the associated interval. Additionally, an advanced</span> +<span class="sd"> monotonicity filter is applied to improve the monotonicity properties of</span> +<span class="sd"> the series.</span> + +<span class="sd"> Note</span> +<span class="sd"> ----</span> +<span class="sd"> (C) Copyright 2017-2019</span> +<span class="sd"> Sabine Hittmeir, Anne Philipp, Petra Seibert</span> + +<span class="sd"> This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="sd"> International License. To view a copy of this license, visit</span> +<span class="sd"> http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="sd"> Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> g : list of float</span> +<span class="sd"> Complete data series that will be interpolated having</span> +<span class="sd"> the dimension of the original raw series.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> f : list of float</span> +<span class="sd"> The interpolated data series with additional subgrid points.</span> +<span class="sd"> Its dimension is equal to the length of the input data series</span> +<span class="sd"> times three.</span> + + +<span class="sd"> References</span> +<span class="sd"> ----------</span> +<span class="sd"> For more information see article:</span> +<span class="sd"> Hittmeir, S.; Philipp, A.; Seibert, P. (2017): A conservative</span> +<span class="sd"> interpolation scheme for extensive quantities with application to the</span> +<span class="sd"> Lagrangian particle dispersion model FLEXPART.,</span> +<span class="sd"> Geoscientific Model Development</span> +<span class="sd"> """</span> + + <span class="c1">####################### variable description #############################</span> + <span class="c1"># #</span> + <span class="c1"># i - index variable for looping over the data series #</span> + <span class="c1"># g - input data series #</span> + <span class="c1"># f - interpolated and filtered data series with additional #</span> + <span class="c1"># grid points #</span> + <span class="c1"># fi - function value at position i, f_i #</span> + <span class="c1"># fi1 - first sub-grid function value f_i^1 #</span> + <span class="c1"># fi2 - second sub-grid function value f_i^2 #</span> + <span class="c1"># fip1 - next function value at position i+1, f_(i+1) #</span> + <span class="c1"># dt - time step #</span> + <span class="c1"># fmon - monotonicity filter #</span> + <span class="c1"># #</span> + <span class="c1">###########################################################################</span> + + + <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> + + <span class="c1"># time step</span> + <span class="n">dt</span> <span class="o">=</span> <span class="mf">1.0</span> + + <span class="c1">############### Non-negative Geometric Mean Based Algorithm ###############</span> + + <span class="c1"># for the left boundary the following boundary condition is valid:</span> + <span class="c1"># the value at t=0 of the interpolation algorithm coincides with the</span> + <span class="c1"># first data value according to the persistence hypothesis</span> + <span class="n">f</span> <span class="o">=</span> <span class="p">[</span><span class="n">g</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> + + <span class="c1"># compute two first sub-grid intervals without monotonicity check</span> + <span class="c1"># go through the data series and extend each interval by two sub-grid</span> + <span class="c1"># points and interpolate the corresponding data values</span> + <span class="c1"># except for the last interval due to boundary conditions</span> + <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span> + + <span class="c1"># as a requirement:</span> + <span class="c1"># if there is a zero data value such that g[i]=0, then the whole</span> + <span class="c1"># interval in f has to be zero to such that f[i+1]=f[i+2]=f[i+3]=0</span> + <span class="c1"># according to Eq. (6)</span> + <span class="k">if</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="mf">0.</span><span class="p">,</span> <span class="mf">0.</span><span class="p">,</span> <span class="mf">0.</span><span class="p">])</span> + + <span class="c1"># otherwise the sub-grid values are calculated and added to the list</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># temporal save of last value in interpolated list</span> + <span class="c1"># since it is the left boundary and hence the new (fi) value</span> + <span class="n">fi</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> + + <span class="c1"># the value at the end of the interval (fip1) is prescribed by the</span> + <span class="c1"># geometric mean, restricted such that non-negativity is guaranteed</span> + <span class="c1"># according to Eq. (25)</span> + <span class="n">fip1</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="mf">3.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="mf">3.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">g</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span> + + <span class="c1"># the function value at the first sub-grid point (fi1) is determined</span> + <span class="c1"># according to the equal area condition with Eq. (19)</span> + <span class="n">fi1</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fip1</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fi</span> + + <span class="c1"># the function value at the second sub-grid point (fi2) is determined</span> + <span class="c1"># according Eq. (18)</span> + <span class="n">fi2</span> <span class="o">=</span> <span class="n">fi1</span><span class="o">+</span><span class="mf">1.</span><span class="o">/</span><span class="mf">3.</span><span class="o">*</span><span class="p">(</span><span class="n">fip1</span><span class="o">-</span><span class="n">fi</span><span class="p">)</span> + + <span class="c1"># add next interval of interpolated (sub-)grid values</span> + <span class="n">f</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fi1</span><span class="p">)</span> + <span class="n">f</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fi2</span><span class="p">)</span> + <span class="n">f</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fip1</span><span class="p">)</span> + + <span class="c1"># compute rest of the data series intervals</span> + <span class="c1"># go through the data series and extend each interval by two sub-grid</span> + <span class="c1"># points and interpolate the corresponding data values</span> + <span class="c1"># except for the last interval due to boundary conditions</span> + <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">g</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> + + <span class="c1"># as a requirement:</span> + <span class="c1"># if there is a zero data value such that g[i]=0, then the whole</span> + <span class="c1"># interval in f has to be zero to such that f[i+1]=f[i+2]=f[i+3]=0</span> + <span class="c1"># according to Eq. (6)</span> + <span class="k">if</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">:</span> + <span class="c1"># apply monotonicity filter for interval before</span> + <span class="c1"># check if there is "M" or "W" shape</span> + <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> + + <span class="c1"># the monotonicity filter corrects the value at (fim1) by</span> + <span class="c1"># substituting (fim1) with (fmon), see Eq. (27), (28) and (29)</span> + <span class="n">fmon</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="mf">3.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">2</span><span class="p">],</span> + <span class="mf">3.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">],</span> + <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="p">(</span><span class="mf">18.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">2</span><span class="p">]</span> <span class="o">-</span> <span class="mf">5.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span> <span class="o">*</span> + <span class="p">(</span><span class="mf">18.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="mf">5.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))))</span> + + <span class="c1"># recomputation of the sub-grid interval values while the</span> + <span class="c1"># interval boundaries (fi) and (fip2) remains unchanged</span> + <span class="c1"># see Eq. (18) and (19)</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> + + <span class="n">f</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="mf">0.</span><span class="p">,</span> <span class="mf">0.</span><span class="p">,</span> <span class="mf">0.</span><span class="p">])</span> + + <span class="c1"># otherwise the sub-grid values are calculated and added to the list</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># temporal save of last value in interpolated list</span> + <span class="c1"># since it is the left boundary and hence the new (fi) value</span> + <span class="n">fi</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> + + <span class="c1"># the value at the end of the interval (fip1) is prescribed by the</span> + <span class="c1"># geometric mean, restricted such that non-negativity is guaranteed</span> + <span class="c1"># according to Eq. (25)</span> + <span class="n">fip1</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="mf">3.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="mf">3.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">g</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span> + + <span class="c1"># the function value at the first sub-grid point (fi1) is determined</span> + <span class="c1"># according to the equal area condition with Eq. (19)</span> + <span class="n">fi1</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fip1</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fi</span> + + <span class="c1"># the function value at the second sub-grid point (fi2) is determined</span> + <span class="c1"># according Eq. (18)</span> + <span class="n">fi2</span> <span class="o">=</span> <span class="n">fi1</span><span class="o">+</span><span class="mf">1.</span><span class="o">/</span><span class="mf">3.</span><span class="o">*</span><span class="p">(</span><span class="n">fip1</span><span class="o">-</span><span class="n">fi</span><span class="p">)</span> + + <span class="c1"># apply monotonicity filter for interval before</span> + <span class="c1"># check if there is "M" or "W" shape</span> + <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> + + <span class="c1"># the monotonicity filter corrects the value at (fim1) by</span> + <span class="c1"># substituting (fim1) with fmon, see Eq. (27), (28) and (29)</span> + <span class="n">fmon</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="mf">3.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">2</span><span class="p">],</span> + <span class="mf">3.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">],</span> + <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="p">(</span><span class="mf">18.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">2</span><span class="p">]</span> <span class="o">-</span> <span class="mf">5.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span> <span class="o">*</span> + <span class="p">(</span><span class="mf">18.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="mf">5.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))))</span> + + <span class="c1"># recomputation of the sub-grid interval values while the</span> + <span class="c1"># interval boundaries (fi) and (fip2) remains unchanged</span> + <span class="c1"># see Eq. (18) and (19)</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> + + <span class="c1"># add next interval of interpolated (sub-)grid values</span> + <span class="n">f</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fi1</span><span class="p">)</span> + <span class="n">f</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fi2</span><span class="p">)</span> + <span class="n">f</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fip1</span><span class="p">)</span> + + <span class="c1"># separate treatment of the final interval</span> + + <span class="c1"># as a requirement:</span> + <span class="c1"># if there is a zero data value such that g[i]=0, then the whole</span> + <span class="c1"># interval in f has to be zero to such that f[i+1]=f[i+2]=f[i+3]=0</span> + <span class="c1"># according to Eq. (6)</span> + <span class="k">if</span> <span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">:</span> + <span class="c1"># apply monotonicity filter for interval before</span> + <span class="c1"># check if there is "M" or "W" shape</span> + <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> + + <span class="c1"># the monotonicity filter corrects the value at (fim1) by</span> + <span class="c1"># substituting (fim1) with (fmon), see Eq. (27), (28) and (29)</span> + <span class="n">fmon</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="mf">3.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">],</span> + <span class="mf">3.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">],</span> + <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="p">(</span><span class="mf">18.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">-</span> <span class="mf">5.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span> <span class="o">*</span> + <span class="p">(</span><span class="mf">18.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">-</span> <span class="mf">5.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))))</span> + + <span class="c1"># recomputation of the sub-grid interval values while the</span> + <span class="c1"># interval boundaries (fi) and (fip2) remains unchanged</span> + <span class="c1"># see Eq. (18) and (19)</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> + + <span class="n">f</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="mf">0.</span><span class="p">,</span> <span class="mf">0.</span><span class="p">,</span> <span class="mf">0.</span><span class="p">])</span> + + <span class="c1"># otherwise the sub-grid values are calculated and added to the list</span> + <span class="c1"># using the persistence hypothesis as boundary condition</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># temporal save of last value in interpolated list</span> + <span class="c1"># since it is the left boundary and hence the new (fi) value</span> + <span class="n">fi</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> + <span class="c1"># since last interval in series, last value is also fip1</span> + <span class="n">fip1</span> <span class="o">=</span> <span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> + <span class="c1"># the function value at the first sub-grid point (fi1) is determined</span> + <span class="c1"># according to the equal area condition with Eq. (19)</span> + <span class="n">fi1</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fip1</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fi</span> + <span class="c1"># the function value at the second sub-grid point (fi2) is determined</span> + <span class="c1"># according Eq. (18)</span> + <span class="n">fi2</span> <span class="o">=</span> <span class="n">fi1</span><span class="o">+</span><span class="n">dt</span><span class="o">/</span><span class="mf">3.</span><span class="o">*</span><span class="p">(</span><span class="n">fip1</span><span class="o">-</span><span class="n">fi</span><span class="p">)</span> + + <span class="c1"># apply monotonicity filter for interval before</span> + <span class="c1"># check if there is "M" or "W" shape</span> + <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> + + <span class="c1"># the monotonicity filter corrects the value at (fim1) by</span> + <span class="c1"># substituting (fim1) with (fmon), see Eq. (27), (28) and (29)</span> + <span class="n">fmon</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="mf">3.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">],</span> + <span class="mf">3.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">],</span> + <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="p">(</span><span class="mf">18.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">-</span> <span class="mf">5.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span> <span class="o">*</span> + <span class="p">(</span><span class="mf">18.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">-</span> <span class="mf">5.</span> <span class="o">/</span> <span class="mf">13.</span> <span class="o">*</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))))</span> + + <span class="c1"># recomputation of the sub-grid interval values while the</span> + <span class="c1"># interval boundaries (fi) and (fip2) remains unchanged</span> + <span class="c1"># see Eq. (18) and (19)</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> + + <span class="c1"># add next interval of interpolated (sub-)grid values</span> + <span class="n">f</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fi1</span><span class="p">)</span> + <span class="n">f</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fi2</span><span class="p">)</span> + <span class="n">f</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fip1</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">f</span></div> +</pre></div> + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/_modules/get_mars_data.html b/Documentation/html/_modules/get_mars_data.html new file mode 100644 index 0000000000000000000000000000000000000000..a2048c2f3d05e6f8c58d754802522a58102cde81 --- /dev/null +++ b/Documentation/html/_modules/get_mars_data.html @@ -0,0 +1,598 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>get_mars_data — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="index.html">Module code</a> »</li> + + <li>get_mars_data</li> + + + <li class="wy-breadcrumbs-aside"> + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for get_mars_data</h1><div class="highlight"><pre> +<span></span><span class="ch">#!/usr/bin/env python3</span> +<span class="c1"># -*- coding: utf-8 -*-</span> +<span class="c1">#*******************************************************************************</span> +<span class="c1"># @Author: Anne Fouilloux (University of Oslo)</span> +<span class="c1">#</span> +<span class="c1"># @Date: October 2014</span> +<span class="c1">#</span> +<span class="c1"># @Change History:</span> +<span class="c1">#</span> +<span class="c1"># November 2015 - Leopold Haimberger (University of Vienna):</span> +<span class="c1"># - moved the getEIdata program into a function "get_mars_data"</span> +<span class="c1"># - moved the AgurmentParser into a seperate function</span> +<span class="c1"># - adatpted the function for the use in flex_extract</span> +<span class="c1"># - renamed file to get_mars_data</span> +<span class="c1">#</span> +<span class="c1"># February 2018 - Anne Philipp (University of Vienna):</span> +<span class="c1"># - applied PEP8 style guide</span> +<span class="c1"># - added structured documentation</span> +<span class="c1"># - minor changes in programming style for consistence</span> +<span class="c1"># - added function main and moved function calls vom __main__ there</span> +<span class="c1"># (necessary for better documentation with docstrings for later</span> +<span class="c1"># online documentation)</span> +<span class="c1"># - use of UIFiles class for file selection and deletion</span> +<span class="c1"># - seperated get_mars_data function into several smaller pieces:</span> +<span class="c1"># write_reqheader, mk_server, mk_dates, remove_old, do_retrievment</span> +<span class="c1">#</span> +<span class="c1"># @License:</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> +<span class="c1">#</span> +<span class="c1"># SPDX-License-Identifier: CC-BY-4.0</span> +<span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> +<span class="c1">#*******************************************************************************</span> +<span class="sd">'''This script extracts MARS data from ECMWF servers.</span> + +<span class="sd">At first, the necessary parameters from command line and CONTROL files are</span> +<span class="sd">extracted. They define the data set to be extracted from MARS.</span> + +<span class="sd">This file can also be imported as a module and contains the following</span> +<span class="sd">functions:</span> + +<span class="sd"> * main - the main function of the script</span> +<span class="sd"> * get_mars_data - overall control of ECMWF data retrievment</span> +<span class="sd"> * write_reqheader - writes the header into the mars_request file</span> +<span class="sd"> * mk_server - creates the server connection to ECMWF servers</span> +<span class="sd"> * mk_dates - defines the start and end date</span> +<span class="sd"> * remove_old - deletes old retrieved grib files</span> +<span class="sd"> * do_retrievement - creates individual retrievals</span> + +<span class="sd">Type: get_mars_data.py --help</span> +<span class="sd">to get information about command line parameters.</span> +<span class="sd">Read the documentation for usage instructions.</span> +<span class="sd">'''</span> +<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">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="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> +<span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span> + <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="c1"># pylint: enable=wrong-import-position</span> +<span class="c1"># pylint: disable=invalid-name</span> +<span class="k">try</span><span class="p">:</span> + <span class="n">ec_api</span> <span class="o">=</span> <span class="kc">True</span> + <span class="kn">import</span> <span class="nn">ecmwfapi</span> +<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> + <span class="n">ec_api</span> <span class="o">=</span> <span class="kc">False</span> + +<span class="k">try</span><span class="p">:</span> + <span class="n">cds_api</span> <span class="o">=</span> <span class="kc">True</span> + <span class="kn">import</span> <span class="nn">cdsapi</span> +<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> + <span class="n">cds_api</span> <span class="o">=</span> <span class="kc">False</span> +<span class="c1"># pylint: enable=invalid-name</span> +<span class="c1"># ------------------------------------------------------------------------------</span> +<span class="c1"># FUNCTION</span> +<span class="c1"># ------------------------------------------------------------------------------</span> +<div class="viewcode-block" id="main"><a class="viewcode-back" href="../Documentation/Api/api_python.html#get_mars_data.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">():</span> + <span class="sd">'''Controls the program to get data out of mars.</span> + +<span class="sd"> This is done if it is called directly from command line.</span> +<span class="sd"> Then it also takes program call arguments and control file input.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="n">c</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">setup_controldata</span><span class="p">()</span> + <span class="n">get_mars_data</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> + <span class="n">normal_exit</span><span class="p">(</span><span class="s1">'Retrieving MARS data: Done!'</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="get_mars_data"><a class="viewcode-back" href="../Documentation/Api/api_python.html#get_mars_data.get_mars_data">[docs]</a><span class="k">def</span> <span class="nf">get_mars_data</span><span class="p">(</span><span class="n">c</span><span class="p">):</span> + <span class="sd">'''Retrieves the EC data needed for a FLEXPART simulation.</span> + +<span class="sd"> Start and end dates for retrieval period is set. Retrievals</span> +<span class="sd"> are divided into smaller periods if necessary and datechunk parameter</span> +<span class="sd"> is set.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="n">c</span><span class="o">.</span><span class="n">ec_api</span> <span class="o">=</span> <span class="n">ec_api</span> + <span class="n">c</span><span class="o">.</span><span class="n">cds_api</span> <span class="o">=</span> <span class="n">cds_api</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">):</span> + <span class="n">make_dir</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"Retrieving EC data!"</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"Printing mars requests!"</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"Retrieving EC data and printing mars request!"</span><span class="p">)</span> + <span class="n">write_reqheader</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FILE_MARS_REQUESTS</span><span class="p">))</span> + + <span class="nb">print</span><span class="p">(</span><span class="s2">"start date </span><span class="si">%s</span><span class="s2"> "</span> <span class="o">%</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"end date </span><span class="si">%s</span><span class="s2"> "</span> <span class="o">%</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span><span class="p">))</span> + + <span class="n">server</span> <span class="o">=</span> <span class="n">mk_server</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> + + <span class="c1"># if data are to be retrieved, clean up any old grib files</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> + <span class="n">remove_old</span><span class="p">(</span><span class="s1">'*grb'</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> + + <span class="c1"># -------------- flux data ------------------------------------------------</span> + <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span> <span class="o">=</span> <span class="n">mk_dates</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="n">do_retrievement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + + <span class="c1"># -------------- non flux data --------------------------------------------</span> + <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span> <span class="o">=</span> <span class="n">mk_dates</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="n">do_retrievement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="write_reqheader"><a class="viewcode-back" href="../Documentation/Api/api_python.html#get_mars_data.write_reqheader">[docs]</a><span class="k">def</span> <span class="nf">write_reqheader</span><span class="p">(</span><span class="n">marsfile</span><span class="p">):</span> + <span class="sd">'''Writes header with column names into mars request file.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> marsfile : str</span> +<span class="sd"> Path to the mars request file.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="n">MR</span> <span class="o">=</span> <span class="n">MarsRetrieval</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> + <span class="n">attrs</span> <span class="o">=</span> <span class="nb">vars</span><span class="p">(</span><span class="n">MR</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + <span class="k">del</span> <span class="n">attrs</span><span class="p">[</span><span class="s1">'server'</span><span class="p">]</span> + <span class="k">del</span> <span class="n">attrs</span><span class="p">[</span><span class="s1">'public'</span><span class="p">]</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">marsfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'request_number'</span> <span class="o">+</span> <span class="s1">', '</span><span class="p">)</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">attrs</span><span class="o">.</span><span class="n">keys</span><span class="p">())))</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="mk_server"><a class="viewcode-back" href="../Documentation/Api/api_python.html#get_mars_data.mk_server">[docs]</a><span class="k">def</span> <span class="nf">mk_server</span><span class="p">(</span><span class="n">c</span><span class="p">):</span> + <span class="sd">'''Creates a server connection with available python API.</span> + +<span class="sd"> Which API is used depends on availability and the dataset to be retrieved.</span> +<span class="sd"> The CDS API is used for ERA5 dataset no matter if the user is a member or</span> +<span class="sd"> a public user. ECMWF WebAPI is used for all other available datasets.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> server : ECMWFDataServer, ECMWFService or Client</span> +<span class="sd"> Connection to ECMWF server via python interface ECMWF WebAPI or CDS API.</span> + +<span class="sd"> '''</span> + <span class="k">if</span> <span class="n">cds_api</span> <span class="ow">and</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EA'</span><span class="p">):</span> + <span class="n">server</span> <span class="o">=</span> <span class="n">cdsapi</span><span class="o">.</span><span class="n">Client</span><span class="p">()</span> + <span class="n">c</span><span class="o">.</span><span class="n">ec_api</span> <span class="o">=</span> <span class="kc">False</span> + <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">ec_api</span><span class="p">:</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">public</span><span class="p">:</span> + <span class="n">server</span> <span class="o">=</span> <span class="n">ecmwfapi</span><span class="o">.</span><span class="n">ECMWFDataServer</span><span class="p">()</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">server</span> <span class="o">=</span> <span class="n">ecmwfapi</span><span class="o">.</span><span class="n">ECMWFService</span><span class="p">(</span><span class="s2">"mars"</span><span class="p">)</span> + <span class="n">c</span><span class="o">.</span><span class="n">cds_api</span> <span class="o">=</span> <span class="kc">False</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">server</span> <span class="o">=</span> <span class="kc">False</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'Using ECMWF WebAPI: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ec_api</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Using CDS API: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">cds_api</span><span class="p">))</span> + + <span class="k">return</span> <span class="n">server</span></div> + + +<div class="viewcode-block" id="check_dates_for_nonflux_fc_times"><a class="viewcode-back" href="../Documentation/Api/api_python.html#get_mars_data.check_dates_for_nonflux_fc_times">[docs]</a><span class="k">def</span> <span class="nf">check_dates_for_nonflux_fc_times</span><span class="p">(</span><span class="n">types</span><span class="p">,</span> <span class="n">times</span><span class="p">):</span> + <span class="sd">'''Checks if the time 18UTC corresponds to forecast field.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> types : list of str</span> +<span class="sd"> List of field types.</span> + +<span class="sd"> times : list of str or str</span> +<span class="sd"> The time in hours of the field.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> True or False</span> + +<span class="sd"> '''</span> + <span class="k">for</span> <span class="n">ty</span><span class="p">,</span> <span class="n">ti</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">types</span><span class="p">,</span> <span class="n">times</span><span class="p">):</span> + <span class="k">if</span> <span class="n">ty</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'FC'</span> <span class="ow">and</span> <span class="nb">int</span><span class="p">(</span><span class="n">ti</span><span class="p">)</span> <span class="o">==</span> <span class="mi">18</span><span class="p">:</span> + <span class="k">return</span> <span class="kc">True</span> + <span class="k">return</span> <span class="kc">False</span></div> + + +<div class="viewcode-block" id="mk_dates"><a class="viewcode-back" href="../Documentation/Api/api_python.html#get_mars_data.mk_dates">[docs]</a><span class="k">def</span> <span class="nf">mk_dates</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">fluxes</span><span class="p">):</span> + <span class="sd">'''Prepares start and end date depending on flux or non flux data.</span> + +<span class="sd"> If forecast for maximum one day (upto 24h) are to be retrieved, then</span> +<span class="sd"> collect accumulation data (flux data) with additional days in the</span> +<span class="sd"> beginning and at the end (used for complete disaggregation of</span> +<span class="sd"> original period)</span> + +<span class="sd"> If forecast data longer than 24h are to be retrieved, then</span> +<span class="sd"> collect accumulation data (flux data) with the exact start and end date</span> +<span class="sd"> (disaggregation will be done for the exact time period with</span> +<span class="sd"> boundary conditions)</span> + +<span class="sd"> Since for basetime the extraction contains the 12 hours upfront,</span> +<span class="sd"> if basetime is 0, the starting date has to be the day before</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> fluxes : boolean, optional</span> +<span class="sd"> Decides if the flux parameter settings are stored or</span> +<span class="sd"> the rest of the parameter list.</span> +<span class="sd"> Default value is False.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> start : datetime</span> +<span class="sd"> The start date of the retrieving data set.</span> + +<span class="sd"> end : datetime</span> +<span class="sd"> The end date of the retrieving data set.</span> + +<span class="sd"> chunk : datetime</span> +<span class="sd"> Time period in days for one single mars retrieval.</span> + +<span class="sd"> '''</span> + <span class="n">start</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> + <span class="n">end</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> + <span class="n">chunk</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">date_chunk</span><span class="p">))</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span> <span class="ow">and</span> <span class="n">fluxes</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o"><</span> <span class="mi">24</span><span class="p">:</span> + <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + <span class="n">end</span> <span class="o">=</span> <span class="n">end</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span> <span class="ow">and</span> <span class="n">fluxes</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + <span class="n">end</span> <span class="o">=</span> <span class="n">end</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + + <span class="c1"># if we have non-flux forecast data starting at 18 UTC</span> + <span class="c1"># we need to start retrieving data one day in advance</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">fluxes</span> <span class="ow">and</span> <span class="n">check_dates_for_nonflux_fc_times</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">):</span> + <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">chunk</span></div> + +<div class="viewcode-block" id="remove_old"><a class="viewcode-back" href="../Documentation/Api/api_python.html#get_mars_data.remove_old">[docs]</a><span class="k">def</span> <span class="nf">remove_old</span><span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="n">inputdir</span><span class="p">):</span> + <span class="sd">'''Deletes old retrieval files from current input directory</span> +<span class="sd"> matching the pattern.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> pattern : str</span> +<span class="sd"> The sub string pattern which identifies the files to be deleted.</span> + +<span class="sd"> inputdir : str, optional</span> +<span class="sd"> Path to the directory where the retrieved data is stored.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... removing old content of '</span> <span class="o">+</span> <span class="n">inputdir</span><span class="p">)</span> + + <span class="n">tobecleaned</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">pattern</span><span class="p">)</span> + <span class="n">tobecleaned</span><span class="o">.</span><span class="n">delete_files</span><span class="p">()</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="do_retrievement"><a class="viewcode-back" href="../Documentation/Api/api_python.html#get_mars_data.do_retrievement">[docs]</a><span class="k">def</span> <span class="nf">do_retrievement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">delta_t</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> + <span class="sd">'''Divides the complete retrieval period in smaller chunks and</span> +<span class="sd"> retrieves the data from MARS.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> server : ECMWFService or ECMWFDataServer</span> +<span class="sd"> The server connection to ECMWF.</span> + +<span class="sd"> start : datetime</span> +<span class="sd"> The start date of the retrieval.</span> + +<span class="sd"> end : datetime</span> +<span class="sd"> The end date of the retrieval.</span> + +<span class="sd"> delta_t : datetime</span> +<span class="sd"> Delta_t + 1 is the maximal time period of a single</span> +<span class="sd"> retrieval.</span> + +<span class="sd"> fluxes : boolean, optional</span> +<span class="sd"> Decides if the flux parameters are to be retrieved or</span> +<span class="sd"> the rest of the parameter list.</span> +<span class="sd"> Default value is False.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="c1"># since actual day also counts as one day,</span> + <span class="c1"># we only need to add datechunk - 1 days to retrieval</span> + <span class="c1"># for a period</span> + <span class="n">delta_t_m1</span> <span class="o">=</span> <span class="n">delta_t</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + + <span class="n">day</span> <span class="o">=</span> <span class="n">start</span> + <span class="k">while</span> <span class="n">day</span> <span class="o"><=</span> <span class="n">end</span><span class="p">:</span> + <span class="n">flexpart</span> <span class="o">=</span> <span class="n">EcFlexpart</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">fluxes</span><span class="p">)</span> + <span class="n">tmpday</span> <span class="o">=</span> <span class="n">day</span> <span class="o">+</span> <span class="n">delta_t_m1</span> + <span class="k">if</span> <span class="n">tmpday</span> <span class="o"><</span> <span class="n">end</span><span class="p">:</span> + <span class="n">dates</span> <span class="o">=</span> <span class="n">day</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">"/to/"</span> <span class="o">+</span> \ + <span class="n">tmpday</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">dates</span> <span class="o">=</span> <span class="n">day</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">"/to/"</span> <span class="o">+</span> \ + <span class="n">end</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span> + + <span class="nb">print</span><span class="p">(</span><span class="s2">"... retrieve "</span> <span class="o">+</span> <span class="n">dates</span> <span class="o">+</span> <span class="s2">" in dir "</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">flexpart</span><span class="o">.</span><span class="n">retrieve</span><span class="p">(</span><span class="n">server</span><span class="p">,</span> <span class="n">dates</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">public</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span> + <span class="n">my_error</span><span class="p">(</span><span class="s1">'MARS request failed'</span><span class="p">)</span> + + <span class="n">day</span> <span class="o">+=</span> <span class="n">delta_t</span> + + <span class="k">return</span></div> + +<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span> + <span class="n">main</span><span class="p">()</span> +</pre></div> + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/_modules/index.html b/Documentation/html/_modules/index.html new file mode 100644 index 0000000000000000000000000000000000000000..bc3708af02ea2551774fa33e497b77dff2108823 --- /dev/null +++ b/Documentation/html/_modules/index.html @@ -0,0 +1,214 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Overview: module code — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li>Overview: module code</li> + + + <li class="wy-breadcrumbs-aside"> + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>All modules for which code is available</h1> +<ul><li><a href="ControlFile.html">ControlFile</a></li> +<li><a href="EcFlexpart.html">EcFlexpart</a></li> +<li><a href="GribUtil.html">GribUtil</a></li> +<li><a href="MarsRetrieval.html">MarsRetrieval</a></li> +<li><a href="UioFiles.html">UioFiles</a></li> +<li><a href="checks.html">checks</a></li> +<li><a href="disaggregation.html">disaggregation</a></li> +<li><a href="get_mars_data.html">get_mars_data</a></li> +<li><a href="install.html">install</a></li> +<li><a href="prepare_flexpart.html">prepare_flexpart</a></li> +<li><a href="submit.html">submit</a></li> +<li><a href="tools.html">tools</a></li> +</ul> + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/_modules/install.html b/Documentation/html/_modules/install.html new file mode 100644 index 0000000000000000000000000000000000000000..51c77e440f0ebb32929a284d384b0621b8551477 --- /dev/null +++ b/Documentation/html/_modules/install.html @@ -0,0 +1,910 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>install — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="index.html">Module code</a> »</li> + + <li>install</li> + + + <li class="wy-breadcrumbs-aside"> + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for install</h1><div class="highlight"><pre> +<span></span><span class="ch">#!/usr/bin/env python3</span> +<span class="c1"># -*- coding: utf-8 -*-</span> +<span class="c1">#*******************************************************************************</span> +<span class="c1"># @Author: Leopold Haimberger (University of Vienna)</span> +<span class="c1">#</span> +<span class="c1"># @Date: November 2015</span> +<span class="c1">#</span> +<span class="c1"># @Change History:</span> +<span class="c1">#</span> +<span class="c1"># February 2018 - Anne Philipp (University of Vienna):</span> +<span class="c1"># - applied PEP8 style guide</span> +<span class="c1"># - added documentation</span> +<span class="c1"># - moved install_args_and_control in here</span> +<span class="c1"># - splitted code in smaller functions</span> +<span class="c1"># - delete convert build files in here instead of compile job script</span> +<span class="c1"># - changed static path names to variables from config file</span> +<span class="c1"># - splitted install function into several smaller pieces</span> +<span class="c1"># - use of tarfile package in python</span> +<span class="c1">#</span> +<span class="c1"># @License:</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> +<span class="c1">#</span> +<span class="c1"># SPDX-License-Identifier: CC-BY-4.0</span> +<span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> +<span class="c1">#</span> +<span class="c1"># @Methods:</span> +<span class="c1"># main</span> +<span class="c1"># get_install_cmdline_args</span> +<span class="c1"># install_via_gateway</span> +<span class="c1"># check_install_conditions</span> +<span class="c1"># mk_tarball</span> +<span class="c1"># un_tarball</span> +<span class="c1"># mk_env_vars</span> +<span class="c1"># mk_compilejob</span> +<span class="c1"># mk_job_template</span> +<span class="c1"># del_convert_build</span> +<span class="c1"># mk_convert_build</span> +<span class="c1">#</span> +<span class="c1">#*******************************************************************************</span> +<span class="sd">'''This script installs the flex_extract program.</span> + +<span class="sd">Depending on the selected installation environment (locally or on the</span> +<span class="sd">ECMWF server ecgate or cca) the program extracts the commandline</span> +<span class="sd">arguments and the CONTROL file parameter and prepares the corresponding</span> +<span class="sd">environment.</span> +<span class="sd">The necessary files are collected in a tar-ball and placed</span> +<span class="sd">at the target location. There its untared, the environment variables will</span> +<span class="sd">be set and the Fortran code will be compiled.</span> +<span class="sd">If the ECMWF environment is selected a job script is prepared and submitted</span> +<span class="sd">for the remaining configurations after putting the tar-ball to the</span> +<span class="sd">target ECMWF server.</span> + +<span class="sd">Type: install.py --help</span> +<span class="sd">to get information about command line parameters.</span> +<span class="sd">Read the documentation for usage instructions.</span> +<span class="sd">'''</span> + +<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">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="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="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> +<span class="c1"># FUNCTIONS</span> +<span class="c1"># ------------------------------------------------------------------------------</span> +<div class="viewcode-block" id="main"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">():</span> + <span class="sd">'''Controls the installation process. Calls the installation function</span> +<span class="sd"> if target is specified.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> '''</span> + + <span class="n">args</span> <span class="o">=</span> <span class="n">get_install_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> + <span class="n">c</span><span class="o">.</span><span class="n">assign_args_to_control</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> + <span class="n">check_install_conditions</span><span class="p">(</span><span class="n">c</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="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">!=</span> <span class="s1">'local'</span><span class="p">:</span> <span class="c1"># ecgate or cca</span> + <span class="n">install_via_gateway</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> <span class="c1"># local</span> + <span class="n">install_local</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="get_install_cmdline_args"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.get_install_cmdline_args">[docs]</a><span class="k">def</span> <span class="nf">get_install_cmdline_args</span><span class="p">():</span> + <span class="sd">'''Decomposes the command line arguments and assigns them to variables.</span> +<span class="sd"> Apply default values for non mentioned arguments.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> args : Namespace</span> +<span class="sd"> Contains the commandline arguments from script/program call.</span> +<span class="sd"> '''</span> + <span class="n">parser</span> <span class="o">=</span> <span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="s1">'Install flex_extract software '</span> + <span class="s1">'locally or on ECMWF machines'</span><span class="p">,</span> + <span class="n">formatter_class</span><span class="o">=</span><span class="n">ArgumentDefaultsHelpFormatter</span><span class="p">)</span> + + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s1">'--target'</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s1">'install_target'</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Valid targets: local | ecgate | cca , </span><span class="se">\</span> +<span class="s2"> the latter two are at ECMWF"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--makefile"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"makefile"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s1">'Name of Makefile to use for compiling the '</span> + <span class="s1">'Fortran program'</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--ecuid"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"ecuid"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s1">'The user id at ECMWF.'</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--ecgid"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"ecgid"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s1">'The group id at ECMWF.'</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--gateway"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"gateway"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s1">'The name of the local gateway server.'</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--destination"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"destination"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s1">'The ecaccess association, e.g. '</span> + <span class="s1">'myUser@genericSftp'</span><span class="p">)</span> + + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--installdir"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"installdir"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s1">'Root directory where '</span> + <span class="s1">'flex_extract will be installed to.'</span><span class="p">)</span> + + <span class="c1"># arguments for job submission to ECMWF, only needed by submit.py</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--job_template"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s1">'job_template'</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"job.template"</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s1">'The rudimentary template file to create a batch '</span> + <span class="s1">'job template for submission to ECMWF servers.'</span><span class="p">)</span> + + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--controlfile"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"controlfile"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">'CONTROL_EA5'</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"The file with all CONTROL parameters."</span><span class="p">)</span> + + <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span> + + <span class="k">return</span> <span class="n">args</span></div> + + +<div class="viewcode-block" id="install_via_gateway"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.install_via_gateway">[docs]</a><span class="k">def</span> <span class="nf">install_via_gateway</span><span class="p">(</span><span class="n">c</span><span class="p">):</span> + <span class="sd">'''Prepare data transfer to remote gate and submit a job script which will</span> +<span class="sd"> install everything on the remote gate.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="n">tarball_name</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span> <span class="o">+</span> <span class="s1">'.tar'</span> + <span class="n">tar_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span><span class="p">,</span> <span class="n">tarball_name</span><span class="p">)</span> + + <span class="n">mk_compilejob</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">makefile</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">)</span> + + <span class="n">mk_job_template</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">)</span> + + <span class="n">mk_env_vars</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">gateway</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">)</span> + + <span class="n">mk_tarball</span><span class="p">(</span><span class="n">tar_file</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">)</span> + + <span class="n">put_file_to_ecserver</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span><span class="p">,</span> <span class="n">tarball_name</span><span class="p">,</span> + <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span><span class="p">)</span> + + <span class="n">submit_job_to_ecserver</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">,</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_JOBSCRIPTS</span><span class="p">,</span> + <span class="n">_config</span><span class="o">.</span><span class="n">FILE_INSTALL_COMPILEJOB</span><span class="p">))</span> + + <span class="n">silent_remove</span><span class="p">(</span><span class="n">tar_file</span><span class="p">)</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'Job compilation script has been submitted to ecgate for '</span> <span class="o">+</span> + <span class="s1">'installation in '</span> <span class="o">+</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="o">+</span> <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'You should get an email with subject "flexcompile" within '</span> <span class="o">+</span> + <span class="s1">'the next few minutes!'</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="install_local"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.install_local">[docs]</a><span class="k">def</span> <span class="nf">install_local</span><span class="p">(</span><span class="n">c</span><span class="p">):</span> + <span class="sd">'''Perform the actual installation on a local machine.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="n">tar_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span><span class="p">,</span> + <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span> <span class="o">+</span> <span class="s1">'.tar'</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span> <span class="o">==</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'WARNING: installdir has not been specified'</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'flex_extract will be installed in here by compiling the '</span> <span class="o">+</span> + <span class="s1">'Fortran source in '</span> <span class="o">+</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FORTRAN_SRC</span><span class="p">)</span> + <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FORTRAN_SRC</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> <span class="c1"># creates the target working directory for flex_extract</span> + <span class="n">c</span><span class="o">.</span><span class="n">installdir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span> + <span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">))</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span><span class="p">)</span> <span class="o">!=</span> \ + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">):</span> + <span class="n">mk_tarball</span><span class="p">(</span><span class="n">tar_file</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">)</span> + <span class="n">make_dir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span> + <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span><span class="p">))</span> + <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span> + <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span><span class="p">))</span> + <span class="n">un_tarball</span><span class="p">(</span><span class="n">tar_file</span><span class="p">)</span> + <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span> + <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span><span class="p">,</span> + <span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">))</span> + + <span class="c1"># Create Fortran executable - CONVERT2</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Install '</span> <span class="o">+</span> <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span> <span class="o">+</span> <span class="s1">' software at '</span> <span class="o">+</span> + <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">+</span> <span class="s1">' in directory '</span> <span class="o">+</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> + + <span class="n">del_convert_build</span><span class="p">(</span><span class="s1">'.'</span><span class="p">)</span> + <span class="n">mk_convert_build</span><span class="p">(</span><span class="s1">'.'</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">makefile</span><span class="p">)</span> + + <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span><span class="p">)</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">tar_file</span><span class="p">):</span> + <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">tar_file</span><span class="p">)</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="check_install_conditions"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.check_install_conditions">[docs]</a><span class="k">def</span> <span class="nf">check_install_conditions</span><span class="p">(</span><span class="n">c</span><span class="p">):</span> + <span class="sd">'''Checks a couple of necessary attributes and conditions</span> +<span class="sd"> for the installation such as if they exist and contain values.</span> +<span class="sd"> Otherwise set default values.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</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="ow">not</span> <span class="ow">in</span> <span class="n">_config</span><span class="o">.</span><span class="n">INSTALL_TARGETS</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR: unknown or missing installation target '</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'target: '</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'please specify correct installation target '</span> <span class="o">+</span> + <span class="nb">str</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">INSTALL_TARGETS</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'use -h or --help for help'</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="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="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="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">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> + <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="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="mk_tarball"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.mk_tarball">[docs]</a><span class="k">def</span> <span class="nf">mk_tarball</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span> + <span class="sd">'''Creates a tarball with all necessary files which need to be sent to the</span> +<span class="sd"> installation directory.</span> +<span class="sd"> It does not matter if this is local or remote.</span> +<span class="sd"> Collects all python files, the Fortran source and makefiles,</span> +<span class="sd"> the ECMWF_ENV file, the CONTROL files as well as the</span> +<span class="sd"> template files.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> tarball_path : str</span> +<span class="sd"> The complete path to the tar file which will contain all</span> +<span class="sd"> relevant data for flex_extract.</span> + +<span class="sd"> target : str</span> +<span class="sd"> The queue where the job is submitted to.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'Create tarball ...'</span><span class="p">)</span> + + <span class="c1"># change to FLEXEXTRACT directory so that the tar can contain</span> + <span class="c1"># relative pathes to the files and directories</span> + <span class="n">ecd</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span> <span class="o">+</span> <span class="s1">'/'</span> + <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">ecd</span><span class="p">)</span> + + <span class="c1"># get lists of the files to be added to the tar file</span> + <span class="k">if</span> <span class="n">target</span> <span class="o">==</span> <span class="s1">'local'</span><span class="p">:</span> + <span class="n">ecmwf_env_file</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">runfile</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_RUN_DIR</span><span class="p">,</span> + <span class="s1">'run_local.sh'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">ecmwf_env_file</span> <span class="o">=</span> <span class="p">[</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_ECMWF_ENV</span><span class="p">]</span> + <span class="n">runfile</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_RUN_DIR</span><span class="p">,</span> + <span class="s1">'run.sh'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + + <span class="n">pyfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_PYTHON_SRC</span><span class="p">,</span> <span class="s1">'*py'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">pytestfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_PYTHONTEST_SRC</span><span class="p">,</span> <span class="s1">'*py'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">controlfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_CONTROLFILES</span><span class="p">,</span> + <span class="s1">'CONTROL*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">testfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_TEST</span><span class="p">,</span> <span class="s1">'*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">tempfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_TEMPLATES</span><span class="p">,</span> <span class="s1">'*.temp'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">nlfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_TEMPLATES</span><span class="p">,</span> <span class="s1">'*.nl'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">gribtable</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_TEMPLATES</span><span class="p">,</span> <span class="s1">'*grib*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">ffiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">'*.f90'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">hfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">'*.h'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">makefiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">'makefile*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">jobdir</span> <span class="o">=</span> <span class="p">[</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_JOBSCRIPTS</span><span class="p">]</span> + + <span class="c1"># concatenate single lists to one for a better looping</span> + <span class="n">filelist</span> <span class="o">=</span> <span class="n">pyfiles</span> <span class="o">+</span> <span class="n">pytestfiles</span> <span class="o">+</span> <span class="n">controlfiles</span> <span class="o">+</span> <span class="n">tempfiles</span> <span class="o">+</span> <span class="n">nlfiles</span> <span class="o">+</span> \ + <span class="n">ffiles</span> <span class="o">+</span> <span class="n">gribtable</span> <span class="o">+</span> <span class="n">hfiles</span> <span class="o">+</span> <span class="n">makefiles</span> <span class="o">+</span> <span class="n">ecmwf_env_file</span> <span class="o">+</span> \ + <span class="n">runfile</span> <span class="o">+</span> <span class="n">jobdir</span> <span class="o">+</span> <span class="n">testfiles</span> <span class="o">+</span>\ + <span class="p">[</span><span class="s1">'CODE_OF_CONDUCT.md'</span><span class="p">,</span> <span class="s1">'LICENSE.md'</span><span class="p">,</span> <span class="s1">'README.md'</span><span class="p">]</span> + + <span class="c1"># create installation tar-file</span> + <span class="n">exclude_files</span> <span class="o">=</span> <span class="p">[</span><span class="s2">".ksh"</span><span class="p">,</span> <span class="s2">".tar"</span><span class="p">]</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">with</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">,</span> <span class="s2">"w:gz"</span><span class="p">)</span> <span class="k">as</span> <span class="n">tar_handle</span><span class="p">:</span> + <span class="k">for</span> <span class="n">filename</span> <span class="ow">in</span> <span class="n">filelist</span><span class="p">:</span> + <span class="n">tar_handle</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> + <span class="nb">filter</span><span class="o">=</span><span class="k">lambda</span> <span class="n">tarinfo</span><span class="p">:</span> <span class="kc">None</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">tarinfo</span><span class="o">.</span><span class="n">name</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> + <span class="ow">in</span> <span class="n">exclude_files</span> + <span class="k">else</span> <span class="n">tarinfo</span><span class="p">)</span> + <span class="k">except</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">TarError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to create the tar-file '</span> <span class="o">+</span> + <span class="nb">str</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">))</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="un_tarball"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.un_tarball">[docs]</a><span class="k">def</span> <span class="nf">un_tarball</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">):</span> + <span class="sd">'''Extracts the given tarball into current directory.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> tarball_path : str</span> +<span class="sd"> The complete path to the tar file which will contain all</span> +<span class="sd"> relevant data for flex_extract.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'Untar ...'</span><span class="p">)</span> + + <span class="k">try</span><span class="p">:</span> + <span class="k">with</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">)</span> <span class="k">as</span> <span class="n">tar_handle</span><span class="p">:</span> + <span class="n">tar_handle</span><span class="o">.</span><span class="n">extractall</span><span class="p">()</span> + <span class="k">except</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">TarError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to read tar-file '</span> <span class="o">+</span> + <span class="nb">str</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">))</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to read tar-file '</span> <span class="o">+</span> + <span class="nb">str</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">))</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="mk_env_vars"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.mk_env_vars">[docs]</a><span class="k">def</span> <span class="nf">mk_env_vars</span><span class="p">(</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">ecgid</span><span class="p">,</span> <span class="n">gateway</span><span class="p">,</span> <span class="n">destination</span><span class="p">):</span> + <span class="sd">'''Creates a file named ECMWF_ENV which contains the</span> +<span class="sd"> necessary environmental variables at ECMWF servers.</span> +<span class="sd"> It is based on the template ECMWF_ENV.template.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> ecuid : str</span> +<span class="sd"> The user id on ECMWF server.</span> + +<span class="sd"> ecgid : str</span> +<span class="sd"> The group id on ECMWF server.</span> + +<span class="sd"> gateway : str</span> +<span class="sd"> The gateway server the user is using.</span> + +<span class="sd"> destination : str</span> +<span class="sd"> The remote destination which is used to transfer files</span> +<span class="sd"> from ECMWF server to local gateway server.</span> + +<span class="sd"> Return</span> +<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="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> + <span class="n">ecmwfvars_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_USER_ENVVARS</span><span class="p">,</span> + <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> + + <span class="n">stream</span> <span class="o">=</span> <span class="n">ecmwfvars_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">user_name</span><span class="o">=</span><span class="n">ecuid</span><span class="p">,</span> + <span class="n">user_group</span><span class="o">=</span><span class="n">ecgid</span><span class="p">,</span> + <span class="n">gateway_name</span><span class="o">=</span><span class="n">gateway</span><span class="p">,</span> + <span class="n">destination_name</span><span class="o">=</span><span class="n">destination</span> + <span class="p">)</span> + <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span> + + <span class="k">try</span><span class="p">:</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to write '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="mk_compilejob"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.mk_compilejob">[docs]</a><span class="k">def</span> <span class="nf">mk_compilejob</span><span class="p">(</span><span class="n">makefile</span><span class="p">,</span> <span class="n">ecuid</span><span class="p">,</span> <span class="n">ecgid</span><span class="p">,</span> <span class="n">fp_root</span><span class="p">):</span> + <span class="sd">'''Modifies the original job template file so that it is specified</span> +<span class="sd"> for the user and the environment were it will be applied. Result</span> +<span class="sd"> is stored in a new file "job.temp" in the python directory.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> makefile : str</span> +<span class="sd"> Name of the makefile which should be used to compile FORTRAN</span> +<span class="sd"> CONVERT2 program.</span> + +<span class="sd"> ecuid : str</span> +<span class="sd"> The user id on ECMWF server.</span> + +<span class="sd"> ecgid : str</span> +<span class="sd"> The group id on ECMWF server.</span> + +<span class="sd"> fp_root : str</span> +<span class="sd"> Path to the root directory of FLEXPART environment or flex_extract</span> +<span class="sd"> environment.</span> + +<span class="sd"> Return</span> +<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="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> + + <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> + <span class="n">compile_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_COMPILEJOB</span><span class="p">,</span> + <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> + + <span class="n">stream</span> <span class="o">=</span> <span class="n">compile_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span> + <span class="n">usergroup</span><span class="o">=</span><span class="n">ecgid</span><span class="p">,</span> + <span class="n">username</span><span class="o">=</span><span class="n">ecuid</span><span class="p">,</span> + <span class="n">version_number</span><span class="o">=</span><span class="n">_config</span><span class="o">.</span><span class="n">_VERSION_STR</span><span class="p">,</span> + <span class="n">fp_root_scripts</span><span class="o">=</span><span class="n">fp_root</span><span class="p">,</span> + <span class="n">makefile</span><span class="o">=</span><span class="n">makefile</span><span class="p">,</span> + <span class="n">fortran_program</span><span class="o">=</span><span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span> + <span class="p">)</span> + <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_COMPILEJOB</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_COMPILEJOB</span><span class="p">)</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">compilejob</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_JOBSCRIPTS</span><span class="p">,</span> + <span class="n">_config</span><span class="o">.</span><span class="n">FILE_INSTALL_COMPILEJOB</span><span class="p">)</span> + + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">compilejob</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to write '</span> <span class="o">+</span> + <span class="n">compilejob</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="mk_job_template"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.mk_job_template">[docs]</a><span class="k">def</span> <span class="nf">mk_job_template</span><span class="p">(</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">ecgid</span><span class="p">,</span> <span class="n">fp_root</span><span class="p">):</span> + <span class="sd">'''Modifies the original job template file so that it is specified</span> +<span class="sd"> for the user and the environment were it will be applied. Result</span> +<span class="sd"> is stored in a new file.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> ecuid : str</span> +<span class="sd"> The user id on ECMWF server.</span> + +<span class="sd"> ecgid : str</span> +<span class="sd"> The group id on ECMWF server.</span> + +<span class="sd"> fp_root : str</span> +<span class="sd"> Path to the root directory of FLEXPART environment or flex_extract</span> +<span class="sd"> environment.</span> + +<span class="sd"> Return</span> +<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="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> + <span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_PYTHON_SRC</span><span class="p">)</span> + <span class="k">if</span> <span class="s1">'$'</span> <span class="ow">in</span> <span class="n">fp_root_path_to_python</span><span class="p">:</span> + <span class="n">ind</span> <span class="o">=</span> <span class="n">fp_root_path_to_python</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'$'</span><span class="p">)</span> + <span class="n">fp_root_path_to_python</span> <span class="o">=</span> <span class="n">fp_root_path_to_python</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">ind</span><span class="p">]</span> <span class="o">+</span> <span class="s1">'$'</span> <span class="o">+</span> \ + <span class="n">fp_root_path_to_python</span><span class="p">[</span><span class="n">ind</span><span class="p">:]</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> + <span class="n">compile_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_JOB</span><span class="p">,</span> + <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> + + <span class="n">stream</span> <span class="o">=</span> <span class="n">compile_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span> + <span class="n">usergroup</span><span class="o">=</span><span class="n">ecgid</span><span class="p">,</span> + <span class="n">username</span><span class="o">=</span><span class="n">ecuid</span><span class="p">,</span> + <span class="n">version_number</span><span class="o">=</span><span class="n">_config</span><span class="o">.</span><span class="n">_VERSION_STR</span><span class="p">,</span> + <span class="n">fp_root_path</span><span class="o">=</span><span class="n">fp_root_path_to_python</span><span class="p">,</span> + <span class="p">)</span> + <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_JOB</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_JOB</span><span class="p">)</span> + + + <span class="k">try</span><span class="p">:</span> + <span class="n">tempjobfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> + <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_JOB</span><span class="p">)</span> + + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">tempjobfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to write '</span> <span class="o">+</span> + <span class="n">tempjobfile</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="del_convert_build"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.del_convert_build">[docs]</a><span class="k">def</span> <span class="nf">del_convert_build</span><span class="p">(</span><span class="n">src_path</span><span class="p">):</span> + <span class="sd">'''Clean up the Fortran source directory and remove all</span> +<span class="sd"> build files (e.g. \*.o, \*.mod and CONVERT2)</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> src_path : str</span> +<span class="sd"> Path to the fortran source directory.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="n">modfiles</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="s1">'*.mod'</span><span class="p">)</span> + <span class="n">objfiles</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="s1">'*.o'</span><span class="p">)</span> + <span class="n">exefile</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span><span class="p">)</span> + + <span class="n">modfiles</span><span class="o">.</span><span class="n">delete_files</span><span class="p">()</span> + <span class="n">objfiles</span><span class="o">.</span><span class="n">delete_files</span><span class="p">()</span> + <span class="n">exefile</span><span class="o">.</span><span class="n">delete_files</span><span class="p">()</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="mk_convert_build"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.mk_convert_build">[docs]</a><span class="k">def</span> <span class="nf">mk_convert_build</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="n">makefile</span><span class="p">):</span> + <span class="sd">'''Compiles the Fortran code and generates the executable.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> src_path : str</span> +<span class="sd"> Path to the fortran source directory.</span> + +<span class="sd"> makefile : str</span> +<span class="sd"> The name of the makefile which should be used.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="k">try</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Using makefile: '</span> <span class="o">+</span> <span class="n">makefile</span><span class="p">)</span> + <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'make'</span><span class="p">,</span> <span class="s1">'-f'</span><span class="p">,</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="n">makefile</span><span class="p">)],</span> + <span class="n">stdin</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> + <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> + <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> + <span class="n">bufsize</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + <span class="n">pout</span><span class="p">,</span> <span class="n">perr</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span> + <span class="nb">print</span><span class="p">(</span><span class="n">pout</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span> + <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">returncode</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="n">perr</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Please edit '</span> <span class="o">+</span> <span class="n">makefile</span> <span class="o">+</span> + <span class="s1">' or try another Makefile in the src directory.'</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Most likely GRIB_API_INCLUDE_DIR, GRIB_API_LIB '</span> + <span class="s1">'and EMOSLIB must be adapted.'</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Available Makefiles:'</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="n">UioFiles</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="s1">'Makefile*'</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="s1">'Compilation failed!'</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR: Makefile call failed:'</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'ls'</span><span class="p">,</span> <span class="s1">'-l'</span><span class="p">,</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span><span class="p">)],</span> + <span class="n">error_msg</span><span class="o">=</span><span class="s1">'FORTRAN EXECUTABLE COULD NOT BE FOUND!'</span><span class="p">)</span> + + <span class="k">return</span></div> + + +<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span> + <span class="n">main</span><span class="p">()</span> +</pre></div> + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/_modules/prepare_flexpart.html b/Documentation/html/_modules/prepare_flexpart.html new file mode 100644 index 0000000000000000000000000000000000000000..7dcd113a10543ef2369ec0eb6380be119996e3e3 --- /dev/null +++ b/Documentation/html/_modules/prepare_flexpart.html @@ -0,0 +1,389 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>prepare_flexpart — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="index.html">Module code</a> »</li> + + <li>prepare_flexpart</li> + + + <li class="wy-breadcrumbs-aside"> + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for prepare_flexpart</h1><div class="highlight"><pre> +<span></span><span class="ch">#!/usr/bin/env python3</span> +<span class="c1"># -*- coding: utf-8 -*-</span> +<span class="c1">#*******************************************************************************</span> +<span class="c1"># @Author: Anne Fouilloux (University of Oslo)</span> +<span class="c1">#</span> +<span class="c1"># @Date: October 2014</span> +<span class="c1">#</span> +<span class="c1"># @Change History:</span> +<span class="c1">#</span> +<span class="c1"># November 2015 - Leopold Haimberger (University of Vienna):</span> +<span class="c1"># - using the WebAPI also for general MARS retrievals</span> +<span class="c1"># - job submission on ecgate and cca</span> +<span class="c1"># - job templates suitable for twice daily operational dissemination</span> +<span class="c1"># - dividing retrievals of longer periods into digestable chunks</span> +<span class="c1"># - retrieve also longer term forecasts, not only analyses and</span> +<span class="c1"># short term forecast data</span> +<span class="c1"># - conversion into GRIB2</span> +<span class="c1"># - conversion into .fp format for faster execution of FLEXPART</span> +<span class="c1">#</span> +<span class="c1"># February 2018 - Anne Philipp (University of Vienna):</span> +<span class="c1"># - applied PEP8 style guide</span> +<span class="c1"># - added documentation</span> +<span class="c1"># - minor changes in programming style for consistence</span> +<span class="c1"># - BUGFIX: removed call of clean_up-Function after call of</span> +<span class="c1"># prepareFlexpart in main since it is already called in</span> +<span class="c1"># prepareFlexpart at the end!</span> +<span class="c1"># - created function main and moved the two function calls for</span> +<span class="c1"># arguments and prepare_flexpart into it</span> +<span class="c1">#</span> +<span class="c1"># @License:</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> +<span class="c1">#</span> +<span class="c1"># SPDX-License-Identifier: CC-BY-4.0</span> +<span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> +<span class="c1"># *******************************************************************************</span> +<span class="c1"># pylint: disable=ungrouped-imports</span> +<span class="c1"># not necessary that we group the imports</span> +<span class="sd">'''This script prepares the final version of the grib files which are</span> +<span class="sd">then used by FLEXPART.</span> + +<span class="sd">It converts the bunch of grib files extracted via get_mars_data before,</span> +<span class="sd">by doing the necessary conversion to get consistent grids or the</span> +<span class="sd">disaggregation of flux data. Finally, the data fields are combined</span> +<span class="sd">in files per available hour with the naming convention xxYYMMDDHH,</span> +<span class="sd">where xx should be 2 arbitrary letters (mostly xx is chosen to be "EN").</span> + +<span class="sd">This file can also be imported as a module which then contains the following</span> +<span class="sd">functions:</span> + +<span class="sd"> * main</span> +<span class="sd"> * prepare_flexpart</span> + +<span class="sd">Type: prepare_flexpart.py --help</span> +<span class="sd">to get information about command line parameters.</span> +<span class="sd">Read the documentation for usage instructions.</span> +<span class="sd">'''</span> + +<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">import</span> <span class="nn">datetime</span> +<span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">inspect</span> +<span class="kn">import</span> <span class="nn">sys</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> +<span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span> + <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="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="c1"># pylint: enable=wrong-import-position</span> + +<span class="c1"># ------------------------------------------------------------------------------</span> +<span class="c1"># FUNCTION</span> +<span class="c1"># ------------------------------------------------------------------------------</span> +<div class="viewcode-block" id="main"><a class="viewcode-back" href="../Documentation/Api/api_python.html#prepare_flexpart.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">():</span> + <span class="sd">'''Controls the program to prepare flexpart input files from mars data.</span> + +<span class="sd"> This is done if it is called directly from command line.</span> +<span class="sd"> Then it also takes program call arguments and control file input.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="n">c</span><span class="p">,</span> <span class="n">ppid</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">setup_controldata</span><span class="p">()</span> + <span class="n">prepare_flexpart</span><span class="p">(</span><span class="n">ppid</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> + <span class="n">normal_exit</span><span class="p">(</span><span class="s1">'Preparing FLEXPART output files: Done!'</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="prepare_flexpart"><a class="viewcode-back" href="../Documentation/Api/api_python.html#prepare_flexpart.prepare_flexpart">[docs]</a><span class="k">def</span> <span class="nf">prepare_flexpart</span><span class="p">(</span><span class="n">ppid</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span> + <span class="sd">'''Converts the mars data into flexpart ready input files.</span> + +<span class="sd"> Specific data fields are converted to a different grid and the flux</span> +<span class="sd"> data are going to be disaggregated. The data fields are collected by</span> +<span class="sd"> hour and stored in a file with a specific FLEXPART relevant naming</span> +<span class="sd"> convention.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> ppid : int</span> +<span class="sd"> Contains the ppid number of the current ECMWF job. It will be None if</span> +<span class="sd"> the method was called within this module.</span> + +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="n">check_ppid</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">ppid</span><span class="p">)</span> + + <span class="c1"># create the start and end date</span> + <span class="n">start</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="n">year</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span><span class="p">[:</span><span class="mi">4</span><span class="p">]),</span> + <span class="n">month</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span><span class="p">[</span><span class="mi">4</span><span class="p">:</span><span class="mi">6</span><span class="p">]),</span> + <span class="n">day</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span><span class="p">[</span><span class="mi">6</span><span class="p">:]))</span> + + <span class="n">end</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="n">year</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span><span class="p">[:</span><span class="mi">4</span><span class="p">]),</span> + <span class="n">month</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span><span class="p">[</span><span class="mi">4</span><span class="p">:</span><span class="mi">6</span><span class="p">]),</span> + <span class="n">day</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span><span class="p">[</span><span class="mi">6</span><span class="p">:]))</span> + + <span class="c1"># if basetime is 00</span> + <span class="c1"># assign starting date minus 1 day</span> + <span class="c1"># since we need the 12 hours upfront</span> + <span class="c1"># (the day before from 12 UTC to current day 00 UTC)</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="o">-</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'Prepare '</span> <span class="o">+</span> <span class="n">start</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span> <span class="o">+</span> + <span class="s1">'/to/'</span> <span class="o">+</span> <span class="n">end</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">))</span> + + <span class="c1"># create output dir if necessary</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">outputdir</span><span class="p">):</span> + <span class="n">make_dir</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">outputdir</span><span class="p">)</span> + + <span class="c1"># get all files with flux data to be deaccumulated</span> + <span class="n">inputfiles</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'*OG_acc_SL*.'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ppid</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'.*'</span><span class="p">)</span> + + <span class="c1"># deaccumulate the flux data</span> + <span class="n">flexpart</span> <span class="o">=</span> <span class="n">EcFlexpart</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="n">flexpart</span><span class="o">.</span><span class="n">write_namelist</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> + <span class="n">flexpart</span><span class="o">.</span><span class="n">deacc_fluxes</span><span class="p">(</span><span class="n">inputfiles</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> + + <span class="c1"># get a list of all other files</span> + <span class="n">inputfiles</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'????__??.*'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ppid</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'.*'</span><span class="p">)</span> + + <span class="c1"># produce FLEXPART-ready GRIB files and process them -</span> + <span class="c1"># copy/transfer/interpolate them or make them GRIB2</span> + <span class="n">flexpart</span> <span class="o">=</span> <span class="n">EcFlexpart</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="n">flexpart</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">inputfiles</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">stream</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'elda'</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">doubleelda</span><span class="p">:</span> + <span class="n">flexpart</span><span class="o">.</span><span class="n">calc_extra_elda</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span><span class="p">)</span> + <span class="n">flexpart</span><span class="o">.</span><span class="n">process_output</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> + + <span class="c1"># check if in debugging mode, then store all files</span> + <span class="c1"># otherwise delete temporary files</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">debug</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">Temporary files left intact'</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">clean_up</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> + + <span class="k">return</span></div> + +<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span> + <span class="n">main</span><span class="p">()</span> +</pre></div> + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/_modules/submit.html b/Documentation/html/_modules/submit.html new file mode 100644 index 0000000000000000000000000000000000000000..2d7a571f8d14107037b409919ff3ec441d6ebd7e --- /dev/null +++ b/Documentation/html/_modules/submit.html @@ -0,0 +1,471 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>submit — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="index.html">Module code</a> »</li> + + <li>submit</li> + + + <li class="wy-breadcrumbs-aside"> + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for submit</h1><div class="highlight"><pre> +<span></span><span class="ch">#!/usr/bin/env python3</span> +<span class="c1"># -*- coding: utf-8 -*-</span> +<span class="c1">#*******************************************************************************</span> +<span class="c1"># @Author: Anne Fouilloux (University of Oslo)</span> +<span class="c1">#</span> +<span class="c1"># @Date: October 2014</span> +<span class="c1">#</span> +<span class="c1"># @Change History:</span> +<span class="c1">#</span> +<span class="c1"># November 2015 - Leopold Haimberger (University of Vienna):</span> +<span class="c1"># - job submission on ecgate and cca</span> +<span class="c1"># - job templates suitable for twice daily operational dissemination</span> +<span class="c1">#</span> +<span class="c1"># February 2018 - Anne Philipp (University of Vienna):</span> +<span class="c1"># - applied PEP8 style guide</span> +<span class="c1"># - added documentation</span> +<span class="c1"># - minor changes in programming style (for consistence)</span> +<span class="c1"># - changed path names to variables from config file</span> +<span class="c1"># - added option for writing mars requests to extra file</span> +<span class="c1"># additionally, as option without submitting the mars jobs</span> +<span class="c1"># - splitted submit function to use genshi templates for the</span> +<span class="c1"># job script and avoid code duplication</span> +<span class="c1">#</span> +<span class="c1"># @License:</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> +<span class="c1">#</span> +<span class="c1"># SPDX-License-Identifier: CC-BY-4.0</span> +<span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> +<span class="c1">#*******************************************************************************</span> +<span class="sd">'''This script allows the user to extract meteorological fields from the ECMWF.</span> + +<span class="sd">It prepares the settings for retrieving the data from ECMWF servers and</span> +<span class="sd">process the resulting files to prepare them for the use with FLEXPART or</span> +<span class="sd">FLEXTRA.</span> + +<span class="sd">If it is supposed to work locally then it works through the necessary</span> +<span class="sd">functions get_mars_data and prepare_flexpart. Otherwise it prepares</span> +<span class="sd">a job script (korn shell) which will do the necessary work on the</span> +<span class="sd">ECMWF server. This script will de submitted via the ecaccess command</span> +<span class="sd">ecaccess-job-submit.</span> + +<span class="sd">This file can also be imported as a module which then contains the following</span> +<span class="sd">functions:</span> + +<span class="sd"> * main - the main function of the script</span> +<span class="sd"> * submit - calls mk_jobscript depending on operation mode and submits its</span> +<span class="sd"> * mk_jobscript - creates the job script from a template</span> + +<span class="sd">Type: submit.py --help</span> +<span class="sd">to get information about command line parameters.</span> +<span class="sd">Read the documentation for usage instructions.</span> +<span class="sd">'''</span> + +<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">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="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="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="c1">#from Classes.ControlFile import ControlFile</span> + + +<span class="c1"># ------------------------------------------------------------------------------</span> +<span class="c1"># METHODS</span> +<span class="c1"># ------------------------------------------------------------------------------</span> + +<div class="viewcode-block" id="main"><a class="viewcode-back" href="../Documentation/Api/api_python.html#submit.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">():</span> + <span class="sd">'''Get the arguments from script call and from CONTROL file.</span> +<span class="sd"> Decides from the argument "queue" if the local version</span> +<span class="sd"> is done "queue=None" or the gateway version with "queue=ecgate"</span> +<span class="sd"> or "queue=cca".</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="n">c</span><span class="p">,</span> <span class="n">ppid</span><span class="p">,</span> <span class="n">queue</span><span class="p">,</span> <span class="n">job_template</span> <span class="o">=</span> <span class="n">setup_controldata</span><span class="p">()</span> + + <span class="c1"># on local side</span> + <span class="c1"># starting from an ECMWF server this would also be the local side</span> + <span class="n">called_from_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">()</span> + <span class="k">if</span> <span class="n">queue</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'/'</span><span class="p">:</span> + <span class="n">c</span><span class="o">.</span><span class="n">inputdir</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">called_from_dir</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">outputdir</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'/'</span><span class="p">:</span> + <span class="n">c</span><span class="o">.</span><span class="n">outputdir</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">called_from_dir</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">outputdir</span><span class="p">)</span> + <span class="n">get_mars_data</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> + <span class="n">prepare_flexpart</span><span class="p">(</span><span class="n">ppid</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> + <span class="n">exit_message</span> <span class="o">=</span> <span class="s1">'FLEX_EXTRACT IS DONE!'</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">exit_message</span> <span class="o">=</span> <span class="s1">'PRINTING MARS_REQUESTS DONE!'</span> + <span class="c1"># send files to ECMWF server</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">submit</span><span class="p">(</span><span class="n">job_template</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">queue</span><span class="p">)</span> + <span class="n">exit_message</span> <span class="o">=</span> <span class="s1">'FLEX_EXTRACT JOB SCRIPT IS SUBMITED!'</span> + + <span class="n">normal_exit</span><span class="p">(</span><span class="n">exit_message</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="submit"><a class="viewcode-back" href="../Documentation/Api/api_python.html#submit.submit">[docs]</a><span class="k">def</span> <span class="nf">submit</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">queue</span><span class="p">):</span> + <span class="sd">'''Prepares the job script and submits it to the specified queue.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> jtemplate : str</span> +<span class="sd"> Job template file from sub-directory "_templates" for</span> +<span class="sd"> submission to ECMWF. It contains all necessary</span> +<span class="sd"> module and variable settings for the ECMWF environment as well as</span> +<span class="sd"> the job call and mail report instructions.</span> +<span class="sd"> Default is "job.temp".</span> + +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> queue : str</span> +<span class="sd"> Name of queue for submission to ECMWF (e.g. ecgate or cca )</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">oper</span><span class="p">:</span> + <span class="c1"># --------- create on demand job script ------------------------------------</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'---- Pure forecast mode! ----'</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'---- On-demand mode! ----'</span><span class="p">)</span> + + <span class="n">job_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_JOBSCRIPTS</span><span class="p">,</span> + <span class="n">jtemplate</span><span class="p">[:</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">+</span> <span class="s1">'.ksh'</span><span class="p">)</span> + + <span class="c1"># divide time periode into specified number of job chunks</span> + <span class="c1"># to have multiple job scripts</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">job_chunk</span><span class="p">:</span> + <span class="n">start</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> + <span class="n">end</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> + <span class="n">chunk</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">job_chunk</span><span class="p">)</span> + <span class="n">oneday</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + + <span class="k">while</span> <span class="n">start</span> <span class="o"><=</span> <span class="n">end</span><span class="p">:</span> + <span class="k">if</span> <span class="p">(</span><span class="n">start</span> <span class="o">+</span> <span class="n">chunk</span><span class="p">)</span> <span class="o"><=</span> <span class="n">end</span><span class="p">:</span> + <span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="p">(</span><span class="n">start</span> <span class="o">+</span> <span class="n">chunk</span> <span class="o">-</span> <span class="n">oneday</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span> + + <span class="n">clist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">to_list</span><span class="p">()</span> + <span class="n">mk_jobscript</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> <span class="n">job_file</span><span class="p">,</span> <span class="n">clist</span><span class="p">)</span> + + <span class="n">job_id</span> <span class="o">=</span> <span class="n">submit_job_to_ecserver</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">job_file</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'The job id is: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">job_id</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span> + + <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="o">+</span> <span class="n">chunk</span> + <span class="n">c</span><span class="o">.</span><span class="n">start_date</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span> + <span class="c1"># submit a single job script</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">clist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">to_list</span><span class="p">()</span> + + <span class="n">mk_jobscript</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> <span class="n">job_file</span><span class="p">,</span> <span class="n">clist</span><span class="p">)</span> + + <span class="n">job_id</span> <span class="o">=</span> <span class="n">submit_job_to_ecserver</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">job_file</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'The job id is: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">job_id</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span> + + <span class="k">else</span><span class="p">:</span> + <span class="c1"># --------- create operational job script ----------------------------------</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'---- Operational mode! ----'</span><span class="p">)</span> + + <span class="n">job_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_JOBSCRIPTS</span><span class="p">,</span> + <span class="n">jtemplate</span><span class="p">[:</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">+</span> <span class="s1">'oper.ksh'</span><span class="p">)</span> + + <span class="n">c</span><span class="o">.</span><span class="n">start_date</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{MSJ_YEAR}</span><span class="s1">$</span><span class="si">{MSJ_MONTH}</span><span class="s1">$</span><span class="si">{MSJ_DAY}</span><span class="s1">'</span> + <span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{MSJ_YEAR}</span><span class="s1">$</span><span class="si">{MSJ_MONTH}</span><span class="s1">$</span><span class="si">{MSJ_DAY}</span><span class="s1">'</span> + <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{MSJ_BASETIME}</span><span class="s1">'</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">24</span><span class="p">:</span> + <span class="n">c</span><span class="o">.</span><span class="n">time</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{MSJ_BASETIME}</span><span class="s1"> </span><span class="si">{MSJ_BASETIME}</span><span class="s1">'</span> + + <span class="n">clist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">to_list</span><span class="p">()</span> + + <span class="n">mk_jobscript</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> <span class="n">job_file</span><span class="p">,</span> <span class="n">clist</span><span class="p">)</span> + + <span class="n">job_id</span> <span class="o">=</span> <span class="n">submit_job_to_ecserver</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">job_file</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'The job id is: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">job_id</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'You should get an email per job with subject flex.hostname.pid'</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="mk_jobscript"><a class="viewcode-back" href="../Documentation/Api/api_python.html#submit.mk_jobscript">[docs]</a><span class="k">def</span> <span class="nf">mk_jobscript</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> <span class="n">job_file</span><span class="p">,</span> <span class="n">clist</span><span class="p">):</span> + <span class="sd">'''Creates the job script from template.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> jtemplate : str</span> +<span class="sd"> Job template file from sub-directory "_templates" for</span> +<span class="sd"> submission to ECMWF. It contains all necessary</span> +<span class="sd"> module and variable settings for the ECMWF environment as well as</span> +<span class="sd"> the job call and mail report instructions.</span> +<span class="sd"> Default is "job.temp".</span> + +<span class="sd"> job_file : str</span> +<span class="sd"> Path to the job script file.</span> + +<span class="sd"> clist : list of str</span> +<span class="sd"> Contains all necessary parameters for ECMWF CONTROL file.</span> + +<span class="sd"> Return</span> +<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="c1"># load template and insert control content as list</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> + <span class="n">control_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> + <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> + + <span class="n">stream</span> <span class="o">=</span> <span class="n">control_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">control_content</span><span class="o">=</span><span class="n">clist</span><span class="p">)</span> + <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate jobscript'</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate jobscript'</span><span class="p">)</span> + + <span class="c1"># create jobscript file</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">job_file</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to write '</span> <span class="o">+</span> <span class="n">job_file</span><span class="p">)</span> + + <span class="k">return</span></div> + + +<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span> + <span class="n">main</span><span class="p">()</span> +</pre></div> + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/_modules/tools.html b/Documentation/html/_modules/tools.html new file mode 100644 index 0000000000000000000000000000000000000000..b28f7ca9120bb290e164a27229e8199270e01ee2 --- /dev/null +++ b/Documentation/html/_modules/tools.html @@ -0,0 +1,1116 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>tools — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> + <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" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="index.html">Module code</a> »</li> + + <li>tools</li> + + + <li class="wy-breadcrumbs-aside"> + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for tools</h1><div class="highlight"><pre> +<span></span><span class="ch">#!/usr/bin/env python3</span> +<span class="c1"># -*- coding: utf-8 -*-</span> +<span class="c1">#*******************************************************************************</span> +<span class="c1"># @Author: Anne Philipp (University of Vienna)</span> +<span class="c1">#</span> +<span class="c1"># @Date: May 2018</span> +<span class="c1">#</span> +<span class="c1"># @Change History:</span> +<span class="c1"># October 2014 - Anne Fouilloux (University of Oslo)</span> +<span class="c1"># - created functions silent_remove and product (taken from ECMWF)</span> +<span class="c1">#</span> +<span class="c1"># November 2015 - Leopold Haimberger (University of Vienna)</span> +<span class="c1"># - created functions: interpret_args_and_control, clean_up</span> +<span class="c1"># my_error, normal_exit, init128, to_param_id</span> +<span class="c1">#</span> +<span class="c1"># April - December 2018 - Anne Philipp (University of Vienna):</span> +<span class="c1"># - applied PEP8 style guide</span> +<span class="c1"># - added documentation</span> +<span class="c1"># - moved all non class methods from former file Flexparttools in here</span> +<span class="c1"># - seperated args and control interpretation</span> +<span class="c1"># - added functions get_list_as_string, read_ecenv, send_mail, make_dir,</span> +<span class="c1"># put_file_to_ecserver, submit_job_to_ecserver, get_informations,</span> +<span class="c1"># get_dimensions, execute_subprocess, none_or_int, none_or_str</span> +<span class="c1">#</span> +<span class="c1"># @License:</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> +<span class="c1">#</span> +<span class="c1"># SPDX-License-Identifier: CC-BY-4.0</span> +<span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> +<span class="c1">#</span> +<span class="c1"># @Methods:</span> +<span class="c1"># none_or_str</span> +<span class="c1"># none_or_int</span> +<span class="c1"># get_cmdline_args</span> +<span class="c1"># read_ecenv</span> +<span class="c1"># clean_up</span> +<span class="c1"># my_error</span> +<span class="c1"># send_mail</span> +<span class="c1"># normal_exit</span> +<span class="c1"># product</span> +<span class="c1"># silent_remove</span> +<span class="c1"># init128</span> +<span class="c1"># to_param_id</span> +<span class="c1"># get_list_as_string</span> +<span class="c1"># make_dir</span> +<span class="c1"># put_file_to_ecserver</span> +<span class="c1"># submit_job_to_ecserver</span> +<span class="c1"># get_informations</span> +<span class="c1"># get_dimensions</span> +<span class="c1"># execute_subprocess</span> +<span class="c1">#*******************************************************************************</span> +<span class="sd">'''This module contains a collection of diverse tasks within flex_extract.</span> +<span class="sd">'''</span> + +<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">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">errno</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">subprocess</span> +<span class="kn">import</span> <span class="nn">traceback</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> +<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="c1"># ------------------------------------------------------------------------------</span> +<span class="c1"># METHODS</span> +<span class="c1"># ------------------------------------------------------------------------------</span> + +<div class="viewcode-block" id="setup_controldata"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.setup_controldata">[docs]</a><span class="k">def</span> <span class="nf">setup_controldata</span><span class="p">():</span> + <span class="sd">'''Collects, stores and checks controlling arguments from command line,</span> +<span class="sd"> CONTROL file and ECMWF_ENV file.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> ppid : str</span> +<span class="sd"> Parent process id.</span> + +<span class="sd"> queue : str</span> +<span class="sd"> Name of queue for submission to ECMWF (e.g. ecgate or cca )</span> + +<span class="sd"> job_template : str</span> +<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="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> + <span class="n">c</span><span class="o">.</span><span class="n">assign_args_to_control</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">):</span> + <span class="n">env_parameter</span> <span class="o">=</span> <span class="n">read_ecenv</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span> + <span class="n">c</span><span class="o">.</span><span class="n">assign_envs_to_control</span><span class="p">(</span><span class="n">env_parameter</span><span class="p">)</span> + <span class="n">c</span><span class="o">.</span><span class="n">check_conditions</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">queue</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">c</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">ppid</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">queue</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">job_template</span></div> + +<div class="viewcode-block" id="none_or_str"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.none_or_str">[docs]</a><span class="k">def</span> <span class="nf">none_or_str</span><span class="p">(</span><span class="n">value</span><span class="p">):</span> + <span class="sd">'''Converts the input string into pythons None-type if the string</span> +<span class="sd"> contains string "None".</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> value : str</span> +<span class="sd"> String to be checked for the "None" word.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> None or value:</span> +<span class="sd"> Return depends on the content of the input value. If it was "None",</span> +<span class="sd"> then the python type None is returned. Otherwise the string itself.</span> +<span class="sd"> '''</span> + <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="s1">'None'</span><span class="p">:</span> + <span class="k">return</span> <span class="kc">None</span> + <span class="k">return</span> <span class="n">value</span></div> + +<div class="viewcode-block" id="none_or_int"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.none_or_int">[docs]</a><span class="k">def</span> <span class="nf">none_or_int</span><span class="p">(</span><span class="n">value</span><span class="p">):</span> + <span class="sd">'''Converts the input string into pythons None-type if the string</span> +<span class="sd"> contains string "None". Otherwise it is converted to an integer value.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> value : str</span> +<span class="sd"> String to be checked for the "None" word.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> None or int(value):</span> +<span class="sd"> Return depends on the content of the input value. If it was "None",</span> +<span class="sd"> then the python type None is returned. Otherwise the string is</span> +<span class="sd"> converted into an integer value.</span> +<span class="sd"> '''</span> + <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="s1">'None'</span><span class="p">:</span> + <span class="k">return</span> <span class="kc">None</span> + <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">)</span></div> + +<div class="viewcode-block" id="get_cmdline_args"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.get_cmdline_args">[docs]</a><span class="k">def</span> <span class="nf">get_cmdline_args</span><span class="p">():</span> + <span class="sd">'''Decomposes the command line arguments and assigns them to variables.</span> +<span class="sd"> Apply default values for non mentioned arguments.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> args : Namespace</span> +<span class="sd"> Contains the commandline arguments from script/program call.</span> +<span class="sd"> '''</span> + + <span class="n">parser</span> <span class="o">=</span> <span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="s1">'Retrieve FLEXPART input from </span><span class="se">\</span> +<span class="s1"> ECMWF MARS archive'</span><span class="p">,</span> + <span class="n">formatter_class</span><span class="o">=</span><span class="n">ArgumentDefaultsHelpFormatter</span><span class="p">)</span> + + <span class="c1"># control parameters that override control file values</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--start_date"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"start_date"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"start date YYYYMMDD"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--end_date"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"end_date"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"end_date YYYYMMDD"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--date_chunk"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"date_chunk"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"# of days to be retrieved at once"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--job_chunk"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"job_chunk"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"# of days to be retrieved within a single job"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--controlfile"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"controlfile"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">'CONTROL_EA5'</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"The file with all CONTROL parameters."</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--basetime"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"basetime"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"base such as 0 or 12 (for half day retrievals)"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--step"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"step"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Forecast steps such as 00/to/48"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--levelist"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"levelist"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Vertical levels to be retrieved, e.g. 30/to/60"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--area"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"area"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"area defined as north/west/south/east"</span><span class="p">)</span> + + <span class="c1"># some switches</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--debug"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"debug"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"debug mode - leave temporary files intact"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--oper"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"oper"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s1">'operational mode - prepares dates with '</span> + <span class="s1">'environment variables'</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--request"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"request"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"list all mars requests in file mars_requests.dat"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--public"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"public"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"public mode - retrieves the public datasets"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--rrint"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"rrint"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s1">'Selection of old or new precipitation '</span> + <span class="s1">'interpolation:</span><span class="se">\n</span><span class="s1">'</span> + <span class="s1">' 0 - old method</span><span class="se">\n</span><span class="s1">'</span> + <span class="s1">' 1 - new method (additional subgrid points)'</span><span class="p">)</span> + + <span class="c1"># set directories</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--inputdir"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"inputdir"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s1">'Path to the temporary directory for the '</span> + <span class="s1">'retrieval grib files and other processing files.'</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--outputdir"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"outputdir"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s1">'Path to the final directory where the final '</span> + <span class="s1">'FLEXPART ready input files are stored.'</span><span class="p">)</span> + + <span class="c1"># this is only used by prepare_flexpart.py to rerun a postprocessing step</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--ppid"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"ppid"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s1">'This is the specify parent process id of a '</span> + <span class="s1">'single flex_extract run to identify the files. '</span> + <span class="s1">'It is the second number in the GRIB files.'</span><span class="p">)</span> + + <span class="c1"># arguments for job submission to ECMWF, only needed by submit.py</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--job_template"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s1">'job_template'</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"job.temp"</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s1">'The job template file which are adapted to be '</span> + <span class="s1">'submitted to the batch system on ECMWF server.'</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--queue"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"queue"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s1">'The ECMWF server name for submission of the '</span> + <span class="s1">'job script to the batch system '</span> + <span class="s1">'(e.g. ecgate | cca | ccb)'</span><span class="p">)</span> + + <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span> + + <span class="k">return</span> <span class="n">args</span></div> + +<div class="viewcode-block" id="read_ecenv"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.read_ecenv">[docs]</a><span class="k">def</span> <span class="nf">read_ecenv</span><span class="p">(</span><span class="n">filepath</span><span class="p">):</span> + <span class="sd">'''Reads the file into a dictionary where the key values are the parameter</span> +<span class="sd"> names.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filepath : str</span> +<span class="sd"> Path to file where the ECMWF environment parameters are stored.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> envs : dict</span> +<span class="sd"> Contains the environment parameter ecuid, ecgid, gateway</span> +<span class="sd"> and destination for ECMWF server environments.</span> +<span class="sd"> '''</span> + <span class="n">envs</span> <span class="o">=</span> <span class="p">{}</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span> + <span class="n">data</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> + <span class="n">envs</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Error occured while trying to read ECMWF_ENV '</span> + <span class="s1">'file: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">filepath</span><span class="p">))</span> + + <span class="k">return</span> <span class="n">envs</span></div> + +<div class="viewcode-block" id="clean_up"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.clean_up">[docs]</a><span class="k">def</span> <span class="nf">clean_up</span><span class="p">(</span><span class="n">c</span><span class="p">):</span> + <span class="sd">'''Remove files from the intermediate directory (inputdir).</span> + +<span class="sd"> It keeps the final FLEXPART input files if program runs without</span> +<span class="sd"> ECMWF Api and keywords "ectrans" or "ecstorage" are set to "1".</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="nb">print</span><span class="p">(</span><span class="s2">"... clean inputdir!"</span><span class="p">)</span> + + <span class="n">cleanlist</span> <span class="o">=</span> <span class="p">[</span><span class="n">filename</span> <span class="k">for</span> <span class="n">filename</span> <span class="ow">in</span> + <span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s2">"*"</span><span class="p">))</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">prefix</span><span class="p">)]</span> + + <span class="k">if</span> <span class="n">cleanlist</span><span class="p">:</span> + <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">cleanlist</span><span class="p">:</span> + <span class="n">silent_remove</span><span class="p">(</span><span class="n">element</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"... done!"</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"... nothing to clean!"</span><span class="p">)</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="my_error"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.my_error">[docs]</a><span class="k">def</span> <span class="nf">my_error</span><span class="p">(</span><span class="n">message</span><span class="o">=</span><span class="s1">'ERROR'</span><span class="p">):</span> + <span class="sd">'''Prints a specified error message which can be passed to the function</span> +<span class="sd"> before exiting the program.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> message : str, optional</span> +<span class="sd"> Error message. Default value is "ERROR".</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="n">trace</span> <span class="o">=</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_stack</span><span class="p">())</span> + <span class="n">full_message</span> <span class="o">=</span> <span class="n">message</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n\n</span><span class="s1">'</span> <span class="o">+</span> <span class="n">trace</span> + + <span class="nb">print</span><span class="p">(</span><span class="n">full_message</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">return</span></div> + + +<div class="viewcode-block" id="send_mail"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.send_mail">[docs]</a><span class="k">def</span> <span class="nf">send_mail</span><span class="p">(</span><span class="n">users</span><span class="p">,</span> <span class="n">success_mode</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span> + <span class="sd">'''Prints a specific exit message which can be passed to the function.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> users : list of str</span> +<span class="sd"> Contains all email addresses which should be notified.</span> +<span class="sd"> It might also contain just the ecmwf user name which wil trigger</span> +<span class="sd"> mailing to the associated email address for this user.</span> + +<span class="sd"> success_mode : str</span> +<span class="sd"> States the exit mode of the program to put into</span> +<span class="sd"> the mail subject line.</span> + +<span class="sd"> message : str, optional</span> +<span class="sd"> Message for exiting program. Default value is "Done!".</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="k">for</span> <span class="n">user</span> <span class="ow">in</span> <span class="n">users</span><span class="p">:</span> + <span class="k">if</span> <span class="s1">'$</span><span class="si">{USER}</span><span class="s1">'</span> <span class="ow">in</span> <span class="n">user</span><span class="p">:</span> + <span class="n">user</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">'USER'</span><span class="p">)</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'mail'</span><span class="p">,</span> <span class="s1">'-s flex_extract_v7.1 '</span> <span class="o">+</span> + <span class="n">success_mode</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">)],</span> + <span class="n">stdin</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> + <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> + <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> + <span class="n">bufsize</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + <span class="n">pout</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">(</span><span class="nb">input</span><span class="o">=</span><span class="n">message</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n\n</span><span class="s1">'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> + <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... Email could not be sent!'</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... Email could not be sent!'</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Email sent to '</span> <span class="o">+</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">))</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="normal_exit"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.normal_exit">[docs]</a><span class="k">def</span> <span class="nf">normal_exit</span><span class="p">(</span><span class="n">message</span><span class="o">=</span><span class="s1">'Done!'</span><span class="p">):</span> + <span class="sd">'''Prints a specific exit message which can be passed to the function.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> message : str, optional</span> +<span class="sd"> Message for exiting program. Default value is "Done!".</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">message</span><span class="p">))</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="product"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.product">[docs]</a><span class="k">def</span> <span class="nf">product</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span> + <span class="sd">'''Creates combinations of all passed arguments.</span> + +<span class="sd"> This method combines the single characters of the passed arguments</span> +<span class="sd"> with each other. So that each character of each argument value</span> +<span class="sd"> will be combined with each character of the other arguments as a tuple.</span> + +<span class="sd"> Note</span> +<span class="sd"> ----</span> +<span class="sd"> This method is taken from an example at the ECMWF wiki website.</span> +<span class="sd"> https://software.ecmwf.int/wiki/display/GRIB/index.py; 2018-03-16</span> + +<span class="sd"> It was released under the following license:</span> +<span class="sd"> https://confluence.ecmwf.int/display/ECC/License</span> + +<span class="sd"> Example</span> +<span class="sd"> -------</span> +<span class="sd"> product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy</span> + +<span class="sd"> product(range(2), repeat = 3) --> 000 001 010 011 100 101 110 111</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> \*args : list or str</span> +<span class="sd"> Positional arguments (arbitrary number).</span> + +<span class="sd"> \*\*kwds : dict</span> +<span class="sd"> Contains all the keyword arguments from \*args.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> prod : :obj:`tuple`</span> +<span class="sd"> Return will be done with "yield". A tuple of combined arguments.</span> +<span class="sd"> See example in description above.</span> +<span class="sd"> '''</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">pools</span> <span class="o">=</span> <span class="p">[</span><span class="nb">tuple</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span> <span class="o">*</span> <span class="n">kwds</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'repeat'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> + <span class="n">result</span> <span class="o">=</span> <span class="p">[[]]</span> + <span class="k">for</span> <span class="n">pool</span> <span class="ow">in</span> <span class="n">pools</span><span class="p">:</span> + <span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="o">+</span> <span class="p">[</span><span class="n">y</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">result</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">pool</span><span class="p">]</span> + <span class="k">for</span> <span class="n">prod</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span> + <span class="k">yield</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">prod</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">TypeError</span> <span class="k">as</span> <span class="n">e</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="s1">'... PRODUCT GENERATION FAILED!'</span><span class="p">)</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="silent_remove"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.silent_remove">[docs]</a><span class="k">def</span> <span class="nf">silent_remove</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span> + <span class="sd">'''Remove file if it exists.</span> +<span class="sd"> The function does not fail if the file does not exist.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filename : str</span> +<span class="sd"> The name of the file to be removed without notification.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="c1"># errno.ENOENT = no such file or directory</span> + <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">==</span> <span class="n">errno</span><span class="o">.</span><span class="n">ENOENT</span><span class="p">:</span> + <span class="k">pass</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">raise</span> <span class="c1"># re-raise exception if a different error occured</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="init128"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.init128">[docs]</a><span class="k">def</span> <span class="nf">init128</span><span class="p">(</span><span class="n">filepath</span><span class="p">):</span> + <span class="sd">'''Opens and reads the grib file with table 128 information.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filepath : str</span> +<span class="sd"> Path to file of ECMWF grib table number 128.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> table128 : dict</span> +<span class="sd"> Contains the ECMWF grib table 128 information.</span> +<span class="sd"> The key is the parameter number and the value is the</span> +<span class="sd"> short name of the parameter.</span> +<span class="sd"> '''</span> + <span class="n">table128</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">fdata</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Error occured while trying to read parameter '</span> + <span class="s1">'table file: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">filepath</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">fdata</span><span class="p">:</span> + <span class="k">if</span> <span class="n">data</span> <span class="o">!=</span> <span class="s1">''</span> <span class="ow">and</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'!'</span><span class="p">:</span> + <span class="n">table128</span><span class="p">[</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">]]</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">59</span><span class="p">:</span><span class="mi">65</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> + + <span class="k">return</span> <span class="n">table128</span></div> + + +<div class="viewcode-block" id="to_param_id"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.to_param_id">[docs]</a><span class="k">def</span> <span class="nf">to_param_id</span><span class="p">(</span><span class="n">pars</span><span class="p">,</span> <span class="n">table</span><span class="p">):</span> + <span class="sd">'''Transform parameter names to parameter ids with ECMWF grib table 128.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> pars : str</span> +<span class="sd"> Addpar argument from CONTROL file in the format of</span> +<span class="sd"> parameter names instead of ids. The parameter short</span> +<span class="sd"> names are sepearted with "/" and they are passed as</span> +<span class="sd"> one single string.</span> + +<span class="sd"> table : dict</span> +<span class="sd"> Contains the ECMWF grib table 128 information.</span> +<span class="sd"> The key is the parameter number and the value is the</span> +<span class="sd"> short name of the parameter.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> ipar : list of int</span> +<span class="sd"> List of addpar parameters from CONTROL file transformed to</span> +<span class="sd"> parameter ids in the format of integer.</span> +<span class="sd"> '''</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">pars</span><span class="p">:</span> + <span class="k">return</span> <span class="p">[]</span> + <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pars</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span> + <span class="n">pars</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">pars</span><span class="p">)</span> + + <span class="n">cpar</span> <span class="o">=</span> <span class="n">pars</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> + <span class="n">ipar</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">par</span> <span class="ow">in</span> <span class="n">cpar</span><span class="p">:</span> + <span class="n">par</span> <span class="o">=</span> <span class="n">par</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> + <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> + <span class="k">if</span> <span class="n">par</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span> + <span class="n">par</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">par</span><span class="p">))</span><span class="o">.</span><span class="n">zfill</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> + <span class="k">if</span> <span class="n">par</span> <span class="o">==</span> <span class="n">k</span> <span class="ow">or</span> <span class="n">par</span> <span class="o">==</span> <span class="n">v</span><span class="p">:</span> + <span class="n">ipar</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">k</span><span class="p">))</span> + <span class="k">break</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Warning: par '</span> <span class="o">+</span> <span class="n">par</span> <span class="o">+</span> <span class="s1">' not found in table 128'</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">ipar</span></div> + +<div class="viewcode-block" id="to_param_id_with_tablenumber"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.to_param_id_with_tablenumber">[docs]</a><span class="k">def</span> <span class="nf">to_param_id_with_tablenumber</span><span class="p">(</span><span class="n">pars</span><span class="p">,</span> <span class="n">table</span><span class="p">):</span> + <span class="sd">'''Transform parameter names to parameter ids and add table id.</span> + +<span class="sd"> Conversion with ECMWF grib table 128.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> pars : str</span> +<span class="sd"> Addpar argument from CONTROL file in the format of</span> +<span class="sd"> parameter names instead of ids. The parameter short</span> +<span class="sd"> names are sepearted with "/" and they are passed as</span> +<span class="sd"> one single string.</span> + +<span class="sd"> table : dict</span> +<span class="sd"> Contains the ECMWF grib table 128 information.</span> +<span class="sd"> The key is the parameter number and the value is the</span> +<span class="sd"> short name of the parameter.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> spar : str</span> +<span class="sd"> List of addpar parameters from CONTROL file transformed to</span> +<span class="sd"> parameter ids in the format of integer.</span> +<span class="sd"> '''</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">pars</span><span class="p">:</span> + <span class="k">return</span> <span class="p">[]</span> + <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pars</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span> + <span class="n">pars</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">pars</span><span class="p">)</span> + + <span class="n">cpar</span> <span class="o">=</span> <span class="n">pars</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> + <span class="n">spar</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">par</span> <span class="ow">in</span> <span class="n">cpar</span><span class="p">:</span> + <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> + <span class="k">if</span> <span class="n">par</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span> + <span class="n">par</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">par</span><span class="p">))</span><span class="o">.</span><span class="n">zfill</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> + <span class="k">if</span> <span class="n">par</span> <span class="o">==</span> <span class="n">k</span> <span class="ow">or</span> <span class="n">par</span> <span class="o">==</span> <span class="n">v</span><span class="p">:</span> + <span class="n">spar</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">k</span> <span class="o">+</span> <span class="s1">'.128'</span><span class="p">)</span> + <span class="k">break</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n\n\t\t</span><span class="s1">Warning: par '</span> <span class="o">+</span> <span class="n">par</span> <span class="o">+</span> <span class="s1">' not found in table 128</span><span class="se">\n\n</span><span class="s1">'</span><span class="p">)</span> + + <span class="k">return</span> <span class="s1">'/'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">spar</span><span class="p">)</span></div> + +<div class="viewcode-block" id="get_list_as_string"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.get_list_as_string">[docs]</a><span class="k">def</span> <span class="nf">get_list_as_string</span><span class="p">(</span><span class="n">list_obj</span><span class="p">,</span> <span class="n">concatenate_sign</span><span class="o">=</span><span class="s1">', '</span><span class="p">):</span> + <span class="sd">'''Converts a list of arbitrary content into a single string.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> list_obj : list of *</span> +<span class="sd"> A list with arbitrary content.</span> + +<span class="sd"> concatenate_sign : str, optional</span> +<span class="sd"> A string which is used to concatenate the single</span> +<span class="sd"> list elements. Default value is ", ".</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> str_of_list : str</span> +<span class="sd"> The content of the list as a single string.</span> +<span class="sd"> '''</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">list_obj</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> + <span class="n">list_obj</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">list_obj</span><span class="p">)</span> + <span class="n">str_of_list</span> <span class="o">=</span> <span class="n">concatenate_sign</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">l</span><span class="p">)</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">list_obj</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">str_of_list</span></div> + +<div class="viewcode-block" id="make_dir"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.make_dir">[docs]</a><span class="k">def</span> <span class="nf">make_dir</span><span class="p">(</span><span class="n">directory</span><span class="p">):</span> + <span class="sd">'''Creates a directory.</span> + +<span class="sd"> It gives a warning if the directory already exists and skips process.</span> +<span class="sd"> The program stops only if there is another problem.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> directory : str</span> +<span class="sd"> The path to directory which should be created.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">directory</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="c1"># errno.EEXIST = directory already exists</span> + <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">==</span> <span class="n">errno</span><span class="o">.</span><span class="n">EEXIST</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'WARNING: Directory </span><span class="si">{0}</span><span class="s1"> already exists!'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">directory</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">raise</span> <span class="c1"># re-raise exception if a different error occured</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="put_file_to_ecserver"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.put_file_to_ecserver">[docs]</a><span class="k">def</span> <span class="nf">put_file_to_ecserver</span><span class="p">(</span><span class="n">ecd</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">ecuid</span><span class="p">,</span> <span class="n">ecgid</span><span class="p">):</span> + <span class="sd">'''Uses the ecaccess-file-put command to send a file to the ECMWF servers.</span> + +<span class="sd"> Note</span> +<span class="sd"> ----</span> +<span class="sd"> The return value is just for testing reasons. It does not have</span> +<span class="sd"> to be used from the calling function since the whole error handling</span> +<span class="sd"> is done in here.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> ecd : str</span> +<span class="sd"> The path were the file is stored.</span> + +<span class="sd"> filename : str</span> +<span class="sd"> The name of the file to send to the ECMWF server.</span> + +<span class="sd"> target : str</span> +<span class="sd"> The target queue where the file should be sent to.</span> + +<span class="sd"> ecuid : str</span> +<span class="sd"> The user id on ECMWF server.</span> + +<span class="sd"> ecgid : str</span> +<span class="sd"> The group id on ECMWF server.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s1">'ecaccess-file-put'</span><span class="p">,</span> + <span class="n">ecd</span> <span class="o">+</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">filename</span><span class="p">,</span> + <span class="n">target</span> <span class="o">+</span> <span class="s1">':/home/ms/'</span> <span class="o">+</span> + <span class="n">ecgid</span> <span class="o">+</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">ecuid</span> <span class="o">+</span> + <span class="s1">'/'</span> <span class="o">+</span> <span class="n">filename</span><span class="p">],</span> + <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">)</span> + <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Do you have a valid ecaccess certification key?'</span><span class="p">)</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... ECACCESS-FILE-PUT FAILED!'</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Most likely the ECACCESS library is not available!'</span><span class="p">)</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... ECACCESS-FILE-PUT FAILED!'</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="submit_job_to_ecserver"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.submit_job_to_ecserver">[docs]</a><span class="k">def</span> <span class="nf">submit_job_to_ecserver</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">jobname</span><span class="p">):</span> + <span class="sd">'''Uses ecaccess-job-submit command to submit a job to the ECMWF server.</span> + +<span class="sd"> Note</span> +<span class="sd"> ----</span> +<span class="sd"> The return value is just for testing reasons. It does not have</span> +<span class="sd"> to be used from the calling function since the whole error handling</span> +<span class="sd"> is done in here.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> target : str</span> +<span class="sd"> The target where the file should be sent to, e.g. the queue.</span> + +<span class="sd"> jobname : str</span> +<span class="sd"> The name of the jobfile to be submitted to the ECMWF server.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> job_id : int</span> +<span class="sd"> The id number of the job as a reference at the ecmwf server.</span> +<span class="sd"> '''</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">job_id</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s1">'ecaccess-job-submit'</span><span class="p">,</span> <span class="s1">'-queueName'</span><span class="p">,</span> + <span class="n">target</span><span class="p">,</span> <span class="n">jobname</span><span class="p">])</span> + + <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Do you have a valid ecaccess certification key?'</span><span class="p">)</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... ECACCESS-JOB-SUBMIT FAILED!'</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Most likely the ECACCESS library is not available!'</span><span class="p">)</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... ECACCESS-JOB-SUBMIT FAILED!'</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">job_id</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span></div> + + +<div class="viewcode-block" id="get_informations"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.get_informations">[docs]</a><span class="k">def</span> <span class="nf">get_informations</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span> + <span class="sd">'''Gets basic information from an example grib file.</span> + +<span class="sd"> These information are important for later use and the</span> +<span class="sd"> initialization of numpy arrays for data storing.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filename : str</span> +<span class="sd"> Name of the file which will be opened to extract basic information.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> data : dict</span> +<span class="sd"> Contains basic informations of the ECMWF grib files, e.g.</span> +<span class="sd"> 'Ni', 'Nj', 'latitudeOfFirstGridPointInDegrees',</span> +<span class="sd"> 'longitudeOfFirstGridPointInDegrees', 'latitudeOfLastGridPointInDegrees',</span> +<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="n">data</span> <span class="o">=</span> <span class="p">{}</span> + + <span class="c1"># --- open file ---</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"Opening file for getting information data --- </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">filename</span><span class="p">)</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="c1"># load first message from file</span> + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_grib_new_from_file</span><span class="p">(</span><span class="n">f</span><span class="p">)</span> + + <span class="c1"># information needed from grib message</span> + <span class="n">keys</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'Ni'</span><span class="p">,</span> + <span class="s1">'Nj'</span><span class="p">,</span> + <span class="s1">'latitudeOfFirstGridPointInDegrees'</span><span class="p">,</span> + <span class="s1">'longitudeOfFirstGridPointInDegrees'</span><span class="p">,</span> + <span class="s1">'latitudeOfLastGridPointInDegrees'</span><span class="p">,</span> + <span class="s1">'longitudeOfLastGridPointInDegrees'</span><span class="p">,</span> + <span class="s1">'jDirectionIncrementInDegrees'</span><span class="p">,</span> + <span class="s1">'iDirectionIncrementInDegrees'</span><span class="p">,</span> + <span class="s1">'missingValue'</span><span class="p">,</span> + <span class="p">]</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">Informations are: '</span><span class="p">)</span> + <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">:</span> + <span class="c1"># Get the value of the key in a grib message.</span> + <span class="n">data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> = </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="n">key</span><span class="p">]))</span> + + <span class="c1"># Free the memory for the message referred as gribid.</span> + <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">data</span></div> + + +<div class="viewcode-block" id="get_dimensions"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.get_dimensions">[docs]</a><span class="k">def</span> <span class="nf">get_dimensions</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">purefc</span><span class="p">,</span> <span class="n">dtime</span><span class="p">,</span> <span class="n">index_vals</span><span class="p">,</span> <span class="n">start_date</span><span class="p">,</span> <span class="n">end_date</span><span class="p">):</span> + <span class="sd">'''This function specifies the correct dimensions for x, y and t.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> info : dict</span> +<span class="sd"> Contains basic informations of the ECMWF grib files, e.g.</span> +<span class="sd"> 'Ni', 'Nj', 'latitudeOfFirstGridPointInDegrees',</span> +<span class="sd"> 'longitudeOfFirstGridPointInDegrees', 'latitudeOfLastGridPointInDegrees',</span> +<span class="sd"> 'longitudeOfLastGridPointInDegrees', 'jDirectionIncrementInDegrees',</span> +<span class="sd"> 'iDirectionIncrementInDegrees', 'missingValue'</span> + +<span class="sd"> purefc : int</span> +<span class="sd"> Switch for definition of pure forecast mode or not.</span> + +<span class="sd"> dtime : str</span> +<span class="sd"> Time step in hours.</span> + +<span class="sd"> index_vals : list of list of str</span> +<span class="sd"> Contains the values from the keys used for a distinct selection</span> +<span class="sd"> of grib messages in processing the grib files.</span> +<span class="sd"> Content looks like e.g.:</span> +<span class="sd"> index_vals[0]: ('20171106', '20171107', '20171108') ; date</span> +<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"> start_date : str</span> +<span class="sd"> The start date of the retrieval job.</span> + +<span class="sd"> end_date : str</span> +<span class="sd"> The end date of the retrieval job.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> (ix, jy, it) : tuple of int</span> +<span class="sd"> Dimension in x-direction, y-direction and in time.</span> +<span class="sd"> '''</span> + + <span class="n">ix</span> <span class="o">=</span> <span class="n">info</span><span class="p">[</span><span class="s1">'Ni'</span><span class="p">]</span> + + <span class="n">jy</span> <span class="o">=</span> <span class="n">info</span><span class="p">[</span><span class="s1">'Nj'</span><span class="p">]</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">purefc</span><span class="p">:</span> + <span class="n">it</span> <span class="o">=</span> <span class="p">((</span><span class="n">end_date</span> <span class="o">-</span> <span class="n">start_date</span><span class="p">)</span><span class="o">.</span><span class="n">days</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="mi">24</span> <span class="o">//</span> <span class="nb">int</span><span class="p">(</span><span class="n">dtime</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># #no of step * #no of times * #no of days</span> + <span class="n">it</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + + <span class="k">return</span> <span class="p">(</span><span class="n">ix</span><span class="p">,</span> <span class="n">jy</span><span class="p">,</span> <span class="n">it</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="execute_subprocess"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.execute_subprocess">[docs]</a><span class="k">def</span> <span class="nf">execute_subprocess</span><span class="p">(</span><span class="n">cmd_list</span><span class="p">,</span> <span class="n">error_msg</span><span class="o">=</span><span class="s1">'SUBPROCESS FAILED!'</span><span class="p">):</span> + <span class="sd">'''Executes a command line instruction via a subprocess.</span> + +<span class="sd"> Error handling is done if an error occures.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> cmd_list : list of str</span> +<span class="sd"> A list of the components for the command line execution. Each</span> +<span class="sd"> list entry is a single part of the command which is seperated from</span> +<span class="sd"> the rest by a blank space.</span> +<span class="sd"> E.g. ['mv', file1, file2]</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> error_msg : str, optional</span> +<span class="sd"> The possible error message if the subprocess failed.</span> +<span class="sd"> By default it will just tell "SUBPROCESS FAILED!".</span> +<span class="sd"> '''</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">(</span><span class="n">cmd_list</span><span class="p">)</span> + <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... '</span> <span class="o">+</span> <span class="n">error_msg</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... '</span> <span class="o">+</span> <span class="n">error_msg</span><span class="p">)</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="generate_retrieval_period_boundary"><a class="viewcode-back" href="../Documentation/Api/api_python.html#tools.generate_retrieval_period_boundary">[docs]</a><span class="k">def</span> <span class="nf">generate_retrieval_period_boundary</span><span class="p">(</span><span class="n">c</span><span class="p">):</span> + <span class="sd">'''Generates retrieval period boundary datetimes from CONTROL information.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> start_period : datetime</span> +<span class="sd"> The first timestamp of the actual retrieval period disregarding</span> +<span class="sd"> the temporary times which were used for processing reasons.</span> + +<span class="sd"> end_period : datetime</span> +<span class="sd"> The last timestamp of the actual retrieval period disregarding</span> +<span class="sd"> the temporary times which were used for processing reasons.</span> +<span class="sd"> '''</span> + <span class="c1"># generate start and end timestamp of the retrieval period</span> + <span class="n">start_period</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="n">start_period</span> <span class="o">=</span> <span class="n">start_period</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> + <span class="n">end_period</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="n">end_period</span> <span class="o">=</span> <span class="n">end_period</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span> + + + <span class="k">return</span> <span class="n">start_period</span><span class="p">,</span> <span class="n">end_period</span></div> +</pre></div> + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/_sources/Developers/gen_docu.rst.txt b/Documentation/html/_sources/Developers/gen_docu.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..77a2b8f769a20fff640f685ec606ef60c545236a --- /dev/null +++ b/Documentation/html/_sources/Developers/gen_docu.rst.txt @@ -0,0 +1,62 @@ +******************** +Update Documentation +******************** + +UNDER CONSTRUCTION + +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 + +#- pip install sphinx-fortran + + + +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. + + +Sequence diagramms +------------------ + +You might need to adapt the fonts path for the diagrams to a true type font. Currently it is set to: + +.. code-block:: bash + + # Fontpath for seqdiag (truetype font) + seqdiag_fontpath = '/usr/share/fonts/dejavu/DejaVuSerif.ttf' + + +Block diagramms +------------------ + +You might need to adapt the fonts path for the diagrams to a true type font. Currently it is set to: + +.. code-block:: bash + + # Fontpath for blockdiag (truetype font) + blockdiag_fontpath = '/usr/share/fonts/dejavu/DejaVuSerif.ttf' + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Documentation/Api/api_fortran.rst.txt b/Documentation/html/_sources/Documentation/Api/api_fortran.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..1bb81d5baf120630908ebec4a5bac9a6f4c624e2 --- /dev/null +++ b/Documentation/html/_sources/Documentation/Api/api_fortran.rst.txt @@ -0,0 +1,26 @@ +************************************** +Fortran's Auto Generated Documentation +************************************** + +.. contents:: + :local: + + + +Link to other documentation! + + + + +.... f:autoprogram:: preconvert + + + + +.. toctree:: + :hidden: + :maxdepth: 2 + + + + diff --git a/Documentation/html/_sources/Documentation/Api/api_python.rst.txt b/Documentation/html/_sources/Documentation/Api/api_python.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..724892ec33987c1c962692b2f10896a6a6641cc1 --- /dev/null +++ b/Documentation/html/_sources/Documentation/Api/api_python.rst.txt @@ -0,0 +1,96 @@ +************************************* +Python's Auto Generated Documentation +************************************* + +.. contents:: + :local: + +Programs +======== + +install +------- + +.. automodule:: install + :members: + +submit +------ + +.. automodule:: submit + :members: + +Classes +======= + +ControlFile +----------- + +.. automodule:: ControlFile + :members: + +EcFlexpart +---------- + +.. automodule:: EcFlexpart + :members: + +GribUtil +-------- + +.. automodule:: GribUtil + :members: + +MarsRetrieval +------------- + +.. automodule:: MarsRetrieval + :members: + +UioFiles +-------- + +.. automodule:: UioFiles + :members: + + + +Modules +======= + +get_mars_data +------------- + +.. automodule:: get_mars_data + :members: + +prepare_flexpart +---------------- + +.. automodule:: prepare_flexpart + :members: + +tools +----- + +.. automodule:: tools + :members: + +checks +------ + +.. automodule:: checks + :members: + + +disaggregation +-------------- + +.. automodule:: disaggregation + :members: + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Documentation/Input/changes.rst.txt b/Documentation/html/_sources/Documentation/Input/changes.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..4f11b051c9cd9d394a88fc99a7e2e9dddc768a8e --- /dev/null +++ b/Documentation/html/_sources/Documentation/Input/changes.rst.txt @@ -0,0 +1,18 @@ +********************** +CONTROL file changes +********************** + +Changes from version 7.0.4 to version 7.1 + - removed ``M_`` (but is still available for downward compatibility) + - grid resolution not in 1/1000 degress anymore (but is still available for downward compatibility) + - comments available with ``#`` + - only parameters which are needed to override the default values are necessary + - number of type/step/time elements do not have to be 24 any more. Just select the interval you need. + - the ``dtime`` parameter needs to be consistent with ``type/step/time``. For example ``dtime`` can be coarser as ``time`` intervals are available, but not finer. + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Documentation/Input/compilejob.rst.txt b/Documentation/html/_sources/Documentation/Input/compilejob.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..2f5aec46671804b89d2a856c481bd4fd70cd9bad --- /dev/null +++ b/Documentation/html/_sources/Documentation/Input/compilejob.rst.txt @@ -0,0 +1,116 @@ +******************************************** +The Compilation Jobscript ``compilejob.ksh`` +******************************************** + +The compilejob is a Korn-shell script which will be created during the installation process for the application modes **remote** and **gateway** from a template called ``compilejob.template`` in the template directory. + +``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. +These individual parameters are marked by a doubled ``$`` sign in ``job.temp``. + +The jobscript has a number of settings for the batch system which are fixed and differentiates between the *ecgate* and the *cca/ccb* +server system to load the necessary modules for the environment when submitted to the batch queue. + +The submission is done by the ``ECaccess`` tool from within ``flex_extract`` with the command ``ecaccess-job-submit``. + + + +What does the compilation script do? +------------------------------------ + + #. It sets necessary batch system parameters + #. It prepares the job environment at the ECMWF servers by loading the necessary library modules + #. It sets some environment variabels for the single session + #. It creates the ``flex_extract`` root directory in the ``$HOME`` path of the user + #. It untars the tar-ball into the root directory. + #. It compiles the Fortran programs's ``Makefile``. + #. At the end it checks if the script returned an error or not and send the log file via email to the user. + + + + + +Example ``compilejob.ksh`` +-------------------------- + +.. code-block:: bash + + + #!/bin/ksh + + # ON ECGB: + # start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server + # start with sbatch NAME_OF_THIS_FILE directly on machine + + #SBATCH --workdir=/scratch/ms/at/km4a + #SBATCH --qos=normal + #SBATCH --job-name=flex_ecmwf + #SBATCH --output=flex_ecmwf.%j.out + #SBATCH --error=flex_ecmwf.%j.out + #SBATCH --mail-type=FAIL + #SBATCH --time=12:00:00 + + ## CRAY specific batch requests + ##PBS -N flex_ecmwf + ##PBS -q ns + ##PBS -S /usr/bin/ksh + ##PBS -o /scratch/ms/at/km4a/flex_ecmwf.${Jobname}.${Job_ID}.out + # job output is in .ecaccess_DO_NOT_REMOVE + ##PBS -j oe + ##PBS -V + ##PBS -l EC_threads_per_task=1 + ##PBS -l EC_memory_per_task=3200MB + + set -x + export VERSION=7.1 + case ${HOST} in + *ecg*) + module unload grib_api + module unload eccodes + module unload python + module unload emos + module load python3 + module load eccodes/2.12.0 + module load emos/455-r64 + export FLEXPART_ROOT_SCRIPTS=${HOME} + export MAKEFILE=Makefile.gfortran + ;; + *cca*) + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + module load eccodes/2.12.0 + module load emos + echo ${GROUP} + echo ${HOME} + echo ${HOME} | awk -F / '{print $1, $2, $3, $4}' + export GROUP=`echo ${HOME} | awk -F / '{print $4}'` + export SCRATCH=/scratch/ms/${GROUP}/${USER} + export FLEXPART_ROOT_SCRIPTS=${HOME} + export MAKEFILE=Makefile.gfortran + ;; + 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 + make -f ${MAKEFILE} >flexcompile 2>flexcompile + + ls -l CONVERT2 >>flexcompile + if [ $? -eq 0 ]; then + echo 'SUCCESS!' >>flexcompile + mail -s flexcompile.${HOST}.$$ ${USER} <flexcompile + else + echo Environment: >>flexcompile + env >> flexcompile + mail -s "ERROR! flexcompile.${HOST}.$$" ${USER} <flexcompile + fi + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Documentation/Input/control.rst.txt b/Documentation/html/_sources/Documentation/Input/control.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..cb9e500e744e6774e4d4a01b6d7691d3e32bf849 --- /dev/null +++ b/Documentation/html/_sources/Documentation/Input/control.rst.txt @@ -0,0 +1,62 @@ +================ +The CONTROL file +================ + + + +.. MARS user documentation https://confluence.ecmwf.int/display/UDOC/MARS+user+documentation +.. MARS keywords and explanation https://confluence.ecmwf.int/display/UDOC/MARS+keywords + + +This file is an input file for :literal:`flex_extract's` main script :literal:`submit.py`. +It contains the controlling parameters :literal:`flex_extract` needs to decide on dataset specifications, +handling of the retrieved data and general bahaviour. The naming convention is usually (but not necessary): + + :literal:`CONTROL_<Dataset>[.optionalIndications]` + +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 *public users* +and *global* domain. For the operational datasets (*OD*) the file names contain also information of +the stream, the field type for forecasts, the method for extracting the vertical coordinate and other things like time or horizontal resolution. + + +Format of CONTROL files +---------------------------------- +The first string of each line is the parameter name, the following string(s) (separated by spaces) is (are) the parameter values. +The parameters can be sorted in any order with one parameter per line. +Comments are started with a '#' - sign. Some of these parameters can be overruled by the command line +parameters given to the :literal:`submit.py` script. +All parameters have default values. Only those parameters which have to be changed +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/`. +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. + + + + +CONTROL file +------------ +The file :literal:`CONTROL.documentation` documents the available parameters +in grouped sections with their default values. In :doc:`control_params` you can find a more +detailed description with additional hints, possible values and some useful information about +the setting of these parameters. + +.. literalinclude:: ../../../../../Run/Control/CONTROL.documentation + :language: bash + :caption: CONTROL.documentation + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 + diff --git a/Documentation/html/_sources/Documentation/Input/control_params.rst.txt b/Documentation/html/_sources/Documentation/Input/control_params.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..a1ed5b238253b9f2be9c535d0e5b842eb400cdc4 --- /dev/null +++ b/Documentation/html/_sources/Documentation/Input/control_params.rst.txt @@ -0,0 +1,113 @@ +====================== +The CONTROL parameters +====================== + + + +.. _ref-control-user: + +User Section +************ + +.. exceltable:: User parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: UserSection + :header: 1 + +.. _ref-control-general: + +General Section +*************** + +.. exceltable:: General parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: GeneralSection + :header: 1 + +.. _ref-control-time: + +Time Section +************ + +.. exceltable:: Time parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: TimeSection + :header: 1 + + +.. _ref-control-data: + +Data Section +************ + +.. exceltable:: Data parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: DataSection + :header: 1 + + +.. _ref-control-datafield: + +Data field Section +****************** + +.. exceltable:: Data field parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: DatafieldsSection + :header: 1 + + +.. _ref-control-fluxdata: + +Flux data Section +***************** + +.. exceltable:: Flux data parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: FluxDataSection + :header: 1 + + +.. _ref-control-domain: + +Domain Section +************** + +.. exceltable:: Domain parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: DomainSection + :header: 1 + :widths: 10,10,10,5,20,20 + + + +.. _ref-control-verticalwind: + +Vertical wind Section +********************* + +.. exceltable:: Vertical wind parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: VerticalWindSection + :header: 1 + + +.. _ref-control-adddata: + +Additional data Section +*********************** + +.. exceltable:: Additional data parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: AddDataSection + :header: 1 + + + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Documentation/Input/ecmwf_env.rst.txt b/Documentation/html/_sources/Documentation/Input/ecmwf_env.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..a3232e2c5b7ac760975aba87152fede088e921c5 --- /dev/null +++ b/Documentation/html/_sources/Documentation/Input/ecmwf_env.rst.txt @@ -0,0 +1,31 @@ +**************************************** +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 is based on the template ``ECMWF_ENV.template`` which is located in the ``templates`` directory. + +.. note:: + + In the **local** mode it is not present. + + + +Content of ``ECMWF_ENV`` +------------------------ + +The following shows an example of the content of an ``ECMWF_ENV`` file: + +.. code-block:: bash + + ECUID user_name + ECGID user_group + GATEWAY gateway_name + DESTINATION destination_name + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Documentation/Input/examples.rst.txt b/Documentation/html/_sources/Documentation/Input/examples.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..839b648c1abb72d8f4cea83291faeba1c05a30da --- /dev/null +++ b/Documentation/html/_sources/Documentation/Input/examples.rst.txt @@ -0,0 +1,39 @@ +********************** +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``. + +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 + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Documentation/Input/fortran_makefile.rst.txt b/Documentation/html/_sources/Documentation/Input/fortran_makefile.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..894655341eca5b4430f6d3f6ac267a060aae95bc --- /dev/null +++ b/Documentation/html/_sources/Documentation/Input/fortran_makefile.rst.txt @@ -0,0 +1,41 @@ +*********************************** +The Fortran Makefile - ``CONVERT2`` +*********************************** + +.. _ref-convert: + +``Flex_extract``'s Fortran program will be compiled during +the installation process to get the executable named ``CONVERT2``. + +``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** + | For the use on ECMWF's server **ecgate**. + + | **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.local.ifort** + | For the use with ifort compiler. + + +For instructions on how to adapt the ``Makefiles`` for the local application mode +please see :ref:`ref-install-local`. + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Documentation/Input/jobscript.rst.txt b/Documentation/html/_sources/Documentation/Input/jobscript.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..275295f59ce8bce13f60b41f36dbf17b2f128746 --- /dev/null +++ b/Documentation/html/_sources/Documentation/Input/jobscript.rst.txt @@ -0,0 +1,194 @@ +************************* +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. + +``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. +These individual parameters are marked by a doubled ``$`` sign in ``job.temp``. + +The jobscript has a number of settings for the batch system which are fixed and differentiates between the *ecgate* and the *cca/ccb* +server system to load the necessary modules for the environment when submitted to the batch queue. + +The submission is done by the ``ECaccess`` tool from within ``flex_extract`` with the command ``ecaccess-job-submit``. + + + +What does the jobscript do? +--------------------------- + + #. It sets necessary batch system parameters + #. It prepares the job environment at the ECMWF servers by loading the necessary library modules + #. It sets some environment variabels for the single session + #. It creates the directory structure in the users ``$SCRATCH`` file system + #. It creates a CONTROL file on the ECMWF servers whith the parameters set before creating the ``jobscript.ksh``. ``Flex_extract`` has a set of parameters which are given to the jobscript with its default or the user defined values. It also sets the ``CONTROL`` as an environment variable. + #. ``Flex_extract`` is started from within the ``work`` directory of the new directory structure by calling the ``submit.py`` script. It sets new pathes for input and output directory and the recently generated ``CONTROL`` file. + #. At the end it checks if the script returned an error or not and send the log file via email to the user. + + + + +Example ``jobscript.ksh`` +------------------------- + +.. code-block:: bash + + #!/bin/ksh + + # ON ECGB: + # start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server + # start with sbatch NAME_OF_THIS_FILE directly on machine + + #SBATCH --workdir=/scratch/ms/at/km4a + #SBATCH --qos=normal + #SBATCH --job-name=flex_ecmwf + #SBATCH --output=flex_ecmwf.%j.out + #SBATCH --error=flex_ecmwf.%j.out + #SBATCH --mail-type=FAIL + #SBATCH --time=12:00:00 + + ## CRAY specific batch requests + ##PBS -N flex_ecmwf + ##PBS -q np + ##PBS -S /usr/bin/ksh + ## -o /scratch/ms/at/km4a/flex_ecmwf.${PBS_JOBID}.out + ## job output is in .ecaccess_DO_NOT_REMOVE + ##PBS -j oe + ##PBS -V + ##PBS -l EC_threads_per_task=24 + ##PBS -l EC_memory_per_task=32000MB + + set -x + export VERSION=7.1 + case ${HOST} in + *ecg*) + module unload grib_api + module unload eccodes + module unload python + module unload emos + module load python3 + module load eccodes/2.12.0 + module load emos/455-r64 + export PATH=${PATH}:${HOME}/flex_extract_v7.1/source/python + ;; + *cca*) + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + module load eccodes/2.12.0 + module load emos + export SCRATCH=${TMPDIR} + export PATH=${PATH}:${HOME}/flex_extract_v7.1/source/python + ;; + esac + + cd ${SCRATCH} + mkdir -p python$$ + cd python$$ + + export CONTROL=CONTROL + + cat >${CONTROL}<<EOF + accmaxstep 24 + acctime 18 + acctype FC + accuracy 24 + addpar None + area 74.0/-24.0/10.0/60.0 + basetime None + cds_api None + controlfile CONTROL_CERA + cwc 1 + dataset None + date_chunk 3 + debug 1 + destination annep@genericSftp + doubleelda 0 + dpdeta 1 + dtime 3 + ec_api None + ecfsdir ectmp:/${USER}/econdemand/ + ecgid at + ecstorage 0 + ectrans 1 + ecuid km4a + end_date 20000809 + eta 1 + etadiff 0 + etapar 77 + expver 1 + format GRIB1 + gateway srvx8.img.univie.ac.at + gauss 0 + gaussian + grib2flexpart 0 + grid 1.0/1.0 + inputdir /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/run/workspace + install_target None + job_chunk 1 + job_template job.temp + left -24. + level 91 + levelist 1/to/91 + logicals gauss omega omegadiff eta etadiff dpdeta cwc wrf grib2flexpart ecstorage ectrans debug oper request public purefc rrint doubleelda + lower 10. + mailfail ${USER} + mailops ${USER} + makefile Makefile.gfortran + marsclass EP + maxstep 0 + number 000 + omega 0 + omegadiff 0 + oper 0 + outputdir /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/run/workspace + prefix CE + public 0 + purefc 0 + queue ecgate + request 2 + resol 159 + right 60. + rrint 0 + smooth 0 + start_date 20000809 + step 00 00 00 00 00 00 00 00 + stream ENDA + time 00 03 06 09 12 15 18 21 + type AN AN AN AN AN AN AN AN + upper 74. + wrf 0 + + EOF + + + submit.py --controlfile=${CONTROL} --inputdir=./work --outputdir=./work 1> prot 2>&1 + + if [ $? -eq 0 ] ; then + l=0 + for muser in `grep -i MAILOPS ${CONTROL}`; do + if [ ${l} -gt 0 ] ; then + mail -s flex.${HOST}.$$ ${muser} <prot + fi + l=$((${l}+1)) + done + else + l=0 + for muser in `grep -i MAILFAIL ${CONTROL}`; do + if [ ${l} -gt 0 ] ; then + mail -s "ERROR! flex.${HOST}.$$" ${muser} <prot + fi + l=$((${l}+1)) + done + fi + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Documentation/Input/run.rst.txt b/Documentation/html/_sources/Documentation/Input/run.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..41d766d0a0f658ef68ae6e468d31e1939012ac4f --- /dev/null +++ b/Documentation/html/_sources/Documentation/Input/run.rst.txt @@ -0,0 +1,117 @@ +********************************** +The executable Script - ``run.sh`` +********************************** + +The execution of ``flex_extract`` is done by the ``run.sh`` Shell script, which is a wrapping script for the top-level Python script ``submit.py``. +The Python script constitutes the entry point to ECMWF data retrievals with ``flex_extract`` and controls the program flow. + +``submit.py`` has two (three) sources for input parameters with information about program flow and ECMWF data selection, the so-called ``CONTROL`` file, +the command line parameters and the so-called ``ECMWF_ENV`` file. Whereby, the command line parameters will override the ``CONTROL`` file parameters. + +Based on these input information ``flex_extract`` 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. + + + +PUT IN HERE A BLOCKDIAGRAM OF RAW PROGRAM FLOW + + + +Submission Parameter +-------------------- + + +.. exceltable:: Parameter for Submission + :file: ../../_files/SubmitParameters.xls + :header: 1 + :sheet: 0 + + + + +Content of ``run.sh`` +--------------------- + +.. literalinclude:: ../../../../../Run/run.sh + :language: bash + :caption: run.sh + + +.. _ref-install-script: + +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 +command line parameter. + +.. code-block:: bash + + submit.py --help + + usage: submit.py [-h] [--start_date START_DATE] [--end_date END_DATE] + [--date_chunk DATE_CHUNK] [--job_chunk JOB_CHUNK] + [--controlfile CONTROLFILE] [--basetime BASETIME] + [--step STEP] [--levelist LEVELIST] [--area AREA] + [--debug DEBUG] [--oper OPER] [--request REQUEST] + [--public PUBLIC] [--rrint RRINT] [--inputdir INPUTDIR] + [--outputdir OUTPUTDIR] [--ppid PPID] + [--job_template JOB_TEMPLATE] [--queue QUEUE] + + Retrieve FLEXPART input from ECMWF MARS archive + + optional arguments: + -h, --help show this help message and exit + --start_date START_DATE + start date YYYYMMDD (default: None) + --end_date END_DATE end_date YYYYMMDD (default: None) + --date_chunk DATE_CHUNK + # of days to be retrieved at once (default: None) + --job_chunk JOB_CHUNK + # of days to be retrieved within a single job + (default: None) + --controlfile CONTROLFILE + The file with all CONTROL parameters. (default: + CONTROL_EA5) + --basetime BASETIME base such as 0 or 12 (for half day retrievals) + (default: None) + --step STEP Forecast steps such as 00/to/48 (default: None) + --levelist LEVELIST Vertical levels to be retrieved, e.g. 30/to/60 + (default: None) + --area AREA area defined as north/west/south/east (default: None) + --debug DEBUG debug mode - leave temporary files intact (default: + None) + --oper OPER operational mode - prepares dates with environment + variables (default: None) + --request REQUEST list all mars requests in file mars_requests.dat + (default: None) + --public PUBLIC public mode - retrieves the public datasets (default: + None) + --rrint RRINT Selection of old or new precipitation interpolation: 0 + - old method 1 - new method (additional subgrid + points) (default: None) + --inputdir INPUTDIR Path to the temporary directory for the retrieval grib + files and other processing files. (default: None) + --outputdir OUTPUTDIR + Path to the final directory where the final FLEXPART + ready input files are stored. (default: None) + --ppid PPID 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. (default: None) + --job_template JOB_TEMPLATE + The job template file which are adapted to be + submitted to the batch system on ECMWF server. + (default: job.temp) + --queue QUEUE The ECMWF server name for submission of the job script + to the batch system (e.g. ecgate | cca | ccb) + (default: None) + + + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Documentation/Input/setup.rst.txt b/Documentation/html/_sources/Documentation/Input/setup.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..7999511d03817b2fb0b05cf4e98b7b86d8f2b84a --- /dev/null +++ b/Documentation/html/_sources/Documentation/Input/setup.rst.txt @@ -0,0 +1,202 @@ +************************************** +The Installation Script - ``setup.sh`` +************************************** + + +The installation of ``flex_extract`` is done by the Shell script ``setup.sh`` which is located in the root directory of ``flex_extract``. +It calls the top-level Python script ``install.py`` which does all necessary operations to prepare the selected application environment. This includes: + +- preparing the file ``ECMWF_ENV`` with the user credentials for member state access to ECMWF servers (in **remote** and **gateway** mode) +- preparation of a compilation Korn-shell script (in **remote** and **gateway** mode) +- preparation of a job template with user credentials (in **remote** and **gateway** mode) +- 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`` + + +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. + +After the installation process, some tests can be conducted. They are described in section :ref:`ref-testinstallfe`. + +The following diagram sketches the involved files and scripts in the installation process: + +.. _ref-install-blockdiag: + +.. blockdiag:: + + blockdiag { + + default_fontsize = 24; + + // Set node metrix + node_width = 300; // default is 128 + + // Set span metrix + span_width = 80; // default value is 64 + + ECMWF_ENV.template [shape = flowchart.input]; + compilejob.template [shape = flowchart.input]; + job.template [shape = flowchart.input]; + + compilejob.ksh [shape = roundedbox]; + // tarball + // ECMWF_ENV + // job.temp + + "CONTROL file" [shape = flowchart.input]; + + setup.sh [shape = roundedbox]; + install.py [shape = roundedbox]; + + "ECMWF server" [shape = flowchart.terminator]; + + //beginpoint [shape = beginpoint]; + + orientation = landscape; + + //beginpoint -> setup.sh; + setup.sh -> install.py; + + install.py <- "CONTROL file"; + + install.py -> ECMWF_ENV, job.temp, compilejob.ksh, tarball; + + ECMWF_ENV.template, job.template, compilejob.template -> install.py; + + tarball, compilejob.ksh -> "ECMWF server"; + + + group exec { + // set backgound color + color = "#FF6633"; + + orientation = portrait; + setup.sh; + install.py; + } + + group out { + color = "#FFFFFF"; + group output { + color = "#99FF99"; + ECMWF_ENV; + job.temp; + compilejob.ksh; + } + + group ECMWF { + color = "#006600"; + tarball; + + } + } + + group input { + + color = "#FFFFFF"; + + group temps { + color = "#66CCFF"; + + ECMWF_ENV.template; + job.template; + compilejob.template; + } + + group in { + color = "#3366FF"; + "CONTROL file"; + } + } + + } + + +.. blockdiag:: + :caption: 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. + + blockdiag { + + group{ + orientation = portrait; + label = "Legend"; + fontsize = 28; + color = "#FFFFFF"; + 'executable scripts' [shape = roundedbox]; + 'input files' [shape = flowchart.input]; + 'output files'; + server [shape = flowchart.terminator]; + } + } + +.. _ref-instparams: + +Installation Parameter +---------------------- + +.. exceltable:: Parameter for Installation + :file: ../../_files/InstallationParameter.xls + :header: 1 + + + +Content of ``setup.sh`` +----------------------- + +.. literalinclude:: ../../../../../setup.sh + :language: bash + :caption: setup.sh + + +.. _ref-install-script: + +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 +command line parameter. + +.. code-block:: bash + + install.py --help + + usage: install.py [-h] [--target INSTALL_TARGET] [--makefile MAKEFILE] + [--ecuid ECUID] [--ecgid ECGID] [--gateway GATEWAY] + [--destination DESTINATION] [--installdir INSTALLDIR] + [--job_template JOB_TEMPLATE] [--controlfile CONTROLFILE] + + Install flex_extract software locally or on ECMWF machines + + optional arguments: + -h, --help show this help message and exit + --target INSTALL_TARGET + Valid targets: local | ecgate | cca , the latter two + are at ECMWF (default: None) + --makefile MAKEFILE Name of Makefile to use for compiling the Fortran + program (default: None) + --ecuid ECUID The user id at ECMWF. (default: None) + --ecgid ECGID The group id at ECMWF. (default: None) + --gateway GATEWAY The name of the local gateway server. (default: None) + --destination DESTINATION + The ecaccess association, e.g. myUser@genericSftp + (default: None) + --installdir INSTALLDIR + Root directory where flex_extract will be installed + to. (default: None) + --job_template JOB_TEMPLATE + The rudimentary template file to create a batch job + template for submission to ECMWF servers. (default: + job.template) + --controlfile CONTROLFILE + The file with all CONTROL parameters. (default: + CONTROL_EA5) + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Documentation/Input/templates.rst.txt b/Documentation/html/_sources/Documentation/Input/templates.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..137b36ca9696fc2d0ffdabc029c194c650168cb2 --- /dev/null +++ b/Documentation/html/_sources/Documentation/Input/templates.rst.txt @@ -0,0 +1,346 @@ +********* +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. + +.. note:: + Usually it is not recommended to change anything in these files without being able to understand the effects. + +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 ``$`` sign. In case of the Kornshell job scripts, where (environment) variables are used the ``$`` sign needs to be doubled to `escape` and keep a single ``$`` sign as it is. + +The following templates are used and can be found in directory ``flex_extract_vX.X/Templates``: + +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. + + .. code-block:: fortran + + &NAMGEN + maxl = $maxl, + maxb = $maxb, + mlevel = $mlevel, + mlevelist = "$mlevelist", + mnauf = $mnauf, + metapar = $metapar, + rlo0 = $rlo0, + rlo1 = $rlo1, + rla0 = $rla0, + rla1 = $rla1, + momega = $momega, + momegadiff = $momegadiff, + mgauss = $mgauss, + msmooth = $msmooth, + meta = $meta, + metadiff = $metadiff, + mdpdeta = $mdpdeta + / + +ecmwf_env.template +------------------ + + This template is used to create the ``ECMWF_ENV`` file in the application modes **gateway** and **remote**. It contains the user credentials and gateway server settings for the file transfers. + + .. code-block:: bash + + ECUID $user_name + ECGID $user_group + GATEWAY $gateway_name + DESTINATION $destination_name + +compilejob.template +------------------- + + This template is used to create the job script file called ``compilejob.ksh`` during the installation process for the application modes **remote** and **gateway**. + + At the beginning some directives for the batch system are set. + On the **ecgate** server the ``SBATCH`` comments are the directives for the SLURM workload manager. A description of the single lines can be found at `SLURM directives <https://confluence.ecmwf.int/display/UDOC/Writing+SLURM+jobs>`_. + For the high performance computers **cca** and **ccb** the ``PBS`` comments are necessary and can be view at `PBS directives <https://confluence.ecmwf.int/display/UDOC/Batch+environment%3A++PBS>`_. + + The software environment requirements mentioned in :ref:`ref-requirements` are prepared by loading the corresponding modules depending in the ``HOST``. It should not be changed without testing. + + Afterwards the installation steps as such are done. Including the generation of the root directory, putting files in place, compiling the Fortran program and sending a log file via email. + + .. code-block:: ksh + + #!/bin/ksh + + # ON ECGB: + # start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server + # start with sbatch NAME_OF_THIS_FILE directly on machine + + #SBATCH --workdir=/scratch/ms/$usergroup/$username + #SBATCH --qos=normal + #SBATCH --job-name=flex_ecmwf + #SBATCH --output=flex_ecmwf.%j.out + #SBATCH --error=flex_ecmwf.%j.out + #SBATCH --mail-type=FAIL + #SBATCH --time=12:00:00 + + ## CRAY specific batch requests + ##PBS -N flex_ecmwf + ##PBS -q ns + ##PBS -S /usr/bin/ksh + ##PBS -o /scratch/ms/$usergroup/$username/flex_ecmwf.$${Jobname}.$${Job_ID}.out + # job output is in .ecaccess_DO_NOT_REMOVE + ##PBS -j oe + ##PBS -V + ##PBS -l EC_threads_per_task=1 + ##PBS -l EC_memory_per_task=3200MB + + set -x + export VERSION=$version_number + case $${HOST} in + *ecg*) + module unload grib_api + module unload eccodes + module unload python + module unload emos + module load python3 + module load eccodes/2.12.0 + module load emos/455-r64 + export FLEXPART_ROOT_SCRIPTS=$fp_root_scripts + export MAKEFILE=$makefile + ;; + *cca*) + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + module load eccodes/2.12.0 + module load emos + echo $${GROUP} + echo $${HOME} + echo $${HOME} | awk -F / '{print $1, $2, $3, $4}' + export GROUP=`echo $${HOME} | awk -F / '{print $4}'` + export SCRATCH=/scratch/ms/$${GROUP}/$${USER} + export FLEXPART_ROOT_SCRIPTS=$fp_root_scripts + export MAKEFILE=$makefile + ;; + 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 $fortran_program + make -f $${MAKEFILE} >flexcompile 2>flexcompile + + ls -l $fortran_program >>flexcompile + if [ $$? -eq 0 ]; then + echo 'SUCCESS!' >>flexcompile + mail -s flexcompile.$${HOST}.$$$$ $${USER} <flexcompile + else + echo Environment: >>flexcompile + env >> flexcompile + mail -s "ERROR! flexcompile.$${HOST}.$$$$" $${USER} <flexcompile + fi + + +job.temp +-------- + + This template is used to create the actual job script file called ``job.ksh`` for the execution of ``flex_extract`` in the application modes **remote** and **gateway**. + + At the beginning some directives for the batch system are set. + On the **ecgate** server the ``SBATCH`` comments are the directives for the SLURM workload manager. A description of the single lines can be found at `SLURM directives <https://confluence.ecmwf.int/display/UDOC/Writing+SLURM+jobs>`_. + For the high performance computers **cca** and **ccb** the ``PBS`` comments are necessary and can be view at `PBS directives <https://confluence.ecmwf.int/display/UDOC/Batch+environment%3A++PBS>`_. + + The software environment requirements mentioned in :ref:`ref-requirements` are prepared by loading the corresponding modules depending in the ``HOST``. It should not be changed without testing. + + Afterwards the run directory and the ``CONTROL`` file are created and ``flex_extract`` is executed. In the end a log file is send via email. + + .. code-block:: ksh + + #!/bin/ksh + + # ON ECGB: + # start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server + # start with sbatch NAME_OF_THIS_FILE directly on machine + + #SBATCH --workdir=/scratch/ms/at/km4a + #SBATCH --qos=normal + #SBATCH --job-name=flex_ecmwf + #SBATCH --output=flex_ecmwf.%j.out + #SBATCH --error=flex_ecmwf.%j.out + #SBATCH --mail-type=FAIL + #SBATCH --time=12:00:00 + + ## CRAY specific batch requests + ##PBS -N flex_ecmwf + ##PBS -q np + ##PBS -S /usr/bin/ksh + ## -o /scratch/ms/at/km4a/flex_ecmwf.$${PBS_JOBID}.out + ## job output is in .ecaccess_DO_NOT_REMOVE + ##PBS -j oe + ##PBS -V + ##PBS -l EC_threads_per_task=24 + ##PBS -l EC_memory_per_task=32000MB + + set -x + export VERSION=7.1 + case $${HOST} in + *ecg*) + module unload grib_api + module unload eccodes + module unload python + module unload emos + module load python3 + module load eccodes/2.12.0 + module load emos/455-r64 + export PATH=$${PATH}:$${HOME}/flex_extract_v7.1/source/python + ;; + *cca*) + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + module load eccodes/2.12.0 + module load emos + export SCRATCH=$${TMPDIR} + export PATH=$${PATH}:$${HOME}/flex_extract_v7.1/source/python + ;; + esac + + cd $${SCRATCH} + mkdir -p python$$$$ + cd python$$$$ + + export CONTROL=CONTROL + + cat >$${CONTROL}<<EOF + $control_content + EOF + + + submit.py --controlfile=$${CONTROL} --inputdir=./work --outputdir=./work 1> prot 2>&1 + + if [ $? -eq 0 ] ; then + l=0 + for muser in `grep -i MAILOPS $${CONTROL}`; do + if [ $${l} -gt 0 ] ; then + mail -s flex.$${HOST}.$$$$ $${muser} <prot + fi + l=$(($${l}+1)) + done + else + l=0 + for muser in `grep -i MAILFAIL $${CONTROL}`; do + if [ $${l} -gt 0 ] ; then + mail -s "ERROR! flex.$${HOST}.$$$$" $${muser} <prot + fi + l=$(($${l}+1)) + done + fi + + +job.template +------------ + + This template is used to create the template for the execution job script ``job.temp`` for ``flex_extract`` in the installation process. A description of the file can be found under ``job.temp``. A couple of parameters are set in this process, such as the user credentials and the ``flex_extract`` version number. + + .. code-block:: ksh + + #!/bin/ksh + + # ON ECGB: + # start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server + # start with sbatch NAME_OF_THIS_FILE directly on machine + + #SBATCH --workdir=/scratch/ms/$usergroup/$username + #SBATCH --qos=normal + #SBATCH --job-name=flex_ecmwf + #SBATCH --output=flex_ecmwf.%j.out + #SBATCH --error=flex_ecmwf.%j.out + #SBATCH --mail-type=FAIL + #SBATCH --time=12:00:00 + + ## CRAY specific batch requests + ##PBS -N flex_ecmwf + ##PBS -q np + ##PBS -S /usr/bin/ksh + ## -o /scratch/ms/$usergroup/$username/flex_ecmwf.$$$${PBS_JOBID}.out + ## job output is in .ecaccess_DO_NOT_REMOVE + ##PBS -j oe + ##PBS -V + ##PBS -l EC_threads_per_task=24 + ##PBS -l EC_memory_per_task=32000MB + + set -x + export VERSION=$version_number + case $$$${HOST} in + *ecg*) + module unload grib_api + module unload eccodes + module unload python + module unload emos + module load python3 + module load eccodes/2.12.0 + module load emos/455-r64 + export PATH=$$$${PATH}:$fp_root_path + ;; + *cca*) + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + module load eccodes/2.12.0 + module load emos + export SCRATCH=$$$${TMPDIR} + export PATH=$$$${PATH}:$fp_root_path + ;; + esac + + cd $$$${SCRATCH} + mkdir -p python$$$$$$$$ + cd python$$$$$$$$ + + export CONTROL=CONTROL + + cat >$$$${CONTROL}<<EOF + $$control_content + EOF + + + submit.py --controlfile=$$$${CONTROL} --inputdir=./work --outputdir=./work 1> prot 2>&1 + + if [ $? -eq 0 ] ; then + l=0 + for muser in `grep -i MAILOPS $$$${CONTROL}`; do + if [ $$$${l} -gt 0 ] ; then + mail -s flex.$$$${HOST}.$$$$$$$$ $$$${muser} <prot + fi + l=$(($$$${l}+1)) + done + else + l=0 + for muser in `grep -i MAILFAIL $$$${CONTROL}`; do + if [ $$$${l} -gt 0 ] ; then + mail -s "ERROR! flex.$$$${HOST}.$$$$$$$$" $$$${muser} <prot + fi + l=$(($$$${l}+1)) + done + fi + + + + + + + + + + + + + + + + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Documentation/Overview/app_modes.rst.txt b/Documentation/html/_sources/Documentation/Overview/app_modes.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..909cb94456e5251e6e1585831b830943926f6a22 --- /dev/null +++ b/Documentation/html/_sources/Documentation/Overview/app_modes.rst.txt @@ -0,0 +1,47 @@ +***************** +Application Modes +***************** + +.. role:: underline + :class: underline + +.. _member state: https://www.ecmwf.int/en/about/who-we-are/member-states +.. _instructions: https://apps.ecmwf.int/registration/ + + +.. _ref-app-modes: + +Arising from the two user groups described in :doc:`../../Ecmwf/access`, ``flex_extract`` has 4 different :underline:`user application modes`: + +.. _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``. + +.. _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`. + +.. _ref-local-desc: + + 3. Local member + Scripts are installed and executed on a local machine, either in the current ``flex_extract`` 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 :ref:`ref-local-mode`. + + 4. Local public + Scripts are installed and executed on a local machine, either in the current ``flex_extract`` 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 :ref:`ref-local-mode`. 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. + + +An overview is sketched in figure :ref:`ref-fig-marsaccess`. + +.. _ref-fig-marsaccess: + +.. figure:: ../../_static/Diagramm_MarsAccess2.png + + Application modes + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Documentation/Overview/convert.rst.txt b/Documentation/html/_sources/Documentation/Overview/convert.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..c983af538a7b70b2e925c04f5212a0dad239d663 --- /dev/null +++ b/Documentation/html/_sources/Documentation/Overview/convert.rst.txt @@ -0,0 +1,7 @@ +======= +CONVERT +======= + + + UNDER CONSTRUCTION + diff --git a/Documentation/html/_sources/Documentation/Overview/prog_flow.rst.txt b/Documentation/html/_sources/Documentation/Overview/prog_flow.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..21d0bdceae9bb78b9e5585845c25190ed1726d87 --- /dev/null +++ b/Documentation/html/_sources/Documentation/Overview/prog_flow.rst.txt @@ -0,0 +1,56 @@ +************ +Program Flow +************ + + + + +General program flow +==================== + + +The following flow diagram shows the general steps performed by ``flex_extract``. + +.. _ref-fig-submit: + +.. figure:: ../../_files/submit.png + + Overview of the call of python's ``submit.py`` script and raw sequence of working steps done in ``flex_extract``. + + +The ``submit.py`` Python program is called by the Shell script ``run.sh`` or ``run_local.sh`` and accomplish the following steps: + + 1. Setup the control data: + It gets all command-line and ``CONTROL`` file parameters as well as optionally the ECMWF user credentials. Depending the :doc:`app_modes`, it might also prepare a job script which is then send to the ECMWF queue. + 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. + + + +Workflows of different application modes +======================================== + +More details on how different the program flow is for the different :doc:`app_modes` is sketched in the following diagrams: + ++-------------------------------------------------+------------------------------------------------+ +| .. figure:: ../../_files/mode_remote.png | .. figure:: ../../_files/mode_gateway.png | ++-------------------------------------------------+------------------------------------------------+ + ++-------------------------------------------------+------------------------------------------------+ +| .. figure:: ../../_files/mode_local_member.png | .. figure:: ../../_files/mode_local_public.png | ++-------------------------------------------------+------------------------------------------------+ + + +Example application setting for a local member user +=================================================== + +.. figure:: ../../_files/ex_runlocal_en.png + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Documentation/api.rst.txt b/Documentation/html/_sources/Documentation/api.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..5c0bff7d88c9354d70df4de575aa4fb853191c2c --- /dev/null +++ b/Documentation/html/_sources/Documentation/api.rst.txt @@ -0,0 +1,17 @@ +**************************** +Auto Generated Documentation +**************************** + + +:doc:`Api/api_python` + +:doc:`Api/api_fortran` + + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Api/api_python + Api/api_fortran diff --git a/Documentation/html/_sources/Documentation/disagg.rst.txt b/Documentation/html/_sources/Documentation/disagg.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..deb420864c82f618b2142df0a954e4816214136c --- /dev/null +++ b/Documentation/html/_sources/Documentation/disagg.rst.txt @@ -0,0 +1,187 @@ +*************************** +Disaggregation of Flux Data +*************************** + +``FLEXPART`` 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 :ref:`ref-table-fluxpar`) 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 ``FLEXPART``'s linear interpolation a pre-processing scheme has to be applied. + +.. _ref-table-fluxpar: + +.. csv-table:: flux fields + :header: "Short Name", "Name", "Units", "Interpolation Type" + :align: center + :widths: 5,15,5,10 + + LSP, "large-scale precipitation", ":math:`m`", "modified linear interpolation" + CP, "convective precipitation", ":math:`m`", "modified linear interpolation" + SSHF, "surface sensible heat flux", ":math:`J m^{-2}`", "bicubic interpolation" + EWSS, "eastward turbulent surface stress", ":math:`N m^{-2} s`", "bicubic interpolation" + NSSS, "northward turbulent surface stress", ":math:`N m^{-2} s`", "bicubic interpolation" + SSR, "surface net solar radiation", ":math:`J m^{-2}`", "bicubic interpolation" + + +The first step is to *de-accumulate* the fields in time so that each value represents an integral in x, y, t space. +Afterwards, a *disaggregation* scheme is applied which means to break down the integral value into point values. +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 ``flex_extract`` and are not communicated to the final ``FLEXPART`` input files. + +The flux disaggregation produces files named ``fluxYYYYMMDDHH``, where ``YYYYMMDDHH`` is the date format. Note, that the first two and last two flux files do not contain any data. + +.. note:: + + Note also that for operational retrievals (``BASETIME`` set to 00 or 12) forecast fluxes are only available until ``BASETIME``, so that no polynomial interpolation is possible in the last two time intervals. This is the reason why setting ``BASETIME`` is not recommended for on demand scripts. + + +Disaggregation for precipitation in older versions +-------------------------------------------------- + +In ``flex_extract`` up to version 5 the disaggregation was done with a Fortran program (FLXACC2). In version 6 this part was converted to Python. + + +In the old versions (below 7.1) a relatively simple method processes the precipitation fields in a way that is consistent with the scheme applied in ``FLEXPART`` for all variables: linear interpolation between times where input fields are available. +At first the accumulated values are divided by the number of hours (i.e., 3 or 6). +The best option for disaggregation, which was realised, is conservation within the interval under consideration plus the two adjacent ones. +Unfortunately, this leads to undesired temporal smoothing of the precipitation time series – maxima are damped and minima are raised. +It is even possible to produce non-zero precipitation in dry intervals bordering a precipitation period as shown in Fig. 1. +This is obviously undesirable as it will affect wet scavenging, a very efficient removal process for many atmospheric trace species. +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 ``FLEXPART`` 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. + + +.. _ref-fig-olddisagg: + +.. figure:: ../_files/old_disagg.png + :figclass: align-center + + 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). + + + +Disaggregation is done for 4 adjacent timespans (:math:`a_0, a_1, a_2, a_3`) which generates a new, disaggregated value which is output at the central point of the 4 adjacent timespans. + +.. math:: + + p_{ac} &= 0.5 * a_1\\ + m &= a_0 + a_2 > 0.\\ + p_{ac}(m) &= a_1(m) * a_2(m) / (a_0(m) + a_2(m))\\ + p_{bd} &= 0.5 * a_2\\ + m &= a_1 + a_3 > 0.\\ + p_{bd}(m) &= a_1(m) * a_2(m) / (a_1(m) + a_3(m))\\ + + +This new point :math:`p` is used for linear interpolation of the complete timeseries afterwards. If one of the 4 original timespans has a value below 0 it is set to 0 prior to the calculation. + +.. math:: + + p = p_{ac} + p_{bd} + + + + + + +Disaggregation for precipitation in version 7.1 +----------------------------------------------- + +Due to the problems with generating precipitation in originally dry (or lower) intervals and the temporal smoothing a new algorithm was developed. The approach is based on a one dimensional piecewise linear function with two additional supporting grid points within each grid cell, dividing the interval into three pieces. It fulfils the desired requirements by preserving the integral precipitation in each time interval, guaranteeing continuity at interval boundaries, and maintaining non-negativity. An additional monotonicity filter helps to gain monotonicity. +The more natural requirements of symmetry, reality, computational efficiency and easy implementation motivates the linear formulation. +These requirements on the reconstruction algorithm imply that time intervals with no precipitation remain unchanged, i.e. the reconstructed values vanish throughout this whole time interval, too. +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. + + +.. _ref-fig-newdisagg: + +.. figure:: ../_files/new_disagg.png + :figclass: align-center + + Fig. 2: Precipitation rate linearly interpolated using a sub-grid with two additional points. Colours as in Fig. 1 (Hittmeir et al. 2018). + + +Figure 3 shows an overview of the new algorithm and its components. + +.. _ref-fig-IA3: + +.. figure:: ../_files/IA3.png + :figclass: align-center + + 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 :math:`f` (dark blue) as the piecewise linear function. The original time interval with fixed grid length :math:`\delta t` is split equidistantly in three subintervals denoted by :math:`I_i^{1,2,3}`, with the slopes in the subintervals as denoted by :math:`k_i^{1,2,3}` . The sub-grid function values :math:`f_i, f_i^{1,2}, f_{i+1}` are marked by red diamonds (Hittmeir et al. 2018). + + +The following lists the equations of the new algorithm. + +.. math:: + + f_i^{(1)}=&\frac32 g_i -\frac{1}{12}f_{i}-\frac{5}{12}f_{i+1} + + f_i^{(2)}=&\frac32 g_i -\frac{5}{12}f_{i}-\frac{1}{12}f_{i+1} + + f_{i+1}=&\min\{3 g_i,3 g_{i+1},\sqrt{g_ig_{i+1}}\} + +.. math:: + + \textbf{if} \quad + \mathrm{sgn}(k_{i}^{(2)})\cdot \mathrm{sgn}(k_{i }^{(3)})&=-1 \quad \wedge \\ + \mathrm{sgn}(k_{i }^{(3)})\cdot \mathrm{sgn}(k_{i+1}^{(1)})&=-1 \quad \wedge \\ + \mathrm{sgn}(k_{i+1}^{(1)})\cdot \mathrm{sgn}(k_{i+1}^{(2)})&=-1 \quad + \textbf{then} + +.. math:: + + 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} + + +In the case of the new disaggregation method for precipitation, the two new sub grid points are added in the ``flux`` output files. They are identified by the forecast step parameter ``step`` 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. + + +.. note:: + + The new method for disaggregation was published in the Geoscientific Model Development Journal in 2018: + + 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, https://doi.org/10.5194/gmd-11-2503-2018, 2018. + + + + + + + +Disaggregation for the rest of the flux fields +---------------------------------------------- + +The accumulated values for the other variables are first divided by the number of hours and +then interpolated to the exact times X using a bicubic interpolation which conserves the integrals of the fluxes within each timespan. +Disaggregation is done for 4 adjacent timespans (:math:`p_a, p_b, p_c, p_d`) which generates a new, disaggregated value which is output at the central point of the 4 adjacent timespans. + +.. math:: + + p_a &= (a_3 - a_0 + 3. * (a_1 - a_2)) / 6. \\ + p_b &= (a_2 + a_0) / 2. - a_1 - 9. * p_a / 2. \\ + p_c &= a_1 - a_0 - 7. * p_a / 2. - 2. * p_b \\ + p_d &= a_0 - p_a / 4. - p_b / 3. - p_c / 2. + +This new point :math:`p` is used for linear interpolation of the complete timeseries afterwards. + +.. math:: + + p = 8. * p_a + 4. * p_b + 2. * p_c + p_d + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 + + diff --git a/Documentation/html/_sources/Documentation/input.rst.txt b/Documentation/html/_sources/Documentation/input.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..8506d53d1d5da9a7ac9e2f3a9c04fb53cc7c64f8 --- /dev/null +++ b/Documentation/html/_sources/Documentation/input.rst.txt @@ -0,0 +1,82 @@ +******************** +Control & Input Data +******************** + +Input Data + - :doc:`Input/control` + ``Flex_extract`` needs a number of controlling parameters to decide on the behaviour and the actual dataset to be retrieved. They are initialized by ``flex_extract`` with their default values and can be overwritten with definitions set in the so called :doc:`Input/control`. + + 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 :doc:`Input/control_params` section. + + We also have some :doc:`Input/examples` and description of :doc:`Input/changes` changes to previous versions and downward compatibilities. + + - :doc:`Input/ecmwf_env` + For ``flex_extract`` it is necessary to be able to reach ECMWF servers in the **remote mode** and the **gateway mode**. Therefore a :doc:`Input/ecmwf_env` is created during the installation process. + + - :doc:`Input/templates` + A number of files which are created by ``flex_extract`` are taken from templates. This makes it easy to adapt for example the jobscripts regarding its settings for the batch jobs. + + + + + +.. _setup : Input/setup.html +.. _run : Input/run.html +.. _install : Input/setup.html#ref-install-script +.. _submit : Input/submit.html#ref-submit-script + +.. _ref-controlling: + +Controlling + The main tasks and behaviour of ``flex_extract`` are controlled by its Python scripts. There are two top-level scripts, one for installation called install_ and one for execution called submit_. + They can interpret a number of command line arguments which can be seen by typing ``--help`` after the script call. Go to the root directory of ``flex_extract`` to type: + + .. code-block:: bash + + cd flex_extract_vX.X + 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. + + It might be faster and easier for beginners. See :doc:`../quick_start` for information on how to use them. + + Additionally, ``flex_extract`` creates the Korn Shell scripts :doc:`Input/compilejob` and :doc:`Input/jobscript` which will be send to the ECMWF serves in the **remote mode** and the **gateway mode** for starting batch jobs. + + The Fortran program will be compiled during the installation process by the :doc:`Input/fortran_makefile`. + + To sum up, the following scripts controls ``flex_extract``: + + Installation + - :doc:`Input/setup` + - :doc:`Input/compilejob` + - :doc:`Input/fortran_makefile` + + Execution + - :doc:`Input/run` + - :doc:`Input/jobscript` + + + + + + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Input/setup + Input/compilejob + Input/fortran_makefile + Input/run + Input/jobscript + Input/control + Input/control_params + Input/examples + Input/changes + Input/ecmwf_env + Input/templates diff --git a/Documentation/html/_sources/Documentation/output.rst.txt b/Documentation/html/_sources/Documentation/output.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..76d9f2e8490bc088dcf404bf78f09c92b02d7e82 --- /dev/null +++ b/Documentation/html/_sources/Documentation/output.rst.txt @@ -0,0 +1,291 @@ +*********** +Output Data +*********** + +The output data of ``flex_extract`` are separated mainly into temporary files and the final ``FLEXPART`` input files: + ++-----------------------------------------------+----------------------------------------------+ +| ``FLEXPART`` input files | Temporary files (saved in debug mode) | ++-----------------------------------------------+----------------------------------------------+ +| - Standard output filenames | - MARS request file (opt) | +| - Output for pure forecast | - flux files | +| - Output for ensemble members | - VERTICAL.EC | +| - Output for new precip. disaggregation | - index file | +| | - fort files | +| | - MARS grib files | ++-----------------------------------------------+----------------------------------------------+ + + + +``FLEXPART`` input files +======================== + +The final output files of ``flex_extract`` are also the meteorological ``FLEXPART`` input files. +The naming of these files depend on the kind of data extracted by ``flex_extract``. + +Standard output files +--------------------- + +In general, there is a file for each time step with the filename format: + +.. code-block:: bash + + <prefix>YYMMDDHH + +The ``prefix`` is by default defined as ``EN`` and can be re-defined in the ``CONTROL`` file. +Each file contains all meteorological fields needed by ``FLEXPART`` for all selected model levels for a specific time step. + +Here is an example output which lists the meteorological fields in a single file called ``CE00010800`` where we extracted only the lowest model level for demonstration reasons: + +.. code-block:: bash + + $ grib_ls CE00010800 + + edition centre date dataType gridType stepRange typeOfLevel level shortName packingType + 2 ecmf 20000108 an regular_ll 0 hybrid 91 u grid_simple + 2 ecmf 20000108 an regular_ll 0 hybrid 91 v grid_simple + 2 ecmf 20000108 an regular_ll 0 hybrid 91 etadot grid_simple + 2 ecmf 20000108 an regular_ll 0 hybrid 91 t grid_simple + 2 ecmf 20000108 an regular_ll 0 surface 1 sp grid_simple + 2 ecmf 20000108 an regular_ll 0 hybrid 91 q grid_simple + 2 ecmf 20000108 an regular_ll 0 hybrid 91 qc grid_simple + 1 ecmf 20000108 fc regular_ll 0 surface 0 sshf grid_simple + 1 ecmf 20000108 fc regular_ll 0 surface 0 ewss grid_simple + 1 ecmf 20000108 fc regular_ll 0 surface 0 nsss grid_simple + 1 ecmf 20000108 fc regular_ll 0 surface 0 ssr grid_simple + 1 ecmf 20000108 fc regular_ll 0 surface 0 lsp grid_simple + 1 ecmf 20000108 fc regular_ll 0 surface 0 cp grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 sd grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 msl grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 tcc grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 10u grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 10v grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 2t grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 2d grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 z grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 lsm grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 cvl grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 cvh grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 lcc grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 mcc grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 hcc grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 skt grid_simple + 1 ecmf 20000108 an regular_ll 0 depthBelowLandLayer 0 stl1 grid_simple + 1 ecmf 20000108 an regular_ll 0 depthBelowLandLayer 0 swvl1 grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 sr grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 sdor grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 cvl grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 cvh grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 fsr grid_simple + 35 of 35 messages in CE00010800 + + +Output files for pure forecast +------------------------------ + +``Flex_extract`` can retrieve forecasts which can be longer than 23 hours. To avoid collisions of time steps for forecasts of more than one day a new scheme for filenames in pure forecast mode is introduced: + +.. code-block:: bash + + <prefix>YYMMDD.HH.<FORECAST_STEP> + +The ``<prefix>`` is, as in the standard output, by default ``EN`` and can be re-defined in the ``CONTROL`` file. ``YYMMDD`` is the date format and ``HH`` the forecast time which is the starting time for the forecasts. The ``FORECAST_STEP`` is a 3 digit number which represents the forecast step in hours. + + +Output files for ensemble predictions +------------------------------------- + +Ensembles can be retrieved and are addressed by the grib message parameter ``number``. The ensembles are saved per file and standard filenames are supplemented by the letter ``N`` and the ensemble member number in a 3 digit format. + +.. code-block:: bash + + <prefix>YYMMDDHH.N<ENSEMBLE_MEMBER> + + +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 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: + +.. code-block:: bash + + $ grib_ls + + edition centre date dataType gridType stepRange typeOfLevel level shortName packingType + 1 ecmf 20000108 fc regular_ll 0 surface 0 lsp grid_simple + 1 ecmf 20000108 fc regular_ll 1 surface 0 lsp grid_simple + 1 ecmf 20000108 fc regular_ll 2 surface 0 lsp grid_simple + 1 ecmf 20000108 fc regular_ll 0 surface 0 cp grid_simple + 1 ecmf 20000108 fc regular_ll 1 surface 0 cp grid_simple + 1 ecmf 20000108 fc regular_ll 2 surface 0 cp grid_simple + + + + +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`. + +MARS grib files +--------------- + +``Flex_extract`` retrieves all meteorological fields from MARS and stores them in files ending with ``.grb``. +Since the request times and data transfer of MARS access are limited and ECMWF asks for efficiency in requesting data from MARS, ``flex_extract`` splits the overall data request in several smaller requests. Each request is stored in an extra ``.grb`` file and the file names are put together by several pieces of information: + + .. code-block:: bash + + <field_type><grid_type><temporal_property><level_type>.<date>.<ppid>.<pid>.grb + +Description: + +Field type: + ``AN`` - Analysis, ``FC`` - Forecast, ``4V`` - 4d variational analysis, ``CV`` - Validation forecast, ``CF`` - Control forecast, ``PF`` - Perturbed forecast +Grid type: + ``SH`` - Spherical Harmonics, ``GG`` - Gaussian Grid, ``OG`` - Output Grid (typically lat/lon), ``_OROLSM`` - Orography parameter +Temporal property: + ``__`` - instantaneous fields, ``_acc`` - accumulated fields +Level type: + ``ML`` - Model Level, ``SL`` - Surface Level +ppid: + The process number of the parent process of submitted script. +pid: + The process number of the submitted script. + +The process ids should avoid mixing of fields if several ``flex_extract`` jobs are performed in parallel (which is, however, not recommended). The date format is YYYYMMDDHH. + +Example ``.grb`` files for a day of CERA-20C data: + + .. code-block:: bash + + ANOG__ML.20000908.71851.71852.grb + FCOG_acc_SL.20000907.71851.71852.grb + ANOG__SL.20000908.71851.71852.grb + OG_OROLSM__SL.20000908.71851.71852.grb + ANSH__SL.20000908.71851.71852.grb + + +MARS request file +----------------- + +This file is a ``csv`` file called ``mars_requests.csv`` with a list of the actual settings of MARS request parameters (one request per line) in a flex_extract job. It is used for documenting the data which were retrieved and for testing reasons. + +Each request consist of the following parameters, whose meaning mainly can be taken from :doc:`Input/control_params` or :doc:`Input/run`: +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type + +Example output of a one day retrieval of CERA-20c data: + +.. code-block:: bash + + request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type + 1, 24, 40.0/-5.0/30.0/5.0, None, 20000107/to/20000109, 1, , 1.0/1.0, 1, SFC, EP, 000, 142.128/143.128/146.128/180.128/181.128/176.128, , 159, 3/to/24/by/3, ENDA, /mnt/nas/Anne/Interpolation/flexextract/flex_extract_v7.1/run/./workspace/CERA_testgrid_local_cds/FCOG_acc_SL.20000107.23903.23904.grb, 18, FC + 1, 24, 40.0/-5.0/30.0/5.0, None, 20000108/to/20000108, 1, , 1.0/1.0, 85/to/91, ML, EP, 000, 130.128/133.128/131.128/132.128/077.128/246.128/247.128, , 159, 00, ENDA, /mnt/nas/Anne/Interpolation/flexextract/flex_extract_v7.1/run/./workspace/CERA_testgrid_local_cds/ANOG__ML.20000108.23903.23904.grb, 00/03/06/09/12/15/18/21, AN + 2, 24, 40.0/-5.0/30.0/5.0, None, 20000108/to/20000108, 1, , OFF, 1, ML, EP, 000, 152.128, , 159, 00, ENDA, /mnt/nas/Anne/Interpolation/flexextract/flex_extract_v7.1/run/./workspace/CERA_testgrid_local_cds/ANSH__SL.20000108.23903.23904.grb, 00/03/06/09/12/15/18/21, AN + 3, 24, 40.0/-5.0/30.0/5.0, None, 20000108, 1, , 1.0/1.0, 1, SFC, EP, 000, 160.128/027.128/028.128/244.128, , 159, 000, ENDA, /mnt/nas/Anne/Interpolation/flexextract/flex_extract_v7.1/run/./workspace/CERA_testgrid_local_cds/OG_OROLSM__SL.20000108.23903.23904.grb, 00, AN + 4, 24, 40.0/-5.0/30.0/5.0, None, 20000108/to/20000108, 1, , 1.0/1.0, 1, SFC, EP, 000, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/027.128/028.128/186.128/187.128/188.128/235.128/139.128/039.128/173.128, , 159, 00, ENDA, /mnt/nas/Anne/Interpolation/flexextract/flex_extract_v7.1/run/./workspace/CERA_testgrid_local_cds/ANOG__SL.20000108.23903.23904.grb, 00/03/06/09/12/15/18/21, AN + + +VERTICAL.EC +----------- + +The vertical discretization of model levels. This file contains the ``A`` and ``B`` parameters to calculate the model level height in meters. + + +Index file +---------- + +This file is usually called ``date_time_stepRange.idx``. It contains indices pointing to specific grib messages from one or more grib files. The messages are selected with a composition of grib message keywords. + + +flux files +---------- + +The flux files contain the de-accumulated and dis-aggregated flux fields of large scale and convective precipitation, eastward turbulent surface stress, northward turbulent surface stress, surface sensible heat flux and the surface net solar radiation. + +.. code-block:: bash + + flux<date>[.N<xxx>][.<xxx>] + +The date format is YYYYMMDDHH. The optional block ``[.N<xxx>]`` marks the ensemble forecast number, where ``<xxx>`` is the ensemble member number. The optional block ``[.<xxx>]`` marks a pure forecast with ``<xxx>`` being the forecast step. + +.. note:: + + 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 ``0`` for the original time interval and ``1`` or ``2`` for the two new intervals respectively. + + +fort files +---------- + +There are a number of input files for the ``CONVERT2`` Fortran program named + +.. code-block:: bash + + fort.xx + +where ``xx`` is the number which defines the meteorological fields stored in these files. +They are generated by the Python part of ``flex_extract`` by just splitting the meteorological fields for a unique time stamp from the ``*.grb`` files into the ``fort`` files. +The following table defines the numbers with their corresponding content. + +.. csv-table:: Content of fort - files + :header: "Number", "Content" + :widths: 5, 20 + + "10", "U and V wind components" + "11", "temperature" + "12", "logarithm of surface pressure" + "13", "divergence (optional)" + "16", "surface fields" + "17", "specific humidity" + "18", "surface specific humidity (reduced gaussian)" + "19", "vertical velocity (pressure) (optional)" + "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. + +The ``CONVERT2`` program saves its results in file ``fort.15`` which typically contains: + +.. csv-table:: Output file of the Fortran program ``CONVERT2`` + :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`. + +.. 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 ??????????????? + + Example of a namelist: + + .. code-block:: bash + + &NAMGEN + maxl = 11, + maxb = 11, + mlevel = 91, + mlevelist = "85/to/91", + mnauf = 159, + metapar = 77, + rlo0 = -5.0, + rlo1 = 5.0, + rla0 = 30.0, + rla1 = 40.0, + momega = 0, + momegadiff = 0, + mgauss = 0, + msmooth = 0, + meta = 1, + metadiff = 0, + mdpdeta = 1 + / + + +.. 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 new file mode 100644 index 0000000000000000000000000000000000000000..9bde61b398e8273f68dc11a835758b21a998bafa --- /dev/null +++ b/Documentation/html/_sources/Documentation/overview.rst.txt @@ -0,0 +1,47 @@ +======== +Overview +======== + +``Flex_extract`` 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 ``FLEXTRA``/``FLEXPART`` Atmospheric Transport Modelling system. +``Flex_extract`` was created explicitly for ``FLEXPART`` users who wants to use meteorological data from ECMWF to drive the ``FLEXPART`` model. +The software retrieves the minimal number of parameters ``FLEXPART`` needs to work and provides the data in the explicity format ``FLEXPART`` understands. + +``Flex_extract`` consists of 2 main parts: + 1. a Python part, where the reading of parameter settings, retrieving data from MARS and preparing the data for ``FLEXPART`` is done and + 2. a Fortran part, where the calculation of the vertical velocity is done and if necessary the conversion from spectral to regular latitude/longitude grids. + +Additionally, it has some Korn shell scripts which are used to set the environment and batch job features on ECMWF servers for the *gateway* and *remote* mode. See :doc:`Overview/app_modes` for information of application modes. + +A number of Shell scripts are wrapped around the software package for easy installation and fast job submission. + +The software depends on a number of third-party libraries which can be found in :ref:`ref-requirements`. + +Some details on the tasks and program worksteps are described in :doc:`Overview/prog_flow`. + + +.. - directory structure (new diagramm!) + + - Software components - complete component structure (table or diagram) + + - Python package + + - Package diagram + - Files and modules as table with information about unit tests + - Api + + - Fortran program - CONVERT2 + + - Package diagram + - Api + + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Overview/app_modes + Overview/prog_flow diff --git a/Documentation/html/_sources/Documentation/vertco.rst.txt b/Documentation/html/_sources/Documentation/vertco.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..4dea24a9e58275ba417fa64fa0daa946e8cb65bd --- /dev/null +++ b/Documentation/html/_sources/Documentation/vertco.rst.txt @@ -0,0 +1,62 @@ +******************* +Vertical Coordinate +******************* + +Calculation of vertical velocity and preparation of Output-files +================================================================ + +``flex_extract`` has two ways to calculate the vertical velocity for ``FLEXTRA``/``FLEXPART``: + (i) from the horizontal wind field, + (ii) from the MARS parameter 77, which is available for operational forecasts and analyses since September 2008 and for reanalysis datasets **ERA5** and **CERA-20C**. + +Especially for high resolution data, use of the ``MARS`` parameter 77 is recommended, +since the computational cost (measured in ECMWF HPC units) is reduced by 90-95% at +T799. The extraction time, which depends heavily also on the performance of ``MARS``, is +generally reduced by 50% as well. The ``MARS`` parameter 77 is then multiplied by ``dp/deta`` to +give a vertical velocity in Pa/s as needed by ``FLEXPART``. + +Calculation from the horizontal wind field is still required for historical case studies using +**ERA-40**, **ERA-Interim** or operational data prior to September 2008. + + +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 +documents v20_update_protocol.pdf, V30_update_protocol.pdf and +V40_update_protocol.pdf. The computational demand and accuracy of ``CONVERT2`` is highly +dependent on the specification of parameters ``GAUSS``, ``RESOL`` and ``SMOOTH``. The +following guidance can be given for choosing the right parameters: + + * For very fine output grids (0.25 degree or finer) the full resolution T799 or even T1279 of the operational model is required (``RESOL=799``, ``SMOOTH=0``). The highest available resolution (and the calculation of vertical velocity on the Gaussian grid (``GAUSS=1``) 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 *ecgate*, the computation of the vertical velocity is feasible only on the lat/lon grid (``GAUSS=0``), 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. + * 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: + - For 1.0 degree grids: ``GAUSS=1``, ``RESOL=255``, ``SMOOTH=179`` + - For 0.5 degree grids: ``GAUSS=1``, ``RESOL=399``, ``SMOOTH=359`` + - Calculation on the lat/lon grid is not recommended for less than the operational (T1279) resolution. + - If ``GAUSS`` is set to 1, only the following choices are possible for ``RESOL`` on *ecgate*: 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 ``GAUSS=0``, ``RESOL`` can be any value below the operational resolution. + - For ``SMOOTH`` any resolution lower than ``RESOL`` is possible. If no smoothing is desired, ``SMOOTH=0`` should be chosen. ``SMOOTH`` has no effect if vertical velocity is calculated on lat\/lon grid (``GAUSS=0``). + * The on demand scripts send an error message for settings where ``SMOOTH`` (if set) and ``RESOL`` are larger than 360./``GRID``/2, since in this case, the output grid cannot resolve the highest wave numbers. The scripts continue operations, however. + * Regional grids are not cyclic in zonal directions, but global grids are. The software assumes a cyclic grid if ``RIGHT``-``LEFT`` is equal to ``GRID`` or is equal to ``GRID``-360. + * Finally, model and flux data as well as the vertical velocity computed are written to files ``<prefix>yymmddhh`` for application in ATM modelling. If the parameters ``OMEGA`` or ``OMEGADIFF`` are set, also files ``OMEGAyymmddhh`` are created, containing the pressure vertical velocity (omega) and the difference between omega from ``MARS`` and the surface pressure tendency. ``OMEGADIFF`` should be zero except for debugging, since it triggers expensive calculations on the Gaussian grid. + + +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. + +It is recommended to use the pre-calculated parameter 77 by setting ``ETA`` to 1 whenever possible. + +Setting parameter ``ETA`` to 1 normally disables calculation of vertical velocity from the horizontal wind field, which saves a lot of computational time. + +.. note:: + However, the calculation on the Gaussian grid are avoided only if both ``GAUSS`` and ``ETADIFF`` are set to 0. Please set ``ETADIFF`` to 1 only if you are really need it for debugging since this is a very expensive option. In this case ``ETAyymmddhh`` files are produced that contain the vertical velocity from horizontal winds and the difference to the pre-calculated vertical velocity. + +The parameters ``RESOL``, ``GRID``, ``UPPER``, ``LOWER``, ``LEFT``, ``RIGHT`` still apply. As for calculations on the Gaussian grid, the spectral resolution parameter ``RESOL`` should be compatible with the grid resolution (see previous subsection). + + +.. toctree:: + :hidden: + :maxdepth: 2 + diff --git a/Documentation/html/_sources/Ecmwf/access.rst.txt b/Documentation/html/_sources/Ecmwf/access.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..6c2930e90bf32d0a9586b907fee286dc5f9b8be7 --- /dev/null +++ b/Documentation/html/_sources/Ecmwf/access.rst.txt @@ -0,0 +1,27 @@ +************ +Access Modes +************ + +.. _public datasets: https://confluence.ecmwf.int/display/WEBAPI/Available+ECMWF+Public+Datasets +.. _Computing Representative: https://www.ecmwf.int/en/about/contact-us/computing-representatives +.. _Climate Data Store: https://cds.climate.copernicus.eu +.. _CDS API: https://cds.climate.copernicus.eu/api-how-to + +Access to the ECMWF Mars archive is divided into two groups: **member state** users and **public** users. + +**Member state user**: + This access mode allows the user to work directly on the ECMWF Linux Member State Servers or via a Web Access Toolkit ``ecaccess`` 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 `Computing Representative`_. This user group is also able to work from their local facilities without a gateway server in the same way a **public** user would. The only difference is the connection with the Web API. However, this is automatically selected by ``flex_extract``. + + +**Public user**: + This access mode allows every user to access the ECMWF `public datasets`_ from their local facilities. ``Flex_extract`` is able (tested for the use with ``FLEXPART``) to extract the re-analysis datasets such as ERA-Interim and CERA-20C. The main difference to the **member state user** 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 ``CONTROL`` 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 :ref:`ref-licence`. + +.. note:: + + The availability of the public dataset *ERA5* with the ECMWF Web API was cancelled in March 2019. The oportunity of local retrieval of this dataset was moved to the `Climate Data Store`_ which uses another Web API named `CDS API`_. This Data Store stores the data on explicit webservers for faster and easier access. Unfortunately, for *ERA5* there are only surface level and pressure level data available for *public users*. In the case of a *member user* it is possible to bypass the request to the MARS archive from ECMWF to retrieve the data. ``Flex_extract`` is already modified to use this API so *member user* can already retrieve *ERA5* data while *public users* have to wait until model level are available. + +For information on how to register see :ref:`ref-registration`. + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Ecmwf/ec-links.rst.txt b/Documentation/html/_sources/Ecmwf/ec-links.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..4095813c39f14a3449beb1fdd9d5d3e8fb34b6de --- /dev/null +++ b/Documentation/html/_sources/Ecmwf/ec-links.rst.txt @@ -0,0 +1,122 @@ +################################ +Link Collection for Quick finder +################################ + + +ECMWF - General Overview + `ECMWF Home <https://www.ecmwf.int/>`_ + + `ECMWF Training <https://www.ecmwf.int/en/learning>`_ + + `General User Documentation <https://software.ecmwf.int/wiki/display/UDOC/User+Documentation>`_ + + `Software Support <https://confluence.ecmwf.int/display/SUP>`_ + +MARS + `MARS user documentation <https://confluence.ecmwf.int//display/UDOC/MARS+user+documentation>`_ + + `MARS Keywords <https://software.ecmwf.int/wiki/display/UDOC/MARS+keywords>`_ + + `MARS Content <https://confluence.ecmwf.int/display/UDOC/MARS+content>`_ + + `MARS Actions <https://confluence.ecmwf.int/display/UDOC/MARS+actions>`_ + + `Parameter Database <https://apps.ecmwf.int/codes/grib/param-db>`_ + +Registration + `Contact of Computing Representative's <https://www.ecmwf.int/en/about/contact-us/computing-representatives>`_ + + `Public registration for ECMWF Web API <https://software.ecmwf.int/wiki/display/WEBAPI/Access+MARS>`_ + + `CDS Registration <https://cds.climate.copernicus.eu/user/register>`_ + +Available Member State Datasets + `Web Interface for accessing member state datasets <http://apps.ecmwf.int/archive-catalogue/>`_ + + `Available datasets for member state users <https://www.ecmwf.int/en/forecasts/datasets>`_ + +Available Public Datasets + `Web Interface for accessing public datasets <http://apps.ecmwf.int/datasets/>`_ + + `ECMWF's public datasets <https://confluence.ecmwf.int/display/WEBAPI/Available+ECMWF+Public+Datasets>`_ + + `Public dataset Licences <https://software.ecmwf.int/wiki/display/WEBAPI/Available+ECMWF+Public+Datasets>`_ + + `ERA5 public dataset Licence <https://cds.climate.copernicus.eu/cdsapp#!/search?type=dataset>`_ + + +Datasets + Overview + `Complete list of datasets <https://www.ecmwf.int/en/forecasts/datasets>`_ + + `What is climate reanalysis <https://www.ecmwf.int/en/research/climate-reanalysis>`_ + + `Forecast user guide <https://confluence.ecmwf.int/display/FUG/1+Introduction>`_ + + Real-time (Operational) + `List of real_time datasets <https://www.ecmwf.int/en/forecasts/datasets/catalogue-ecmwf-real-time-products>`_ + + `Atmospheric model - HRES (our typical operational dataset) <https://www.ecmwf.int/en/forecasts/datasets/set-i>`_ + + `Atmospheric model - ENS (15-day ensemble forecast) <https://www.ecmwf.int/en/forecasts/datasets/set-iii>`_ + + ERA-Interim + `What is ERA-Interim <https://confluence.ecmwf.int/display/CKB/What+is+ERA-Interim>`_ + + `ERA-Interim documentation <https://www.ecmwf.int/en/elibrary/8174-era-interim-archive-version-20>`_ + + `ERA-Interim dataset <https://www.ecmwf.int/en/forecasts/datasets/archive-datasets/reanalysis-datasets/era-interim>`_ + + CERA-20C + `What is CERA-20C <https://software.ecmwf.int/wiki/display/CKB/What+is+CERA-20C>`_ + + `CERA-20C dataset <https://www.ecmwf.int/en/forecasts/datasets/archive-datasets/reanalysis-datasets/cera-20c>`_ + + ERA5 + `What is ERA5 <https://software.ecmwf.int/wiki/display/CKB/What+is+ERA5>`_ + + `What are the changes from ERA-Interim to ERA5 <https://confluence.ecmwf.int/pages/viewpage.action?pageId=74764925>`_ + + `How to download ERA5 via Climate Data Store <https://confluence.ecmwf.int/display/CKB/How+to+download+ERA5>`_ + + `How to migrate from ECMWF Web API to CDS API <https://confluence.ecmwf.int/display/CKB/How+to+migrate+from+ECMWF+Web+API+to+CDS+API>`_ + + `ERA5 Documentation <https://software.ecmwf.int/wiki/display/CKB/ERA5+data+documentation>`_ + +Third Party Libraries + `ECMWF Web API Home <https://software.ecmwf.int/wiki/display/WEBAPI/ECMWF+Web+API+Home>`_ + + `Building ECMWF software with gfortran <https://software.ecmwf.int/wiki/display/SUP/2015/05/11/Building+ECMWF+software+with+gfortran>`_ + + `FFTW <http://www.fftw.org>`_ + + `EMOSLIB <https://software.ecmwf.int/wiki/display/EMOS/Emoslib>`_ + + `ECcodes <https://software.ecmwf.int/wiki/display/ECC>`_ + + `C3S ERA5: Web API to CDS API <https://confluence.ecmwf.int/display/CKB/C3S+ERA5%3A+Web+API+to+CDS+API>`_ + + `ECaccess Documentation <https://confluence.ecmwf.int/display/ECAC/ECaccess+Home>`_ + +Plotting GRIB fields: + `Example Python script to plot GRIB files <https://software.ecmwf.int/wiki/display/CKB/How+to+plot+GRIB+files+with+Python+and+matplotlib>`_ + + +Scientific Information + `Octahedral reduced Gaussian Grid <https://confluence.ecmwf.int/display/FCST/Introducing+the+octahedral+reduced+Gaussian+grid>`_ + + `Precipitation <https://www.ecmwf.int/en/newsletter/147/meteorology/use-high-density-observations-precipitation-verification>`_ + + +Technical Information of ECMWF serves + + `Introduction presentation to SLURM <https://confluence.ecmwf.int/download/attachments/73008494/intro-slurm-2017.pdf?version=1&modificationDate=1488574096323&api=v2>`_ + +Troubleshooting + `ECMWF Web API Troubleshooting <https://confluence.ecmwf.int/display/WEBAPI/Web-API+Troubleshooting>`_ + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Ecmwf/hintsecmwf.rst.txt b/Documentation/html/_sources/Ecmwf/hintsecmwf.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..e601cffa1e17f1976883f8baa2d1969ad3e579cf --- /dev/null +++ b/Documentation/html/_sources/Ecmwf/hintsecmwf.rst.txt @@ -0,0 +1,25 @@ +################################## +Hints to specify dataset retrieval +################################## + +.. contents:: + :local: + + + +How can I find out what data is available? +========================================== + +Go to the `Web Interface for accessing member state datasets <http://apps.ecmwf.int/archive-catalogue/>`_ +and click yourself through the steps to define your set of data and see what is available to you. + +For public users there is the `Web Interface for accessing public datasets <http://apps.ecmwf.int/datasets/>`_. + + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Ecmwf/msdata.rst.txt b/Documentation/html/_sources/Ecmwf/msdata.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..da321a9807365d90f16d463601f1381c390718da --- /dev/null +++ b/Documentation/html/_sources/Ecmwf/msdata.rst.txt @@ -0,0 +1,22 @@ +######################################### +Available Datasets for Member State users +######################################### + + + +Model level data +================ + +.. figure:: ../_files/ECMWF_FPparameter_ml.png + + +Surface level data +================== + +.. figure:: ../_files/ECMWF_FPparameter_sfc-0.png +.. figure:: ../_files/ECMWF_FPparameter_sfc-1.png + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Ecmwf/pubdata.rst.txt b/Documentation/html/_sources/Ecmwf/pubdata.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..277b09106f662789f45d2d578b1d25390175b0d5 --- /dev/null +++ b/Documentation/html/_sources/Ecmwf/pubdata.rst.txt @@ -0,0 +1,9 @@ +Available Datasets for Public users +*********************************** + + IN PREPARATION + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Evaluation/metrics.rst.txt b/Documentation/html/_sources/Evaluation/metrics.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..4188696c92892734e51ee7ca8787c74aab561bc8 --- /dev/null +++ b/Documentation/html/_sources/Evaluation/metrics.rst.txt @@ -0,0 +1,15 @@ +Metrics +======= + + UNDER CONSTRUCTION + +.. csv-table: TTEST +.. :file: metrics_7.1.csv +.. :widths: 1,1,1,1,1,1 +.. :header-rows: 1 + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Evaluation/staticcode.rst.txt b/Documentation/html/_sources/Evaluation/staticcode.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..52e54138a51157463e6603d3fa443d0c7b1f580e --- /dev/null +++ b/Documentation/html/_sources/Evaluation/staticcode.rst.txt @@ -0,0 +1,9 @@ +******************** +Static Code Analysis +******************** + + UNDER CONSTRUCTION + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Evaluation/testcases.rst.txt b/Documentation/html/_sources/Evaluation/testcases.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..aa257d29d7b2503a7eb589881f14e779ae7c1934 --- /dev/null +++ b/Documentation/html/_sources/Evaluation/testcases.rst.txt @@ -0,0 +1,22 @@ +******************** +Testcases +******************** + + +Comparison of MARS requests +=========================== + + + + + +Comparison of grib files +======================== + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Installation/gateway.rst.txt b/Documentation/html/_sources/Installation/gateway.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..c452eb6b5868150e55aa6ae16ef28a30e41b96a9 --- /dev/null +++ b/Documentation/html/_sources/Installation/gateway.rst.txt @@ -0,0 +1,168 @@ +************************* +Gateway mode installation +************************* + +.. role:: underline + :class: underline + +.. toctree:: + :hidden: + :maxdepth: 2 + +.. _Python 3: https://docs.python.org/3/ +.. _Python3: https://www.python.org/downloads/ +.. _Anaconda Python3: https://www.anaconda.com/distribution/#download-section + +.. _numpy: http://www.numpy.org/ +.. _ecmwf-api-client: https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home +.. _cdsapi: https://cds.climate.copernicus.eu/api-how-to +.. _genshi: https://genshi.edgewall.org/ +.. _eccodes for python: https://packages.debian.org/sid/python3-eccodes +.. _eccodes for conda: https://anaconda.org/conda-forge/eccodes +.. _gfortran: https://gcc.gnu.org/wiki/GFortran +.. _fftw3: http://www.fftw.org +.. _eccodes: https://software.ecmwf.int/wiki/display/ECC +.. _emoslib: https://software.ecmwf.int/wiki/display/EMOS/Emoslib +.. _member state: https://www.ecmwf.int/en/about/who-we-are/member-states +.. _registration form: https://apps.ecmwf.int/registration/ +.. _CDS API registration: https://cds.climate.copernicus.eu/user/register +.. _ECMWF ectrans site: https://confluence.ecmwf.int/display/ECAC/Unattended+file+transfer+-+ectrans +.. _ECaccess Presentation: https://confluence.ecmwf.int/download/attachments/45759146/ECaccess.pdf +.. _ECMWF's instructions on gateway server: https://confluence.ecmwf.int/display/ECAC/ECaccess+Home +.. _Computing Representative: https://www.ecmwf.int/en/about/contact-us/computing-representatives +.. _MARS access: https://confluence.ecmwf.int//display/WEBAPI/Access+MARS + +.. _download section: https://www.flexpart.eu/downloads + + + +.. _ref-gateway-mode: + + + +.. _ref-req-gateway: + +Gateway mode - dependencies +=========================== + +* `Python3`_ +* `numpy`_ +* `genshi`_ + + +.. _ref-prep-gateway: + +Prepare gateway environment +=========================== + +In this mode, access to the ECMWF computing and archiving facilities is enabled through an ECaccess gateway server on a local member state server. The ECaccess framework is necessary to interactively submit jobs to the ECMWF batch system and to transfer files between ECMWF and local gateway server. + +Please see `ECMWF's instructions on gateway server`_ to establish the gateway server if not already in place. Additionally, to be able to use the ECaccess file transfer service **ectrans** it is necessary to create a so-called association. The easiest way is to visit the ECaccess Member State Gateway website (e.g. https://msgatway.ecmwf.int) and follow the instructions in the short `ECaccess Presentation`_ (page 17 ff.). Additional documentation can be found on the `ECMWF ectrans site`_. + +The next step is to create an *ecaccess certificate* to be able to send and receive files from and to the ECMWF server. You can do this by using the ``ecaccess-certificate-create`` 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). + + +.. code-block:: bash + + $ ecaccess-certificate-create + Please enter your user-id: example_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 installation was tested under *GNU/Linux Debian buster* and *Ubuntu 18.04 Bionic Beaver*. + +.. code-block:: sh + + + # 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): + # (if not already available): + apt-get install python3 + apt-get install python3-genshi + apt-get install python3-numpy + + +.. _ref-test-gateway: + +Test gateway environment +======================== + +Check the availability of the python packages by typing ``python3`` in +a terminal window and run the ``import`` commands in the python shell. +If there are no error messages, you succeeded in setting up the environment. + +.. code-block:: python + + # check in python3 console + import genshi + import numpy + + + +.. _ref-install-gateway: + +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. +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. + + +.. 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: + +.. code-block:: bash + + $ ./setup.sh + +to start the installation. You should see the following on standard output. + + +.. code-block:: bash + + # Output of setup.sh + Create tarball ... + 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: + +.. 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! + + + + + + + + diff --git a/Documentation/html/_sources/Installation/local.rst.txt b/Documentation/html/_sources/Installation/local.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..d0276bf56a2f8443c7241302fe7c43c4b6cc77f8 --- /dev/null +++ b/Documentation/html/_sources/Installation/local.rst.txt @@ -0,0 +1,381 @@ +*********************** +Local mode installation +*********************** + +.. role:: underline + :class: underline + +.. toctree:: + :hidden: + :maxdepth: 2 + + +.. _Python 3: https://docs.python.org/3/ +.. _Python3: https://www.python.org/downloads/ +.. _Anaconda Python3: https://www.anaconda.com/distribution/#download-section + +.. _numpy: http://www.numpy.org/ +.. _ecmwf-api-client: https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home +.. _cdsapi: https://cds.climate.copernicus.eu/api-how-to +.. _genshi: https://genshi.edgewall.org/ +.. _eccodes for python: https://packages.debian.org/sid/python3-eccodes +.. _eccodes for conda: https://anaconda.org/conda-forge/eccodes +.. _gfortran: https://gcc.gnu.org/wiki/GFortran +.. _fftw3: http://www.fftw.org +.. _eccodes: https://software.ecmwf.int/wiki/display/ECC +.. _emoslib: https://software.ecmwf.int/wiki/display/EMOS/Emoslib +.. _member state: https://www.ecmwf.int/en/about/who-we-are/member-states +.. _registration form: https://apps.ecmwf.int/registration/ +.. _CDS API registration: https://cds.climate.copernicus.eu/user/register +.. _ECMWF ectrans site: https://confluence.ecmwf.int/display/ECAC/Unattended+file+transfer+-+ectrans +.. _ECaccess Presentation: https://confluence.ecmwf.int/download/attachments/45759146/ECaccess.pdf +.. _ECMWF's instructions on gateway server: https://confluence.ecmwf.int/display/ECAC/ECaccess+Home +.. _Computing Representative: https://www.ecmwf.int/en/about/contact-us/computing-representatives +.. _MARS access: https://confluence.ecmwf.int//display/WEBAPI/Access+MARS + +.. _download section: https://www.flexpart.eu/downloads + + + + + +.. _ref-local-mode: + + + +.. _ref-req-local: + +Local mode - dependencies +========================= + +The installation is the same for the access modes **member** and **public**. + +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: + ++------------------------------------------------+-----------------+ +| Python part | Fortran part | ++------------------------------------------------+-----------------+ +| * `Python3`_ | * `gfortran`_ | +| * `numpy`_ | * `fftw3`_ | +| * `genshi`_ | * `eccodes`_ | +| * `eccodes for python`_ | * `emoslib`_ | +| * `ecmwf-api-client`_ (everything except ERA5) | | +| * `cdsapi`_ (just for ERA5) | | ++------------------------------------------------+-----------------+ + + +.. _ref-prep-local: + +Prepare local environment +========================= + +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 on a *Debian GNU/Linux buster* and an *Ubuntu 18.04 Bionic Beaver* system. + +.. code-block:: sh + + # 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): + # (if not already available): + apt-get install python3 (usually already available on GNU/Linux systems) + apt-get install python3-eccodes + apt-get install python3-genshi + apt-get install python3-numpy + apt-get install gfortran + apt-get install fftw3-dev + apt-get install libeccodes-dev + apt-get install libemos-dev + # Some of these packages will pull in further packages as dependencies. This is fine, and some are even needed by ``flex_extract''. + + + # As currently the CDS and ECMWF API packages are not available as Debian packages, they need to be installed outside of the Debian (Ubuntu etc.) package management system. The recommended way is: + apt-get install pip + pip install cdsapi + pip install ecmwf-api-client + +.. note:: + + In case you would like to use Anaconda Python we recommend you follow the installation instructions of + `Anaconda Python Installation for Linux <https://docs.anaconda.com/anaconda/install/linux/>`_ and then install the + ``eccodes`` package from ``conda`` with: + + .. code-block:: bash + + conda install conda-forge::python-eccodes + +The CDS API (cdsapi) is required for ERA5 data and the ECMWF Web API (ecmwf-api-client) for all other public datasets. + +.. note:: + + Since **public users** currently don't have access to the full *ERA5* dataset they can skip the installation of the ``CDS API``. + +Both user groups have to provide keys with their credentials for the Web API's in their home directory. Therefore, follow these instructions: + +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. + + +.. _ref-test-local: + +Test local environment +====================== + +Check the availability of the python packages by typing ``python3`` in a terminal window and run the ``import`` commands in the python shell. If there are no error messages, you succeeded in setting up the environment. + +.. code-block:: python + + # check in python3 console + import eccodes + import genshi + import numpy + import cdsapi + import ecmwfapi + + + +Test the Web API's +------------------ + +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 ``flex_extract`` later on. + + +ECMWF Web API +^^^^^^^^^^^^^ + + ++----------------------------------------------------------+----------------------------------------------------------+ +|Please use this piece of Python code for **Member user**: |Please use this piece of Python code for **Public user**: | ++----------------------------------------------------------+----------------------------------------------------------+ +|.. code-block:: python |.. code-block:: python | +| | | +| from ecmwfapi import ECMWFService | from ecmwfapi import ECMWFDataServer | +| | | +| server = ECMWFService('mars') | server = ECMWFDataServer() | +| | | +| server.retrieve({ | server.retrieve({ | +| 'stream' : "oper", | 'stream' : "enda", | +| 'levtype' : "sfc", | 'levtype' : "sfc", | +| 'param' : "165.128/166.128/167.128", | 'param' : "165.128/166.128/167.128", | +| 'dataset' : "interim", | 'dataset' : "cera20c", | +| 'step' : "0", | 'step' : "0", | +| 'grid' : "0.75/0.75", | 'grid' : "1./1.", | +| 'time' : "00/06/12/18", | 'time' : "00/06/12/18", | +| 'date' : "2014-07-01/to/2014-07-31", | 'date' : "2000-07-01/to/2000-07-31", | +| 'type' : "an", | 'type' : "an", | +| 'class' : "ei", | 'class' : "ep", | +| 'target' : "download_erainterim_ecmwfapi.grib" | 'target' : "download_cera20c_ecmwfapi.grib" | +| }) | }) | ++----------------------------------------------------------+----------------------------------------------------------+ + + + +CDS API +^^^^^^^ + +Extraction of ERA5 data via CDS API might take time as currently there is a high demand for ERA5 data. Therefore, as a simple test for the API just retrieve pressure-level data (even if that is NOT what we need for FLEXPART), as they are stored on disk and don't need to be retrieved from MARS (which is the time-consuming action): + +Please use this piece of Python code to retrieve a small sample of *ERA5* pressure levels: + +.. code-block:: python + + import cdsapi + + c = cdsapi.Client() + + c.retrieve("reanalysis-era5-pressure-levels", + { + "variable": "temperature", + "pressure_level": "1000", + "product_type": "reanalysis", + "year": "2008", + "month": "01", + "day": "01", + "time": "12:00", + "format": "grib" + }, + "download_cdsapi.grib") + + +If you know that your CDS API works, you can try to extract some data from MARS. + +.. **Member-state user** + +Please use this piece of Python code to retrieve a small *ERA5* data sample as a **member-state user**! The **Public user** do not have access to the full *ERA5* dataset! + +.. code-block:: python + + import cdsapi + + c = cdsapi.Client() + + c.retrieve('reanalysis-era5-complete', + { + 'class' : 'ea', + 'expver' : '1', + 'stream' : 'oper', + 'type' : 'fc', + 'step' : '3/to/12/by/3', + 'param' : '130.128', + 'levtype' : 'ml', + 'levelist': '135/to/137', + 'date' : '2013-01-01', + 'time' : '06/18', + 'area' : '50/-5/40/5', + 'grid' : '1.0/1.0', + 'format' : 'grib', + }, 'download_era5_cdsapi.grib') + + +.. ********************** COMMENTED OUT FOR FUTURE + ********************** PUBLIC RETRIEVAL IS CURRENTLY NOT ACCESSIBLE + + **Public user** + Please use this piece of Python code: + + .. code-block:: python + + import cdsapi + + c = cdsapi.Client() + + c.retrieve('reanalysis-era5-complete', + { + 'class' : 'ea', + 'dataset' : 'era5', + 'expver' : '1', + 'stream' : 'oper', + 'type' : 'fc', + 'step' : '3/to/12/by/3', + 'param' : '130.128', + 'levtype' : 'ml', + 'levelist': '135/to/137', + 'date' : '2013-01-01', + 'time' : '06/18', + 'area' : '50/-5/40/5', + 'grid' : '1.0/1.0', + 'format' : 'grib', + }, 'download_era5_cdsapi.grib') + + + + + + +.. _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 + +They 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 + ``makefiles`` if other than standard paths are used. + +So starting from the root directory of ``flex_extract``, +go to the ``Fortran`` source directory and open the ``makefile`` of your +choice to modify with an editor of your choice. We use the ``nedit`` in this case. + +.. code-block:: bash + + cd flex_extract_vX.X/Source/Fortran + nedit makefile.local.gfortran + +Edit the paths to the ``eccodes`` library on your local machine. + + +.. caution:: + This can vary from system to system. + It is suggested to use a command like + + .. code-block:: bash + + # for the ECCODES_INCLUDE_DIR path do: + $ dpkg -L libeccodes-dev | grep eccodes.mod + # for the ECCODES_LIB path do: + $ dpkg -L libeccodes-dev | grep libeccodes.so + + to find out the path to the ``eccodes`` library. + +Substitute these paths in the ``makefile`` for parameters **ECCODES_INCLUDE_DIR** +and **ECCODES_LIB** and save it. + +.. code-block:: bash + + # these are the paths on a current Debian 10 Testing system (May 2019) + ECCODES_INCLUDE_DIR=/usr/lib/x86_64-linux-gnu/fortran/gfortran-mod-15/ + ECCODES_LIB= -L/usr/lib -leccodes_f90 -leccodes -lm + + +The Fortran program called ``CONVERT2`` 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 +and adapt the installation parameters in the section labelled with +"AVAILABLE COMMANDLINE ARGUMENTS TO SET" like shown below. + + +.. code-block:: bash + :caption: 'Example settings for a local installation.' + :name: setup.sh + + ... + # ----------------------------------------------------------------- + # AVAILABLE COMMANDLINE ARGUMENTS TO SET + # + # THE USER HAS TO SPECIFY THESE PARAMETER + # + TARGET='local' + MAKEFILE='makefile.local.gfortran' + ECUID=None + ECGID=None + GATEWAY=None + DESTINATION=None + INSTALLDIR=None + JOB_TEMPLATE='job.template' + CONTROLFILE='CONTROL_EA5' + ... + + +Afterwards, type: + +.. code-block:: bash + + $ ./setup.sh + +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 + + + + + diff --git a/Documentation/html/_sources/Installation/remote.rst.txt b/Documentation/html/_sources/Installation/remote.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..b2e4d42a856f995e0722e764aabd08f40e9fb4c0 --- /dev/null +++ b/Documentation/html/_sources/Installation/remote.rst.txt @@ -0,0 +1,188 @@ +************************ +Remote mode installation +************************ + +.. role:: underline + :class: underline + +.. toctree:: + :hidden: + :maxdepth: 2 + + +.. _Python 3: https://docs.python.org/3/ +.. _Python3: https://www.python.org/downloads/ +.. _Anaconda Python3: https://www.anaconda.com/distribution/#download-section + +.. _numpy: http://www.numpy.org/ +.. _ecmwf-api-client: https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home +.. _cdsapi: https://cds.climate.copernicus.eu/api-how-to +.. _genshi: https://genshi.edgewall.org/ +.. _eccodes for python: https://packages.debian.org/sid/python3-eccodes +.. _eccodes for conda: https://anaconda.org/conda-forge/eccodes +.. _gfortran: https://gcc.gnu.org/wiki/GFortran +.. _fftw3: http://www.fftw.org +.. _eccodes: https://software.ecmwf.int/wiki/display/ECC +.. _emoslib: https://software.ecmwf.int/wiki/display/EMOS/Emoslib +.. _member state: https://www.ecmwf.int/en/about/who-we-are/member-states +.. _registration form: https://apps.ecmwf.int/registration/ +.. _CDS API registration: https://cds.climate.copernicus.eu/user/register +.. _ECMWF ectrans site: https://confluence.ecmwf.int/display/ECAC/Unattended+file+transfer+-+ectrans +.. _ECaccess Presentation: https://confluence.ecmwf.int/download/attachments/45759146/ECaccess.pdf +.. _ECMWF's instructions on gateway server: https://confluence.ecmwf.int/display/ECAC/ECaccess+Home +.. _Computing Representative: https://www.ecmwf.int/en/about/contact-us/computing-representatives +.. _MARS access: https://confluence.ecmwf.int//display/WEBAPI/Access+MARS + +.. _download section: https://www.flexpart.eu/downloads + + +.. _ref-remote-mode: + + +.. _ref-req-remote: + +Remote mode - dependencies +========================== + +The following software is required, and already available at the ECMWF servers: + ++---------------------------+-----------------+ +| Python part | Fortran part | ++---------------------------+-----------------+ +| * `Python3`_ | * `gfortran`_ | +| * `numpy`_ | * `fftw3`_ | +| * `genshi`_ | * `eccodes`_ | +| * `eccodes for python`_ | * `emoslib`_ | ++---------------------------+-----------------+ + + +.. _ref-prep-remote: + +Prepare remote environment +========================== + +ECMWF servers provide all libraries via a module system. Loading the required modules is already built into ``flex_extract`` and no user action is needed. + + +.. _ref-install-remote: + +Remote installation +=================== + +First, log in on one of the ECMWF servers, such as *ecgate* or *cca/ccb*. +Substitute *<ecuid>* with your ECMWF user name: + +.. code-block:: bash + + ssh -X <ecuid>@ecaccess.ecmwf.int + +This will lead to the following output on the command line, asking for your +password: + +.. code-block:: bash + + Authorized access only. + + *************************************************************** + For further information, read the ECaccess documentation at: + + https://software.ecmwf.int/wiki/display/ECAC/ECaccess+Home + + You can also use ECaccess to load & download files from your + EChome, ECscratch or ECfs directories using the ECaccess FTP + server: + + ftp://uid@ecaccess.ecmwf.int/ + + Please note you must use your UID and ActivID code to login! + *************************************************************** + + <ecuid>@<ipname/address>'s password: *** + Select hostname (ecgate, cca, ccb) [ecgate]: ecgate + + [<ecuid>@ecgb11 ~]$ + +Substitute the *<localuser>* and *<localmachine.tld>* placeholders with your local user name and the IP name or address of your local machine. +Untar the file and change into the ``flex_extract`` root directory. + +.. code-block:: bash + + scp <localuser>@<localmachine.tld>:</path/to/tarfile/>flex_extract_vX.X.tar.gz $HOME/ + cd $HOME + tar xvf flex_extract_vX.X.tar.gz + cd flex_extract_vX.X + + + +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`. + +Open ``setup.sh`` with your preferred editor (e.g., ``nano'') and adapt the values: + ++----------------------------------------------+----------------------------------------------+ +| Use this for target = **ectrans** | Use this for target = **cca** | ++----------------------------------------------+----------------------------------------------+ +| .. 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.gfortran' | MAKEFILE='Makefile.CRAY' | +| ECUID='uid' | ECUID='uid' | +| ECGID='gid' | ECGID='gid' | +| GATEWAY=None | GATEWAY=None | +| DESTINATION=None | DESTINATION=None | +| INSTALLDIR=None | INSTALLDIR='' | +| JOB_TEMPLATE='job.template' | JOB_TEMPLATE='job.template' | +| CONTROLFILE='CONTROL_EA5' | CONTROLFILE='CONTROL_EA5' | +| ... | ... | ++----------------------------------------------+----------------------------------------------+ + +: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).` + +.. note:: + + If a local gateway server is available, files can be transferred with ``ECaccess`` commands. In that case, a valid *GATEWAY* and *DESTINATION* have to be present in the ``setup.sh`` file (even if not used, the lines must not be deleted). + +Afterwards, type: + +.. code-block:: bash + + module load python3 + ./setup.sh + +to start the installation. You should see the following on standard output. + + +.. code-block:: bash + + # Output of setup.sh + Create tarball ... + 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: + +.. 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! + + + + + diff --git a/Documentation/html/_sources/Support/faq.rst.txt b/Documentation/html/_sources/Support/faq.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..616850d36a761c822195752b7686d7665de6fc7a --- /dev/null +++ b/Documentation/html/_sources/Support/faq.rst.txt @@ -0,0 +1,38 @@ +################################ +FAQ - Frequently asked questions +################################ + +.. contents:: + :local: + + + +What can I do if I can't install the third party libraries from distribution packages? +====================================================================================== + +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: + +Installation hints: + 1. `Read Emoslib installation instructions <https://software.ecmwf.int/wiki/display/EMOS/Emoslib>`_ + 2. `Read ECMWF blog about gfortran <https://software.ecmwf.int/wiki/display/SUP/2015/05/11/Building+ECMWF+software+with+gfortran>`_ + 3. `Install FFTW <http://www.fftw.org>`_ + 4. `Install EMOSLIB <https://software.ecmwf.int/wiki/display/EMOS/Emoslib>`_ (2 times make! one without any options and one with single precision option) + 5. `Install ECCODES <https://software.ecmwf.int/wiki/display/ECC>`_ + 6. Register at Mars (:ref:`ref-registration`) + 7. Install Web API's `CDS API <https://cds.climate.copernicus.eu/api-how-to>`_ and `ECMWF Web API <https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home>`_ + 8. Check LD_LIBRARY_PATH environment variable if it contains all paths to the libs + 9. Check available python packages (e.g. import eccodes / import grib_api / import ecmwfapi) + 10. Start test retrieval (:ref:`ref-test-local`) + 11. Install ``flex_extract`` (:doc:`../installation`) + +.. caution:: + - use the same compiler and compiler version all the time + - don't forget to set all Library paths in the LD_LIBRARY_PATH environment variable + - adapt the ``flex_extract`` makefile + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/Documentation/html/_sources/Support/known_bugs_issues.rst.txt b/Documentation/html/_sources/Support/known_bugs_issues.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..9ca018cf8f1ab82c790a237d0f58616e8fd34437 --- /dev/null +++ b/Documentation/html/_sources/Support/known_bugs_issues.rst.txt @@ -0,0 +1,4 @@ +Known Bugs and Issues +===================== + + \ No newline at end of file diff --git a/Documentation/html/_sources/authors.rst.txt b/Documentation/html/_sources/authors.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..3992e33b734ee403c6a50ce04457212659bafd1d --- /dev/null +++ b/Documentation/html/_sources/authors.rst.txt @@ -0,0 +1,28 @@ +************** +Developer Team +************** + +| Anne Philipp +| Department of Meteorology and Geophysics / +| Aerosol Physics and Environmental physics +| University of Vienna +| Althanstraße 14 / UZA II +| 1090 Vienna, Austria +| mail: anne.philipp [at] univie.ac.at + + + +| Leopold Haimberger +| Department of Meteorology and Geophysics +| University of Vienna +| Althanstraße 14 / UZA II +| 1090 Vienna, Austria +| mail: leopold.haimberger [at] univie.ac.at + + +.. toctree:: + :hidden: + :maxdepth: 2 + + + diff --git a/Documentation/html/_sources/changelog.rst.txt b/Documentation/html/_sources/changelog.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..31c200e2a57361b2ff74f19767322c0e4bb8d8c0 --- /dev/null +++ b/Documentation/html/_sources/changelog.rst.txt @@ -0,0 +1,87 @@ +Changelog +========= + +.. toctree:: + :hidden: + :maxdepth: 2 + +.. _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-v71: + +Release v7.1 +------------ +New Features +############ + + * first set of UNIT tests + * first set of regression tests + * structured documentation with Sphinx + * local retrieval via `CDS API`_ for ERA 5 data + * simplified installation process + * disaggregation of precipitation with a `new algorithm`_ + +Changes +####### + * upgraded to Python3 + * applied PEP8 style guide + * use of genshi templates + * modularization of python source code + * upgrade from grib_api to ecCodes + * completely revised/refactored python section + * restructured program directories + +.. _ref-v704: + +Release v7.0.4 +-------------- +New Features +############ + + * Ensemble retrieval for ENFO and ELDA stream (ZAMG specific with extra synthesized ensembles for ELDA stream) + +Bug fixes +######### + + * diverse problems with ERA 5 retrieval + * diverse problems with CERA-20C retrieval + * BASETIME retrieval option + * `CONVERT2` FORTRAN program: initialise fields to 0. + (introduced initialization of :literal:`field` variable in the Fortran program + with :literal:`field=0.` in file :literal:`rwGRIB2.f90` to avoid getting unreasonable large numbers.) + +.. _ref-v703: + +Release v7.0.3 +-------------- +New Features +############ + + * output of mars requests to an extra file (debugging and documentation) + * CERA-20C download + * ERA 5 download + * public user interface with `ECMWF Web API`_ + * use of `ECMWF Web API`_ for local retrieval version + +.. _ref-v702: + +Release v7.0.2 +-------------- +New Features +############ + + * Python based version + +Changes +####### + + * korn shell scripts were substituted by python scripts + +.. _ref-v60: + +Release v0.1 - v6.0 +------------------- + + * old version which should no longer be used anymore diff --git a/Documentation/html/_sources/dev_guide.rst.txt b/Documentation/html/_sources/dev_guide.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..40dd2aebf4c3ccb836df066d95c380e9f86bee93 --- /dev/null +++ b/Documentation/html/_sources/dev_guide.rst.txt @@ -0,0 +1,14 @@ +Developer Guide +=============== + + UNDER CONSTRUCTION + + +.. repository (how /who manages the code, where to get) + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Developers/gen_docu \ No newline at end of file diff --git a/Documentation/html/_sources/documentation.rst.txt b/Documentation/html/_sources/documentation.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..77e3f6f1178386ee63fd55f54157ba128858429e --- /dev/null +++ b/Documentation/html/_sources/documentation.rst.txt @@ -0,0 +1,32 @@ +************* +Documentation +************* + + Overview (Under construction) + + Control & Input Data + + Output Data (Under construction) + + Disaggregation of Flux Data (Under construction) + + Vertical Coordinate (Under construction) + - Methods (GAUSS, ETA, OMEGA) + - CONVERT + + Auto Generated Documentation + - Python + - Fortran (Under construction) + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Documentation/overview + Documentation/input + Documentation/output + Documentation/disagg + Documentation/vertco + Documentation/api + diff --git a/Documentation/html/_sources/ecmwf_data.rst.txt b/Documentation/html/_sources/ecmwf_data.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..35ddb57bb0566255586d1cd9088d6d48b215dd71 --- /dev/null +++ b/Documentation/html/_sources/ecmwf_data.rst.txt @@ -0,0 +1,43 @@ +********** +ECMWF Data +********** + +.. _ECMWF: http://www.ecmwf.int +.. _Member States: https://www.ecmwf.int/en/about/who-we-are/member-states + + +The European Centre for Medium-Range Weather Forecasts (`ECMWF`_), based in Reading, UK, is an independent intergovernmental organisation supported by 34 states. It is both a research institute and a full time operational service. It produces global numerical weather predictions and some other data which is fully available to the national meteorological services in the `Member States`_, Co-operating States and the broader community. Especially, the published re-analysis datasets are made available to the public with some limits in specific datasets. + +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 ``flex_extract``. +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 ``flex_extract`` 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 ``flex_extract`` they are different in the way of providing the vertical coordinate. + +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 ``flex_extract`` users. In the following sections the user can use them to get to know enough to understand how ``flex_extract`` is best used and to select the parameters of the ``CONTROL`` files. + + +:doc:`Ecmwf/access` + Description of available access methods to the ECMWF data. + +:doc:`Ecmwf/msdata` + Information about available data and parameters for member state users which can be retrieved with ``flex_extract`` + +:doc:`Ecmwf/pubdata` + Information about available data and parameters for the public datasets which can be retrieved with ``flex_extract`` + +:doc:`Ecmwf/hintsecmwf` + Collection of hints to best find information to define the dataset for retrievement and + to define the ``CONTROL`` files. + +:doc:`Ecmwf/ec-links` + Link collection for additional and useful information as well as references to specific dataset publications. + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Ecmwf/access + Ecmwf/msdata + Ecmwf/pubdata + Ecmwf/hintsecmwf + Ecmwf/ec-links + diff --git a/Documentation/html/_sources/evaluation.rst.txt b/Documentation/html/_sources/evaluation.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..a0d4d2a6aa7d8516b4420f448a168efcbf537dfc --- /dev/null +++ b/Documentation/html/_sources/evaluation.rst.txt @@ -0,0 +1,47 @@ +Evaluation +========== + + UNDER CONSTRUCTION + + + + + + +.. Tests + - unit tests + - table with all files and their functions and which already have unit tests + - regression tests + - performance + - test runs with control files + + Metriken + - list all of them + + + Coverage + - test coverage?! + - documentation coverage + + Static Analysis + - pylint + - pyreverse + - radon + + Performance analysis: + - Whole software + - Disaggregation + - Convert2 + - prepare_flexpart + - Andere komponenten + + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Evaluation/staticcode + Evaluation/testcases + Evaluation/metrics + diff --git a/Documentation/html/_sources/index.rst.txt b/Documentation/html/_sources/index.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..30308dd714489b7890e2f28a3e04fe0d3104a2b9 --- /dev/null +++ b/Documentation/html/_sources/index.rst.txt @@ -0,0 +1,152 @@ +.. flex_extract documentation master file, created by + sphinx-quickstart on Wed Oct 17 18:39:05 2018. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +================================================= +Welcome to ``flex_extract``'s user documentation! +================================================= + +``Flex_extract`` 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 FLEXTRA/FLEXPART Atmospheric Transport Modelling system. + +.. raw:: html + + <table style="width:100%;"> + <tr> + <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/install_icon.png"> + </div> + <h2><a href="installation.html">Installation</a></h2> + <ul> + <li><a href="installation.html#ref-requirements">Environment requirements</a></li> + <li><a href="installation.html#ref-download">Download flex_extract</a></li> + <li><a href="installation.html#ref-install-fe">Install flex_extract</a></li> + </ul> + </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=""> + </div> + <h2><a href="ecmwf_data.html">ECMWF data</a></h2> + <ul> + <li><a href="ecmwf_data.html">Overview</a></li> + <li><a href="Ecmwf/access.html">Access Modes</a></li> + <li><a href="Ecmwf/ec-links.html">Link Collection</a></li> + </ul> + </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/prog_icon.png"> + </div> + <h2><a href="documentation.html">Documentation</a></h2> + <ul> + <li><a href="Documentation/overview.html">Overview</a></li> + <li><a href="Documentation/input.html">Control & Input Data</a></li> + <li><a href="Documentation/output.html">Output Data</a></li> + </ul> + </td> + </tr> + <tr> + <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"> + </div> + <h2><a href="quick_start.html">Quick Start</a></h2> + <ul> + <li><a href="quick_start.html#job-preparation">Job preparation</a></li> + <li><a href="quick_start.html#selection-and-adjustment-of-control-files">Handling CONTROL files</a></li> + <li><a href="quick_start.html#hints-for-definition-of-some-parameter-combinations">Hints on parameter combinations</a></li> + </ul> + </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=""> + </div> + <h2><a href="evaluation.html">Evaluation</a></h2> + <ul> + <li><a href="Evaluation/staticcode.html">Code</a></li> + <li><a href="Evaluation/testcases.html">Functionality</a></li> + <li><a href="Evaluation/metrics.html">Regression</a></li> + </ul> + </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"> + </div> + <h2><a href="dev_guide.html">Developer</a></h2> + <ul> + <li><a href="Developers/gen_docu.html">Update Documentation</a></li> + <li><a href=""></a><Placeholder></li> + <li><a href=""></a><Placeholder></li> + </ul> + </td> + </tr> + </table> + <table style="width:100%;"> + <tr> + <td style="width:15%"> + </td> + <td style="width:30%;height:150px;"> + <div style="width:100%;height:60px;margin-left:10%;position:relative;"> + <img style="position:absolute;height:90%;vertical-align:bottom;" src="_static/change_icon.png"> + </div> + <h2><a href="changelog.html">Changelog</a></h2> + <ul> + <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;"> + <div style="width:100%;height:60px;margin-left:10%;position:relative;"> + <img style="position:absolute;height:100%;vertical-align:bottom;" src="_static/help_icon.png"> + </div> + <h2><a href="support.html">Support</a></h2> + <ul> + <li><a href="support.html#ref-ticket-system">Ticket system</a></li> + <li><a href="support.html#ref-mailing-list">Mailing list</a></li> + <li><a href="Support/known_bugs_issues.html">Known bugs or issues</a></li> + <li><a href="Support/faq.html">FAQ</a></li> + </ul> + </td> + <td style="width:10%"> + </td> + </tr> + </table> + <p></p> + +.. note:: + + .. figure:: _static/cc-by-40.png + :width: 100px + + This work is licensed under the Creative Commons Attribution 4.0 + International License. To view a copy of this license, visit + http://creativecommons.org/licenses/by/4.0/ or send a letter to + Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. + +.. toctree:: + :maxdepth: 4 + :caption: Table of Contents: + + installation + quick_start + ecmwf_data + documentation + evaluation + dev_guide + changelog + support + Support/faq + authors + + +.. Indices and tables +.. ================== + +.. * :ref:`genindex` +.. * :ref:`modindex` +.. * :ref:`search` + diff --git a/Documentation/html/_sources/installation.rst.txt b/Documentation/html/_sources/installation.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..a65057f9347f1bf3ae34740210df1295ce47f70b --- /dev/null +++ b/Documentation/html/_sources/installation.rst.txt @@ -0,0 +1,263 @@ +************ +Installation +************ + +.. role:: underline + :class: underline + +.. toctree:: + :hidden: + :maxdepth: 2 + + +.. _Python 3: https://docs.python.org/3/ +.. _Python3: https://www.python.org/downloads/ +.. _Anaconda Python3: https://www.anaconda.com/distribution/#download-section + +.. _numpy: http://www.numpy.org/ +.. _ecmwf-api-client: https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home +.. _cdsapi: https://cds.climate.copernicus.eu/api-how-to +.. _genshi: https://genshi.edgewall.org/ +.. _eccodes for python: https://packages.debian.org/sid/python3-eccodes +.. _eccodes for conda: https://anaconda.org/conda-forge/eccodes +.. _gfortran: https://gcc.gnu.org/wiki/GFortran +.. _fftw3: http://www.fftw.org +.. _eccodes: https://software.ecmwf.int/wiki/display/ECC +.. _emoslib: https://software.ecmwf.int/wiki/display/EMOS/Emoslib +.. _member state: https://www.ecmwf.int/en/about/who-we-are/member-states +.. _registration form: https://apps.ecmwf.int/registration/ +.. _CDS API registration: https://cds.climate.copernicus.eu/user/register +.. _ECMWF ectrans site: https://confluence.ecmwf.int/display/ECAC/Unattended+file+transfer+-+ectrans +.. _ECaccess Presentation: https://confluence.ecmwf.int/download/attachments/45759146/ECaccess.pdf +.. _ECMWF's instructions on gateway server: https://confluence.ecmwf.int/display/ECAC/ECaccess+Home +.. _Computing Representative: https://www.ecmwf.int/en/about/contact-us/computing-representatives +.. _MARS access: https://confluence.ecmwf.int//display/WEBAPI/Access+MARS + +.. _download section: https://www.flexpart.eu/downloads + + + +The ``flex_extract`` 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. + +At first, go to the `user group <Ecmwf/access.html>`_ section and decide which group you belong to and follow the instructions at :ref:`ref-registration` 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 :doc:`Documentation/Overview/app_modes`: + +- Remote (member-state users only) :ref:`[installation]<ref-remote-mode>` +- Gateway (member-state users only) :ref:`[installation]<ref-gateway-mode>` +- Local, member-state user :ref:`[installation]<ref-local-mode>` +- Local, public user :ref:`[installation]<ref-local-mode>` + +Please follow the link :doc:`Documentation/Overview/app_modes` to get a description of the modes. + +.. note:: + + If you encounter any problems in the installation process, you can ask for :doc:`support`. + + + + + +.. _ref-registration: + +Registration at ECMWF +===================== + +The registration depends on the :doc:`Documentation/Overview/app_modes` 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. + ++--------------+------------------------------------+--------------+ +| | Member-state user | Public user | +| +---------+----------+---------------+--------------+ +| Data sets |Remote |Gateway |Local | Local | ++--------------+---------+----------+---------------+--------------+ +| Operational | 1 | 1 | 1,2 | - | ++--------------+---------+----------+---------------+--------------+ +| ERA-Interim | 1 | 1 | 1,2 | 2 | ++--------------+---------+----------+---------------+--------------+ +| CERA-20C | 1 | 1 | 1,2 | 2 | ++--------------+---------+----------+---------------+--------------+ +| ERA5 | 1 | 1 | 3 | - | ++--------------+---------+----------+---------------+--------------+ + + + +Registration options: + + 1.) Access through a member-state user account granted by the `Computing Representative`_. The credentials have to be provided during installation. + + 2.) Access through the ECMWF Web API. Need to sign in at `ECMWF Web API <https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home>`_ and configure the ECMWF key as described. Member-state users can sign in with their credentials from the `Computing Representative`_ and public users have to fill out the `registration form`_ to get an account. + + 3.) Access through the `CDS API <https://cds.climate.copernicus.eu/api-how-to>`_. Extra registration for member-state users is required at `Copernicus Climate Data Store <https://cds.climate.copernicus.eu/user/register>`_ including the configurations of the CDS key as described. This mode is currently not available for public users. See the note at `user group <Ecmwf/access.html>`_ for information. + + + +.. _ref-licence: + +Licence agreement for public datasets +===================================== + +Each ECMWF public dataset has its own licence which has to be accepted, regardless of the user group. + +For the *ERA-Interim* and *CERA-20C* datasets this can be done at the ECMWF website `Available ECMWF Public Datasets <https://confluence.ecmwf.int/display/WEBAPI/Available+ECMWF+Public+Datasets>`_. Log in and follow the licence links on the right side for each dataset and accept it. + +For the *ERA5* dataset this has to be done at the `Climate Data Store (CDS) website <https://cds.climate.copernicus.eu/cdsapp#!/search?type=dataset>`_. Log in and select, on the left panel, product type "Reanalysis" for finding *ERA5* datasets. Then follow any link with *ERA5* to the full dataset record, click on tab "Download data" and scroll down. There is a section "Terms of use" where you have to click the :underline:`Accept terms` button. + + + + + +.. _ref-download: + +Download ``flex_extract`` +========================= + +There are two options to download ``flex_extract``: + +tar ball + You can download a tar ball with the latest release from the `flex_extract page <https://www.flexpart.eu/wiki/FpInputMetEcmwf>`_ from our ``FLEXPART`` community website and then untar the file. + + .. code-block:: bash + + tar -xvf <flex_extract_vX.X.tar> + +git repo + Alternatively, if you have ``git`` 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. + + .. code-block:: bash + + $ git clone --single-branch --branch master https://www.flexpart.eu/gitmob/flexpart + + + + + +.. _ref-requirements: + +Dependencies +============ + +The software required for running ``flex_extract`` depends on the :doc:`Documentation/Overview/app_modes` and therefore is described in the respective specific installation sections. + +Generally speaking, ``flex_extract`` requires `Python 3`_ and Fortran together with certain modules / libraries. +We tested ``flex_extract`` with the python3 package from the the GNU/Linux distribution and Anaconda Python. The required python3 modules should prefarably be installed as distribution packages, or alternatively using Python's own package manager ``pip`` (this may mess up some aspects of your python installation, especially if you use ``pip`` as root. Think about using virtual environments.). + +Before installing the system packages check the availability with ``dpkg -s <package-name> | grep Status`` or ``rpm -q <package_name>``, depending on your system. For example: + +.. code-block:: sh + + $ dpkg -s libeccodes-dev | grep Status + # or + $ rpm -q libeccodes-dev + + + + + + +.. _ref-install-fe: + +Installation of ``flex_extract`` +================================ + +The actual installation of ``flex_extract`` is done by executing a shell script called ``setup.sh``. +It defines some parameters and calls a Python script passing the parameters as command line arguments. For details, see :doc:`Documentation/Input/setup`. + +For each application mode installation section we describe the requirements for the explicit +environment and how it is installed, test if it works and how the actual ``flex_extract`` +installation has to be done. At the users local side not all software has to be present for ``flex_extract``. + + +Select one of the following modes to install: + + :doc:`Installation/remote` + + :doc:`Installation/gateway` + + :doc:`Installation/local` + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Installation/remote + Installation/gateway + Installation/local + + + + + + + + + + + + + + + + + + + + +``Flex_extract`` in combination with ``FLEXPART`` +================================================= + +Some users might wish to incorporate ``flex_extract`` directly into the ``FLEXPART`` distribution. Then the installation path has to be changed by setting the parameter `installdir` in the ``setup.sh`` file to the ``script`` directory in the ``FLEXPART`` root directoy. + + + + + + + + + +.. _ref-testinstallfe: + +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. + +For this, go from the ``flex_extract`` root directory to the ``Testing/Installation/Convert/`` directory and execute the Fortran program. + +.. note:: + Remember that you might have to log in at the ECMWF server if you used the installation for the **remote** or **gateway** mode. There you find the ``flex_extract`` root directory in your ``$HOME`` directory. + +.. code-block:: bash + + cd Testing/Installation/Convert + # execute the Fortran progam without arguments + ../../../Source/Fortran/CONVERT2 + +The installation was successfull if you obtain on standard output: + +.. code-block:: bash + + 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: + +.. code-block:: bash + + $ cd ../../../ + + + +Full test +--------- + + see :doc:`quick_start` + + diff --git a/Documentation/html/_sources/quick_start.rst.txt b/Documentation/html/_sources/quick_start.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..a34faa12ec79b748418c485b5fc577611551b3b8 --- /dev/null +++ b/Documentation/html/_sources/quick_start.rst.txt @@ -0,0 +1,500 @@ +*********** +Quick Start +*********** + +``Flex_extract`` by itself is a command-line tool. With version 7.1 an upstream shell script was implemented which calls ``flex_extract`` with the command-line parameters. + +To submit a job with ``flex_extract`` change the working directory to the ``Run`` directory which is placed directly under the ``flex_extract_vX.X`` root directory (``X.X`` is the version number): + +.. code-block:: bash + + cd <path-to-flex_extract_vX.X>/Run + +Within this directory you can find everything you need to modify and run ``flex_extract``. The following tree shows a shortened list of directories and important files. The ``*`` serves as a wildcard. The brackets ``[]`` means that the file appearance depends on the mode of application and night not be present. + +.. code-block:: bash + + Run + ├── Control + │ ├── CONTROL_* + ├── Jobscripts + │ ├── compilejob.ksh + │ ├── job.ksh + │ ├── [joboper.ksh] + ├── Workspace + │ ├── CERA_example + │ │ ├── CE000908* + ├── [ECMWF_ENV] + ├── run_local.sh + └── run.sh + +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. + +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. + +From version 7.1 on, the ``run.sh`` (or ``run_local.sh``) script is the main access point to ``flex_extract``. + +.. note:: + + Note that, for experienced users (or users of older versions), it is still possible to access ``flex_extract`` directly via the ``submit.py`` script which can be found in the directory ``flex_extract_vX.X/Source/Python``. + + + +Job preparation +=============== + +To actually start a job with ``flex_extract`` it is only necessary to submit the ``run.sh`` or ``run_local.sh`` script on the command-line. For the specification of dataset and the selection of the access mode it is necessary to select and modify a ``CONTROL`` file and change the parameters in the user section of the ``run`` scripts. The following sections describes the differences in the application modes and where the results will be stored. + + +Remote and gateway modes +------------------------ + +For member state users it is recommended to use the *remote* or *gateway* 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. + +Remote mode + The only difference between both modes is the users working location. In the *remote* mode you have to login to the ECMWF server and then go to the ``Run`` directory as shown above. At ECMWF servers ``flex_extract`` is installed in the ``$HOME`` directory. However, to be able to start the program you have to load the ``Python3`` environment with the module system first. + + .. code-block:: bash + + # Remote mode + ssh -X <ecuid>@ecaccess.ecmwf.int + + .. code-block:: bash + + # On ECMWF server + [<ecuid>@ecgb11 ~]$ module load python3 + [<ecuid>@ecgb11 ~]$ cd flex_extract_vX.X/Run + + +Gateway mode + For the gateway mode you have to log in on the gateway server and go to the ``Run`` directory of ``flex_extract``: + + .. code-block:: bash + + # Gateway mode + ssh <user>@<gatewayserver> + cd <path-to-flex_extract_vX.X>/Run + + +From here on the working process is the same for both modes. + +For your first submission you should use one of the example ``CONTROL`` files stored in the ``Control`` directory. We recommend to extract *CERA-20C* data since they usually guarantee quick results and are best for testing reasons. + +Therefore open the ``run.sh`` file and modify the parameter block marked in the file as shown below: + +.. code-block:: bash + + # ----------------------------------------------------------------- + # AVAILABLE COMMANDLINE ARGUMENTS TO SET + # + # THE USER HAS TO SPECIFY THESE PARAMETERS: + + QUEUE='ecgate' + START_DATE=None + END_DATE=None + DATE_CHUNK=None + JOB_CHUNK=3 + BASETIME=None + STEP=None + LEVELIST=None + AREA=None + INPUTDIR=None + OUTPUTDIR=None + PP_ID=None + JOB_TEMPLATE='job.temp' + CONTROLFILE='CONTROL_CERA' + DEBUG=0 + REQUEST=2 + PUBLIC=0 + + +This would retrieve a one day (08.09.2000) *CERA-20C* dataset with 3 hourly temporal resolution and a small 1° domain over Europe. Since the ``ectrans`` parameter is set to ``1`` the resulting output files will be transferred to the local gateway into the path stored in the destination (SEE INSTRUCTIONS FROM INSTALLATION). The parameters listed in the ``run.sh`` file would overwrite existing settings in the ``CONTROL`` file. + +To start the retrieval you only have to start the script by: + +.. code-block:: bash + + ./run.sh + +``Flex_extract`` will print some information about the job. If there is no error in the submission to the ECMWF server you will see something like this: + +.. code-block:: bash + + ---- On-demand mode! ---- + The job id is: 10627807 + You should get an email per job with subject flex.hostname.pid + FLEX_EXTRACT JOB SCRIPT IS SUBMITED! + + +Once submitted you can check the progress of the submitted job using ``ecaccess-job-list``. You should get an email after the job is finished with a detailed protocol of what was done. + +In case the job fails you will receive an email with the subject ``ERROR!`` and the job name. You can then check for information in the email or you can check on ECMWF server in the ``$SCRATCH`` directory for debugging information. + +.. code-block:: bash + + cd $SCRATCH + ls -rthl + +The last command lists the most recent logs and temporary retrieval directories (usually ``pythonXXXXX``, where XXXXX is the process id). Under ``pythonXXXXX`` a copy of the ``CONTROL`` file is stored under the name ``CONTROL``, the protocol is stored in the file ``prot`` and the temporary files as well as the resulting files are stored in a directory ``work``. The original name of the ``CONTROL`` file is stored in this new file under parameter ``controlfile``. + +.. code-block:: bash + :caption: "Example structure of ``flex_extract`` output directory on ECMWF servers." + + pythonXXXXX + ├── CONTROL + ├── prot + ├── work + │ ├── 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. + +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. + + +Local mode +---------- + +To get to know the working process and to start your first submission you could use one of the example ``CONTROL`` files stored in the ``Control`` directory as they are. For quick results and for testing reasons it is recommended to extract *CERA-20C* data. + +Open the ``run_local.sh`` file and modify the parameter block marked in the file as shown below. The differences are highlighted. + ++-----------------------------------------------+-----------------------------------------------+ +| Take this for **member-state user** | Take this for **public user** | ++-----------------------------------------------+-----------------------------------------------+ +| .. code-block:: bash | .. code-block:: bash | +| :emphasize-lines: 16,20,23 | :emphasize-lines: 16,20,23 | +| | | +| # -----------------------------------------| # -----------------------------------------| +| # AVAILABLE COMMANDLINE ARGUMENTS TO SET | # AVAILABLE COMMANDLINE ARGUMENTS TO SET | +| # | # | +| # THE USER HAS TO SPECIFY THESE PARAMETERs:| # THE USER HAS TO SPECIFY THESE PARAMETERs:| +| # | # | +| | | +| QUEUE='' | QUEUE='' | +| START_DATE=None | START_DATE=None | +| END_DATE=None | END_DATE=None | +| DATE_CHUNK=None | DATE_CHUNK=None | +| JOB_CHUNK=None | JOB_CHUNK=None | +| BASETIME=None | BASETIME=None | +| STEP=None | STEP=None | +| LEVELIST=None | LEVELIST=None | +| AREA=None | AREA=None | +| INPUTDIR='./Workspace/CERA' | INPUTDIR='./Workspace/CERApublic' | +| OUTPUTDIR=None | OUTPUTDIR=None | +| PP_ID=None | PP_ID=None | +| JOB_TEMPLATE='' | JOB_TEMPLATE='' | +| CONTROLFILE='CONTROL_CERA' | CONTROLFILE='CONTROL_CERA.public' | +| DEBUG=0 | DEBUG=0 | +| REQUEST=0 | REQUEST=0 | +| PUBLIC=0 | PUBLIC=1 | +| | | ++-----------------------------------------------+-----------------------------------------------+ + + +This would retrieve a one day (08.09.2000) *CERA-20C* dataset with 3 hourly temporal resolution and a small 1° domain over Europe. The destination location for this retrieval will be within the ``Workspace`` directory within ``Run``. This can be changed to whatever path you like. The parameters listed in ``run_local.sh`` would overwrite existing settings in the ``CONTROL`` file. + +To start the retrieval you then start the script by: + +.. code-block:: bash + + ./run_local.sh + + +While job submission on the local host is convenient and easy to monitor (on standard output), there are a few caveats with this option: + + 1. 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. + 2. 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 ``etadot`` 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. + + + + +Selection and adjustment of ``CONTROL`` files +============================================= + + +This section describes how to work with the ``CONTROL`` files. A detailed explanation of ``CONTROL`` file parameters and naming compositions can be found `here <Documentation/Input/control.html>`_. The more accurately the ``CONTROL`` file describes the retrieval needed, the fewer command-line parameters are needed to be set in the ``run`` scripts. With version ``7.1`` all ``CONTROL`` file parameters have default values. They can be found in section `CONTROL parameters <Documentation/Input/control_params.html>`_ or in the ``CONTROL.documentation`` file within the ``Control`` directory. Only those parameters which need to be changed for a dataset retrieval needs to be set in a ``CONTROL`` file! + +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: + + - **Public users** can use a web mask to check on data or list available data at this `Public datasets web interface <https://apps.ecmwf.int/datasets/>`_. + - **Member state users** can check availability of data online in the `MARS catalogue <https://apps.ecmwf.int/mars-catalogue/>`_. + +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 ``flex_extract`` to fail. The following figure gives an example how the web interface would look like: + + +.. _ref-fig-mars-catalogue-ss: + +.. 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. + + +``Flex_extract`` is specialised to retrieve a limited number of datasets, namely *ERA-Interim*, *CERA-20C*, *ERA5* and *HRES (operational data)* as well as the *ENS (operational data, 15-day forecast)*. 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 ``1`` to signal that the actual version should be used. + +The next level of differentiation would be the field type, level type and time period. ``Flex_extract`` 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 ``CONTROL`` files. You can see this in the naming of the example files: + + +.. code-block:: bash + :caption: "Current example ``CONTROL`` files distributed with ``flex_extract``. " + + CONTROL_CERA + CONTROL_CERA.global + CONTROL_CERA.public + CONTROL_EA5 + CONTROL_EA5.global + 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 + + + +The main differences and features in the datasets are listed in the table shown below: + + +.. _ref-tab-dataset-cmp: + +.. 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. + + +.. note:: + + 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 `CONTROL parameters <Documentation/Input/control_params.html>`_ or have a look at the ECMWF user documentation for `MARS keywords <https://confluence.ecmwf.int/display/UDOC/MARS+keywords>`_ + + +In the following we shortly discuss the main retrieval opportunities of the different datasets and categoize the ``CONTROL`` files. + + +Public datasets +--------------- + +The main difference in the definition of a ``CONRTOL`` file for a public dataset is the setting of the parameter ``DATASET``. This specification enables the selection of a public dataset in MARS. Otherwise the request would not find the dataset. +For the two public datasets *CERA-20C* and *ERA-Interim* an example file with the ending ``.public`` is provided and can be used straightaway. + +.. code-block:: bash + + CONTROL_CERA.public + CONTROL_EI.public + +For *CERA-20C* it seems that there are no differences in the dataset against the full dataset, while the *public ERA-Interim* 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 *public ERA-Interim*. + +.. note:: + + In general, *ERA5* is a public dataset. However, since the model levels are not yet publicly available, it is not possible to retrieve *ERA5* data to drive the ``FLEXPART`` model. As soon as this is possible it will be announced at the community website and per newsletter. + + +CERA +---- + +For this dataset it is important to keep in mind that the dataset is available for the period 09/1901 until 12/2010 and the temporal resolution is limited to 3-hourly fields. +It is also a pure ensemble data assimilation dataset and is stored under the ``enda`` stream. It has ``10`` ensemble members. The example ``CONTROL`` files will only select the first member (``number=0``). You may change this to another number or a list of numbers (e.g. ``NUMBER 0/to/10``). +Another important difference to all other datasets is the forecast starting time which is 18 UTC. Which means that the forecast in *CERA-20C* for flux fields is 12 hours long. Since the forecast extends over a single day we need to extract one day in advance and one day subsequently. This is automatically done in ``flex_extract``. + + +ERA 5 +----- + +This is the newest re-analysis dataset and has a temporal resolution of 1-hourly analysis fields. Up to date it is available until April 2019 with regular release of new months. +The original horizontal resolution is ``0.28125°`` 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 ``0.25`` for the resolution which MARS will automatically interpolate. +The forecast starting time is ``06/18 UTC`` which is important for the flux data. This should be set in the ``CONTROL`` file via the ``ACCTIME 06/18`` parameter in correspondence with ``ACCMAXSTEP 12`` and ``ACCTYPE FC``. + +.. note:: + + We know that *ERA5* also has an ensemble data assimilation system but this is not yet retrievable with ``flex_extract`` since the deaccumulation of the flux fields works differently in this stream. Ensemble retrieval for *ERA5* is a future ToDo. + + + +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. + + +.. todo:: + + @LEO: please check the complete description and functionality of the CONTROL FILEs + +Operational data +---------------- + +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 :ref:`ref-tab-dataset-cmp` 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 ``ETA`` should be set to ``1`` to save computation time. The horizontal resolution can be up to ``0.1°`` and in combination with ``137`` 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 ``JOB_CHUNK`` parameter in ``run.sh`` script) to avoid job failures due to exceeding limits. + +``CONTROL`` files for normal daily retrievals with a mix of analysis and forecast fields are listed below: + +.. code-block:: bash + + CONTROL_OD.OPER.4V.eta.global + CONTROL_OD.OPER.FC.eta.global + CONTROL_OD.OPER.FC.eta.highres + CONTROL_OD.OPER.FC.gauss.highres + +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:: + + Please see `Information about MARS retrievement <https://confluence.ecmwf.int/display/UDOC/Retrieve#Retrieve-Retrievalefficiency>`_ to get to know hints about retrieval efficiency and troubleshooting. + + + +Pure forecast + 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 *Forecast (FC)*, *Control forecast (CF)* and *Calibration/Validation forecast (CV)*. + The *CV* field type was only available 3-hourly from 2006 up to 2016. It is recommended to use the *CF* type since this is available from 1992 (3-hourly) on up to today in 1-hourly temporal resolution. *CV* and *CF* field types belong to the *Ensemble prediction system (ENFO)* 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! + + .. code-block:: bash + + CONTROL_OD.ENFO.CF.36hours + CONTROL_OD.ENFO.CV.36hours + CONTROL_OD.OPER.FC.36hours + + + +Half-day retrievals + 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 ``twiceaday`` 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 ``BASETIME`` parameter which tells MARS to extract the exact 12 hours upfront to the selected date. If the ``CONTROL`` file with ``basetime`` in the filename is used this can be done for any other date too. + + .. code-block:: bash + + CONTROL_OD.OPER.FC.eta.basetime + CONTROL_OD.OPER.FC.operational + CONTROL_OD.OPER.FC.twiceaday.1hourly + CONTROL_OD.OPER.FC.twiceaday.3hourly + + + + +Ensemble members + The retrieval of ensemble members were already mentioned in the pure forecast section and for *CERA-20C* data. + In this ``flex_extract`` version there is an additional possibility to retrieve the *Ensemble Long window Data Assimilation (ELDA)* stream from the real-time dataset. This model version has (up to May 2019) 25 ensemble members and a control run (``number 0``). 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 ``DOUBLEELDA`` and set it to ``1``. + + + .. code-block:: bash + + 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 +----------------- + +rrint + Decides if the precipitation flux data uses the old (``0``) or new (``1``) disaggregation scheme. See :doc:`Documentation/disagg` for explanaition. +cwc + Decides if the total cloud water content will be retrieved (set to ``1``) in addition. This is the sum of cloud liquid and cloud ice water content. +addpar + With this parameter an additional list of 2-dimensional, non-flux parameters can be retrieved. Use format ``param1/param2/.../paramx`` to list the parameters. Please be consistent in using either the parameter IDs or the short names. +doubleelda + Use this to double the ensemble member number by adding further disturbance to each member. +debug + If set to ``1`` all temporary files were kept at the end. Otherwise everything except the final output files will be deleted. +request + This produces an extra *csv* file ``mars_requests.csv`` where the content of each mars request of the job is stored. Useful for debugging and documentation. +mailfail + 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 ``${USER}`` to the list ( comma seperated ) or mail addresses. + + + +Hints for definition of some parameter combinations +--------------------------------------------------- + +Field types and times + 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 ``0``. 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 ``TYPE``, ``TIME`` and ``STEP`` because the temporal (hourly) resolution with the ``DTIME`` parameter will select the correct combinations. + + .. code-block:: bash + :caption: Example of a setting for the field types and temporal resolution. + + DTIME 3 + TYPE AN FC FC FC AN FC FC FC + TIME 00 00 00 00 12 12 12 12 + STEP 00 03 06 09 00 03 06 09 + + +Vertical velocity + The vertical velocity for ``FLEXPART`` 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 :doc:`Documentation/vertco` for a detailed explanation. The ``ETADIFF``, ``OMEGA`` and ``OMEGADIFF`` versions are only recommended for debugging and testing reasons. Usually it is a decision between ``GAUSS`` and ``ETA``, where for ``GAUSS`` 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 ``ETA`` the latitude/longitude fields of horizontal wind fields and eta-coordinate are to be retrieved. It is recommended to use ``ETA`` where possible due to a reduced computation time. + + .. code-block:: bash + :caption: Example setting for the vertical coordinate retrieval. + + GAUSS 0 + ETA 1 + ETADIFF 0 + DPDETA 1 + OMEGA 0 + OMEGADIFF 0 + + +Grid resolution and domain + The grid and domain selection depends on each other. The grid can be defined in the format of normal degrees (e.g. ``1.``) or as in older versions by 1/1000. degrees (e.g. ``1000`` for ``1°``). + 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 ``RESOL``. For information about how to select an appropriate value you can read the explanation of the MARS keyword `here <https://confluence.ecmwf.int/display/UDOC/Post-processing+keywords#Post-processingkeywords-resol>`_ and in `this table <https://confluence.ecmwf.int/display/UDOC/Retrieve#Retrieve-Truncationbeforeinterpolation>`_. + + .. code-block:: bash + :caption: Example setting for a northern hemisphere domain with a grid of ``0.25°``. + + GRID 0.25 + RESOL 799 + SMOOTH 0 + UPPER 90. + LOWER 0. + LEFT -179.75 + RIGHT 180. + + +Flux data + 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 ``TYPE``, ``TIME`` and ``STEP`` any longer. Select a forecast field type ``ACCTYPE``, the forecast starting time ``ACCTIME`` and the maximum forecast step ``ACCMAXSTEP``. The ``DTIME`` parameter defines the temporal resolution for the whole period. + + .. code-block:: bash + :caption: Example setting for the definition of flux fields. + + DTIME 3 + ACCTYPE FC + ACCTIME 00/12 + ACCMAXSTEP 36 + + + +.. toctree:: + :hidden: + :maxdepth: 2 + +.. user_guide/oper_modes +.. user_guide/ecmwf +.. user_guide/how_to +.. user_guide/control_templates + diff --git a/Documentation/html/_sources/support.rst.txt b/Documentation/html/_sources/support.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..1bfcc5e5b6e1482401bcbe267a86a96d54ed74b5 --- /dev/null +++ b/Documentation/html/_sources/support.rst.txt @@ -0,0 +1,65 @@ +Support +======= +.. toctree:: + :hidden: + :maxdepth: 2 + + +.. contents:: + :local: + :depth: 2 + +.. _ref-ticket-system: + +Ticket system +------------- +.. _ticket system: https://www.flexpart.eu/report/1 + +The community website http://flexpart.eu contains a +`ticket system`_ which can be used to report any issue or a proposition for a new feature. + +The tickets can be viewed by anyone, to create a ticket a registration is necessary. Since the automatic registration is unavailable, please send an email to the ``flexpart.eu[at]zamg.ac.at`` and you will receive your credentials (with some delay). + + +.. _ref-mailing-list: + +Mailing list +------------ + +The mailing list is mainly for the ``FLEXPART`` users to ask questions or share experiences regarding the whole ``FLEXPART`` process with the community. This can be a lot faster than asking only the developers for help. Since ``flex_extract`` is a preprocessor to ``FLEXPART`` this is the right place to ask for help. + +Additionally, from time to time, there will be announcements for all FLEXPART users, such as new release versions of ``FLEXPART`` or ``flex_extract``. + +Just write a mail to: ``flexpart[at]lists.univie.ac.at`` + + +.. _ref-reporting: + +Reporting an issue +------------------ + +To properly report a problem or bug, please provide as much information as possible. +This includes: + +* the flex_extract version +* a flex_extract log file (output of submit.py script) +* the CONTROL file +* the commandline arguments or run(_local).sh settings and +* a description of the environment you used (Unix/Linux version, library version, application mode, etc.). + + +.. _ref-known-issues: + +Known bugs and issues +--------------------- +A collection of reported and detected bugs and issues with solutions can be found :doc:`here <Support/known_bugs_issues>`. + + +.. _ref-faq: + +FAQ +--- +A list of frequently asked questions and hints for the application of ``flex_extract`` can be found :doc:`here <Support/faq>`. + + + diff --git a/Documentation/html/_sources/todo.rst.txt b/Documentation/html/_sources/todo.rst.txt new file mode 100644 index 0000000000000000000000000000000000000000..902e69e5f3b60fdd23fb121dc013416d5b0c212c --- /dev/null +++ b/Documentation/html/_sources/todo.rst.txt @@ -0,0 +1,8 @@ +===== +ToDos +===== + + + + +.. todolist:: diff --git a/Documentation/html/_static/Diagramm_MarsAccess2.png b/Documentation/html/_static/Diagramm_MarsAccess2.png new file mode 100644 index 0000000000000000000000000000000000000000..2bc1a47cdba063d3dcf7ff0fedc85339f7df3172 Binary files /dev/null and b/Documentation/html/_static/Diagramm_MarsAccess2.png differ diff --git a/Documentation/html/_static/ajax-loader.gif b/Documentation/html/_static/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..61faf8cab23993bd3e1560bff0668bd628642330 Binary files /dev/null and b/Documentation/html/_static/ajax-loader.gif differ diff --git a/Documentation/html/_static/api_icon.png b/Documentation/html/_static/api_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7135861192f6b4388fe6e165c91bfdc55080b779 Binary files /dev/null and b/Documentation/html/_static/api_icon.png differ diff --git a/Documentation/html/_static/basic.css b/Documentation/html/_static/basic.css new file mode 100644 index 0000000000000000000000000000000000000000..0807176ec0cb13c1214ddacecadfbfde5ecd7514 --- /dev/null +++ b/Documentation/html/_static/basic.css @@ -0,0 +1,676 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist td { + vertical-align: top; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/Documentation/html/_static/cc-by-40.png b/Documentation/html/_static/cc-by-40.png new file mode 100644 index 0000000000000000000000000000000000000000..c8473a24786ab016d9c3e717a380910f7cbb0fff Binary files /dev/null and b/Documentation/html/_static/cc-by-40.png differ diff --git a/Documentation/html/_static/change_icon.png b/Documentation/html/_static/change_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..03324970ad78e6ffd9abe35d2d003167a1a869af Binary files /dev/null and b/Documentation/html/_static/change_icon.png differ diff --git a/Documentation/html/_static/check_icon.png b/Documentation/html/_static/check_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1b7a4109f8806dae1aa25644694cb4c697bed070 Binary files /dev/null and b/Documentation/html/_static/check_icon.png differ diff --git a/Documentation/html/_static/comment-bright.png b/Documentation/html/_static/comment-bright.png new file mode 100644 index 0000000000000000000000000000000000000000..15e27edb12ac25701ac0ac21b97b52bb4e45415e Binary files /dev/null and b/Documentation/html/_static/comment-bright.png differ diff --git a/Documentation/html/_static/comment-close.png b/Documentation/html/_static/comment-close.png new file mode 100644 index 0000000000000000000000000000000000000000..4d91bcf57de866a901a89a2a68c0f36af1114841 Binary files /dev/null and b/Documentation/html/_static/comment-close.png differ diff --git a/Documentation/html/_static/comment.png b/Documentation/html/_static/comment.png new file mode 100644 index 0000000000000000000000000000000000000000..dfbc0cbd512bdeefcb1984c99d8e577efb77f006 Binary files /dev/null and b/Documentation/html/_static/comment.png differ diff --git a/Documentation/html/_static/css/badge_only.css b/Documentation/html/_static/css/badge_only.css new file mode 100644 index 0000000000000000000000000000000000000000..3c33cef5450e1a6e12a4e33928cf2bdcdc4db2e0 --- /dev/null +++ b/Documentation/html/_static/css/badge_only.css @@ -0,0 +1 @@ +.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../fonts/fontawesome-webfont.eot");src:url("../fonts/fontawesome-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff") format("woff"),url("../fonts/fontawesome-webfont.ttf") format("truetype"),url("../fonts/fontawesome-webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} diff --git a/Documentation/html/_static/css/custom.css b/Documentation/html/_static/css/custom.css new file mode 100644 index 0000000000000000000000000000000000000000..54870c379e4ef8652dd3cd7f3522d75a242ce0e9 --- /dev/null +++ b/Documentation/html/_static/css/custom.css @@ -0,0 +1,7 @@ +.underline { + text-decoration: underline; +} + +.wy-nav-content { + max-width: 1000px !important; +} diff --git a/Documentation/html/_static/css/theme.css b/Documentation/html/_static/css/theme.css new file mode 100644 index 0000000000000000000000000000000000000000..aed8cef0668288648615f650e93e648e00e8c4d0 --- /dev/null +++ b/Documentation/html/_static/css/theme.css @@ -0,0 +1,6 @@ +/* sphinx_rtd_theme version 0.4.3 | MIT license */ +/* Built 20190212 16:02 */ +*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,.rst-content code,kbd,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,.rst-content .toctree-wrapper p.caption,h3{orphans:3;widows:3}h2,.rst-content .toctree-wrapper p.caption,h3{page-break-after:avoid}}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content .code-block-caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.wy-menu-vertical li span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.rst-content .fa-pull-left.admonition-title,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content dl dt .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.rst-content code.download span.fa-pull-left:first-child,.fa-pull-left.icon{margin-right:.3em}.fa.fa-pull-right,.wy-menu-vertical li span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.rst-content .fa-pull-right.admonition-title,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content dl dt .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.rst-content code.download span.fa-pull-right:first-child,.fa-pull-right.icon{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.wy-menu-vertical li span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content .code-block-caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.rst-content code.download span.pull-left:first-child,.pull-left.icon{margin-right:.3em}.fa.pull-right,.wy-menu-vertical li span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content .code-block-caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.rst-content code.download span.pull-right:first-child,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content .code-block-caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:"FontAwesome";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .rst-content p.caption .headerlink,.rst-content p.caption a .headerlink,a .rst-content table>caption .headerlink,.rst-content table>caption a .headerlink,a .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption a .headerlink,a .rst-content tt.download span:first-child,.rst-content tt.download a span:first-child,a .rst-content code.download span:first-child,.rst-content code.download a span:first-child,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .btn span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.btn .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .rst-content p.caption .headerlink,.rst-content p.caption .btn .headerlink,.btn .rst-content table>caption .headerlink,.rst-content table>caption .btn .headerlink,.btn .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption .btn .headerlink,.btn .rst-content tt.download span:first-child,.rst-content tt.download .btn span:first-child,.btn .rst-content code.download span:first-child,.rst-content code.download .btn span:first-child,.btn .icon,.nav .fa,.nav .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand,.nav .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .rst-content p.caption .headerlink,.rst-content p.caption .nav .headerlink,.nav .rst-content table>caption .headerlink,.rst-content table>caption .nav .headerlink,.nav .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption .nav .headerlink,.nav .rst-content tt.download span:first-child,.rst-content tt.download .nav span:first-child,.nav .rst-content code.download span:first-child,.rst-content code.download .nav span:first-child,.nav .icon{display:inline}.btn .fa.fa-large,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.btn .rst-content .code-block-caption .fa-large.headerlink,.rst-content .code-block-caption .btn .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .btn span.fa-large:first-child,.btn .rst-content code.download span.fa-large:first-child,.rst-content code.download .btn span.fa-large:first-child,.btn .fa-large.icon,.nav .fa.fa-large,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.nav .rst-content .code-block-caption .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.nav .rst-content code.download span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.nav .fa-large.icon{line-height:.9em}.btn .fa.fa-spin,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.btn .rst-content .code-block-caption .fa-spin.headerlink,.rst-content .code-block-caption .btn .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .btn span.fa-spin:first-child,.btn .rst-content code.download span.fa-spin:first-child,.rst-content code.download .btn span.fa-spin:first-child,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.nav .rst-content .code-block-caption .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.nav .rst-content code.download span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.wy-menu-vertical li span.btn.toctree-expand:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.rst-content code.download span.btn:first-child:before,.btn.icon:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.rst-content code.download span.btn:first-child:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.rst-content tt.download .btn-mini span:first-child:before,.btn-mini .rst-content code.download span:first-child:before,.rst-content code.download .btn-mini span:first-child:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6ab0de;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.admonition{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo,.rst-content .wy-alert-warning.admonition{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title,.rst-content .wy-alert-warning.admonition .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.admonition{background:#e7f2fa}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition .admonition-title{background:#6ab0de}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.admonition{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.admonition{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a{color:#2980B9}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#2980B9}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980B9 !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#2980B9;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#9B59B6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980B9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type="search"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980B9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 .3125em 0;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type="text"],.wy-control-group .wy-form-full input[type="password"],.wy-control-group .wy-form-full input[type="email"],.wy-control-group .wy-form-full input[type="url"],.wy-control-group .wy-form-full input[type="date"],.wy-control-group .wy-form-full input[type="month"],.wy-control-group .wy-form-full input[type="time"],.wy-control-group .wy-form-full input[type="datetime"],.wy-control-group .wy-form-full input[type="datetime-local"],.wy-control-group .wy-form-full input[type="week"],.wy-control-group .wy-form-full input[type="number"],.wy-control-group .wy-form-full input[type="search"],.wy-control-group .wy-form-full input[type="tel"],.wy-control-group .wy-form-full input[type="color"],.wy-control-group .wy-form-halves input[type="text"],.wy-control-group .wy-form-halves input[type="password"],.wy-control-group .wy-form-halves input[type="email"],.wy-control-group .wy-form-halves input[type="url"],.wy-control-group .wy-form-halves input[type="date"],.wy-control-group .wy-form-halves input[type="month"],.wy-control-group .wy-form-halves input[type="time"],.wy-control-group .wy-form-halves input[type="datetime"],.wy-control-group .wy-form-halves input[type="datetime-local"],.wy-control-group .wy-form-halves input[type="week"],.wy-control-group .wy-form-halves input[type="number"],.wy-control-group .wy-form-halves input[type="search"],.wy-control-group .wy-form-halves input[type="tel"],.wy-control-group .wy-form-halves input[type="color"],.wy-control-group .wy-form-thirds input[type="text"],.wy-control-group .wy-form-thirds input[type="password"],.wy-control-group .wy-form-thirds input[type="email"],.wy-control-group .wy-form-thirds input[type="url"],.wy-control-group .wy-form-thirds input[type="date"],.wy-control-group .wy-form-thirds input[type="month"],.wy-control-group .wy-form-thirds input[type="time"],.wy-control-group .wy-form-thirds input[type="datetime"],.wy-control-group .wy-form-thirds input[type="datetime-local"],.wy-control-group .wy-form-thirds input[type="week"],.wy-control-group .wy-form-thirds input[type="number"],.wy-control-group .wy-form-thirds input[type="search"],.wy-control-group .wy-form-thirds input[type="tel"],.wy-control-group .wy-form-thirds input[type="color"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.3576515979%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.3576515979%;width:48.821174201%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.3576515979%;width:31.7615656014%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type="text"],.wy-control-group.fluid-input input[type="password"],.wy-control-group.fluid-input input[type="email"],.wy-control-group.fluid-input input[type="url"],.wy-control-group.fluid-input input[type="date"],.wy-control-group.fluid-input input[type="month"],.wy-control-group.fluid-input input[type="time"],.wy-control-group.fluid-input input[type="datetime"],.wy-control-group.fluid-input input[type="datetime-local"],.wy-control-group.fluid-input input[type="week"],.wy-control-group.fluid-input input[type="number"],.wy-control-group.fluid-input input[type="search"],.wy-control-group.fluid-input input[type="tel"],.wy-control-group.fluid-input input[type="color"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;*overflow:visible}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type="datetime-local"]{padding:.34375em .625em}input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{outline:0;outline:thin dotted \9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type="file"]:focus:invalid:focus,input[type="radio"]:focus:invalid:focus,input[type="checkbox"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type="radio"][disabled],input[type="checkbox"][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{position:absolute;content:"";display:block;left:0;top:0;width:36px;height:12px;border-radius:4px;background:#ccc;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{position:absolute;content:"";display:block;width:18px;height:18px;border-radius:4px;background:#999;left:-3px;top:-3px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27AE60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type="text"],.wy-control-group.wy-control-group-error input[type="password"],.wy-control-group.wy-control-group-error input[type="email"],.wy-control-group.wy-control-group-error input[type="url"],.wy-control-group.wy-control-group-error input[type="date"],.wy-control-group.wy-control-group-error input[type="month"],.wy-control-group.wy-control-group-error input[type="time"],.wy-control-group.wy-control-group-error input[type="datetime"],.wy-control-group.wy-control-group-error input[type="datetime-local"],.wy-control-group.wy-control-group-error input[type="week"],.wy-control-group.wy-control-group-error input[type="number"],.wy-control-group.wy-control-group-error input[type="search"],.wy-control-group.wy-control-group-error input[type="tel"],.wy-control-group.wy-control-group-error input[type="color"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980B9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type="submit"]{margin:.7em 0 0}.wy-form input[type="text"],.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:.3em;display:block}.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980B9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9B59B6}html{height:100%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#2980B9 !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,.rst-content .toctree-wrapper p.caption,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2,.rst-content .toctree-wrapper p.caption{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt,.rst-content code{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:before,.wy-breadcrumbs:after{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs li code,.wy-breadcrumbs li .rst-content tt,.rst-content .wy-breadcrumbs li tt{padding:5px;border:none;background:none}.wy-breadcrumbs li code.literal,.wy-breadcrumbs li .rst-content tt.literal,.rst-content .wy-breadcrumbs li tt.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#3a7ca8;height:32px;display:inline-block;line-height:32px;padding:0 1.618em;margin:12px 0 0 0;display:block;font-weight:bold;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li code,.wy-menu-vertical li .rst-content tt,.rst-content .wy-menu-vertical li tt{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.on a:hover span.toctree-expand,.wy-menu-vertical li.current>a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a{color:#404040}.wy-menu-vertical li.toctree-l1.current li.toctree-l2>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>ul{display:none}.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current>ul{display:block}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{display:block;background:#c9c9c9;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3{font-size:.9em}.wy-menu-vertical li.toctree-l3.current>a{background:#bdbdbd;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{display:block;background:#bdbdbd;padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980B9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980B9;text-align:center;padding:.809em;display:block;color:#fcfcfc;margin-bottom:.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em auto;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-side-nav-search>a img.logo,.wy-side-nav-search .wy-dropdown>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search>a.icon img.logo,.wy-side-nav-search .wy-dropdown>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:normal;color:rgba(255,255,255,0.3)}.wy-nav .wy-menu-vertical header{color:#2980B9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980B9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980B9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:gray}footer p{margin-bottom:12px}footer span.commit code,footer span.commit .rst-content tt,.rst-content footer span.commit tt{padding:0px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:1em;background:none;border:none;color:gray}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{width:100%}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:before,.rst-breadcrumbs-buttons:after{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-side-scroll{width:auto}.wy-side-nav-search{width:auto}.wy-menu.wy-menu-vertical{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1100px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0px}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;display:block;overflow:auto}.rst-content pre.literal-block,.rst-content div[class^='highlight']{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px 0}.rst-content pre.literal-block div[class^='highlight'],.rst-content div[class^='highlight'] div[class^='highlight']{padding:0px;border:none;margin:0}.rst-content div[class^='highlight'] td.code{width:100%}.rst-content .linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;display:block;overflow:auto}.rst-content div[class^='highlight'] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content pre.literal-block,.rst-content div[class^='highlight'] pre,.rst-content .linenodiv pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:12px;line-height:1.4}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^='highlight'],.rst-content div[class^='highlight'] pre{white-space:pre-wrap}}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last,.rst-content .admonition .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .section ol p:last-child,.rst-content .section ul p:last-child{margin-bottom:24px}.rst-content .line-block{margin-left:0px;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink{visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after,.rst-content .code-block-caption .headerlink:after{content:"";font-family:FontAwesome}.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content .toctree-wrapper p.caption:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after,.rst-content .code-block-caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:baseline;position:relative;top:-0.4em;line-height:0;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:gray}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.docutils.citation tt,.rst-content table.docutils.citation code,.rst-content table.docutils.footnote tt,.rst-content table.docutils.footnote code{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}.rst-content table.docutils td .last,.rst-content table.docutils td .last :last-child{margin-bottom:0}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content tt,.rst-content tt,.rst-content code{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;padding:2px 5px}.rst-content tt big,.rst-content tt em,.rst-content tt big,.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100% !important;line-height:normal}.rst-content tt.literal,.rst-content tt.literal,.rst-content code.literal{color:#E74C3C}.rst-content tt.xref,a .rst-content tt,.rst-content tt.xref,.rst-content code.xref,a .rst-content tt,a .rst-content code{font-weight:bold;color:#404040}.rst-content pre,.rst-content kbd,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace}.rst-content a tt,.rst-content a tt,.rst-content a code{color:#2980B9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold;margin-bottom:12px}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980B9;border-top:solid 3px #6ab0de;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6ab0de}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:#555}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) code{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}.rst-content tt.download,.rst-content code.download{background:inherit;padding:inherit;font-weight:normal;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content tt.download span:first-child,.rst-content code.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-regular.eot");src:url("../fonts/Lato/lato-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-regular.woff2") format("woff2"),url("../fonts/Lato/lato-regular.woff") format("woff"),url("../fonts/Lato/lato-regular.ttf") format("truetype");font-weight:400;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bold.eot");src:url("../fonts/Lato/lato-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bold.woff2") format("woff2"),url("../fonts/Lato/lato-bold.woff") format("woff"),url("../fonts/Lato/lato-bold.ttf") format("truetype");font-weight:700;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bolditalic.eot");src:url("../fonts/Lato/lato-bolditalic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bolditalic.woff2") format("woff2"),url("../fonts/Lato/lato-bolditalic.woff") format("woff"),url("../fonts/Lato/lato-bolditalic.ttf") format("truetype");font-weight:700;font-style:italic}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-italic.eot");src:url("../fonts/Lato/lato-italic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-italic.woff2") format("woff2"),url("../fonts/Lato/lato-italic.woff") format("woff"),url("../fonts/Lato/lato-italic.ttf") format("truetype");font-weight:400;font-style:italic}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:url("../fonts/RobotoSlab/roboto-slab.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.ttf") format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.ttf") format("truetype")} diff --git a/Documentation/html/_static/css/theme_overrides.css b/Documentation/html/_static/css/theme_overrides.css new file mode 100644 index 0000000000000000000000000000000000000000..b13709631b14fd1341056106535df4b9bb13eb54 --- /dev/null +++ b/Documentation/html/_static/css/theme_overrides.css @@ -0,0 +1,11 @@ +/* override table width restrictions */ +@media screen and (min-width: 767px) { + + .wy-table-responsive table td { + /* !important prevents the common CSS stylesheets from overriding + this as on RTD they are loaded after this stylesheet */ + white-space: normal !important; + } + + +} diff --git a/Documentation/html/_static/doctools.js b/Documentation/html/_static/doctools.js new file mode 100644 index 0000000000000000000000000000000000000000..344db17ddbb7aea09b227835a7cd1c3265aeb172 --- /dev/null +++ b/Documentation/html/_static/doctools.js @@ -0,0 +1,315 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + 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; + 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}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('<a class="headerlink">\u00B6</a>'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('<a class="headerlink">\u00B6</a>'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('<p class="highlight-link"><a href="javascript:Documentation.' + + 'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/Documentation/html/_static/documentation_options.js b/Documentation/html/_static/documentation_options.js new file mode 100644 index 0000000000000000000000000000000000000000..f4672a99be06566a71efb94aaa8df76bee8c6088 --- /dev/null +++ b/Documentation/html/_static/documentation_options.js @@ -0,0 +1,10 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '7.1 alpha', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, +}; \ No newline at end of file diff --git a/Documentation/html/_static/down-pressed.png b/Documentation/html/_static/down-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..5756c8cad8854722893dc70b9eb4bb0400343a39 Binary files /dev/null and b/Documentation/html/_static/down-pressed.png differ diff --git a/Documentation/html/_static/down.png b/Documentation/html/_static/down.png new file mode 100644 index 0000000000000000000000000000000000000000..1b3bdad2ceffae91cee61b32f3295f9bbe646e48 Binary files /dev/null and b/Documentation/html/_static/down.png differ diff --git a/Documentation/html/_static/download_icon.png b/Documentation/html/_static/download_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..73a2055653d42bcfe976dfde88738865f8a3881e Binary files /dev/null and b/Documentation/html/_static/download_icon.png differ diff --git a/Documentation/html/_static/fe7.0.4_radon_cc_12-03-2019.png b/Documentation/html/_static/fe7.0.4_radon_cc_12-03-2019.png new file mode 100644 index 0000000000000000000000000000000000000000..80be06f2b8bd542196eeae4ea89990b103428f52 Binary files /dev/null and b/Documentation/html/_static/fe7.0.4_radon_cc_12-03-2019.png differ diff --git a/Documentation/html/_static/file.png b/Documentation/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 Binary files /dev/null and b/Documentation/html/_static/file.png differ diff --git a/Documentation/html/_static/fonts/Inconsolata-Bold.ttf b/Documentation/html/_static/fonts/Inconsolata-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..809c1f5828f86235347019a50e78b4b486a6a045 Binary files /dev/null and b/Documentation/html/_static/fonts/Inconsolata-Bold.ttf differ diff --git a/Documentation/html/_static/fonts/Inconsolata-Regular.ttf b/Documentation/html/_static/fonts/Inconsolata-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fc981ce7ad6c42d2384f0ef74b73174b9302ee65 Binary files /dev/null and b/Documentation/html/_static/fonts/Inconsolata-Regular.ttf differ diff --git a/Documentation/html/_static/fonts/Inconsolata.ttf b/Documentation/html/_static/fonts/Inconsolata.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4b8a36d249a05a0fe1575dc3d96ef7079dba6b07 Binary files /dev/null and b/Documentation/html/_static/fonts/Inconsolata.ttf differ diff --git a/Documentation/html/_static/fonts/Lato-Bold.ttf b/Documentation/html/_static/fonts/Lato-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1d23c7066e095b5bff2c373d4064dc4f33659783 Binary files /dev/null and b/Documentation/html/_static/fonts/Lato-Bold.ttf differ diff --git a/Documentation/html/_static/fonts/Lato-Regular.ttf b/Documentation/html/_static/fonts/Lato-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0f3d0f837d24834b9b5b0a6b735459c56f5e75c3 Binary files /dev/null and b/Documentation/html/_static/fonts/Lato-Regular.ttf differ diff --git a/Documentation/html/_static/fonts/Lato/lato-bold.eot b/Documentation/html/_static/fonts/Lato/lato-bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..3361183a419c188282a8545eaa8d8e298b8ffaab Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-bold.eot differ diff --git a/Documentation/html/_static/fonts/Lato/lato-bold.ttf b/Documentation/html/_static/fonts/Lato/lato-bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..29f691d5ed0c2d3d224423bb0288e6bd59292511 Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-bold.ttf differ diff --git a/Documentation/html/_static/fonts/Lato/lato-bold.woff b/Documentation/html/_static/fonts/Lato/lato-bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..c6dff51f063cc732fdb5fe786a8966de85f4ebec Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-bold.woff differ diff --git a/Documentation/html/_static/fonts/Lato/lato-bold.woff2 b/Documentation/html/_static/fonts/Lato/lato-bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..bb195043cfc07fa52741c6144d7378b5ba8be4c5 Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-bold.woff2 differ diff --git a/Documentation/html/_static/fonts/Lato/lato-bolditalic.eot b/Documentation/html/_static/fonts/Lato/lato-bolditalic.eot new file mode 100644 index 0000000000000000000000000000000000000000..3d4154936b42522fac84900c689a901ac12875c0 Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-bolditalic.eot differ diff --git a/Documentation/html/_static/fonts/Lato/lato-bolditalic.ttf b/Documentation/html/_static/fonts/Lato/lato-bolditalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f402040b3e5360b90f3a12ca2afab2cd7244e16f Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-bolditalic.ttf differ diff --git a/Documentation/html/_static/fonts/Lato/lato-bolditalic.woff b/Documentation/html/_static/fonts/Lato/lato-bolditalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..88ad05b9ff413055b4d4e89dd3eec1c193fa20c6 Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-bolditalic.woff differ diff --git a/Documentation/html/_static/fonts/Lato/lato-bolditalic.woff2 b/Documentation/html/_static/fonts/Lato/lato-bolditalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c4e3d804b57b625b16a36d767bfca6bbf63d414e Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-bolditalic.woff2 differ diff --git a/Documentation/html/_static/fonts/Lato/lato-italic.eot b/Documentation/html/_static/fonts/Lato/lato-italic.eot new file mode 100644 index 0000000000000000000000000000000000000000..3f826421a1d97b09797fad3d781a666a39eb45c9 Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-italic.eot differ diff --git a/Documentation/html/_static/fonts/Lato/lato-italic.ttf b/Documentation/html/_static/fonts/Lato/lato-italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b4bfc9b24aa993977662352c881c6e42f99f77e0 Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-italic.ttf differ diff --git a/Documentation/html/_static/fonts/Lato/lato-italic.woff b/Documentation/html/_static/fonts/Lato/lato-italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..76114bc03362242c3325ecda6ce6d02bb737880f Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-italic.woff differ diff --git a/Documentation/html/_static/fonts/Lato/lato-italic.woff2 b/Documentation/html/_static/fonts/Lato/lato-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3404f37e2e312757841abe20343588a7740768ca Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-italic.woff2 differ diff --git a/Documentation/html/_static/fonts/Lato/lato-regular.eot b/Documentation/html/_static/fonts/Lato/lato-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..11e3f2a5f0f9b8c7ef6affae8c543d20f7c112be Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-regular.eot differ diff --git a/Documentation/html/_static/fonts/Lato/lato-regular.ttf b/Documentation/html/_static/fonts/Lato/lato-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..74decd9ebb8d805201934266b3bda6a9d5831024 Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-regular.ttf differ diff --git a/Documentation/html/_static/fonts/Lato/lato-regular.woff b/Documentation/html/_static/fonts/Lato/lato-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..ae1307ff5f4c48678621c240f8972d5a6e20b22c Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-regular.woff differ diff --git a/Documentation/html/_static/fonts/Lato/lato-regular.woff2 b/Documentation/html/_static/fonts/Lato/lato-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3bf9843328a6359b6bd06e50010319c63da0d717 Binary files /dev/null and b/Documentation/html/_static/fonts/Lato/lato-regular.woff2 differ diff --git a/Documentation/html/_static/fonts/RobotoSlab-Bold.ttf b/Documentation/html/_static/fonts/RobotoSlab-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..df5d1df2730433013f41bf2698cbe249b075aa02 Binary files /dev/null and b/Documentation/html/_static/fonts/RobotoSlab-Bold.ttf differ diff --git a/Documentation/html/_static/fonts/RobotoSlab-Regular.ttf b/Documentation/html/_static/fonts/RobotoSlab-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..eb52a7907362cc3392eb74892883f5d9e260b638 Binary files /dev/null and b/Documentation/html/_static/fonts/RobotoSlab-Regular.ttf differ diff --git a/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..79dc8efed3447d6588baa2bb74122d56f3500038 Binary files /dev/null and b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot differ diff --git a/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..df5d1df2730433013f41bf2698cbe249b075aa02 Binary files /dev/null and b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf differ diff --git a/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..6cb60000181dbd348963953ac8ac54afb46c63d5 Binary files /dev/null and b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff differ diff --git a/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7059e23142aae3d8bad6067fc734a6cffec779c9 Binary files /dev/null and b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 differ diff --git a/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..2f7ca78a1eb34f0f98feb07ab1231d077b248940 Binary files /dev/null and b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot differ diff --git a/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..eb52a7907362cc3392eb74892883f5d9e260b638 Binary files /dev/null and b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf differ diff --git a/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..f815f63f99da80ad2be69e4021023ec2981eaea0 Binary files /dev/null and b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff differ diff --git a/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f2c76e5bda18a9842e24cd60d8787257da215ca7 Binary files /dev/null and b/Documentation/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 differ diff --git a/Documentation/html/_static/fonts/fontawesome-webfont.eot b/Documentation/html/_static/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..e9f60ca953f93e35eab4108bd414bc02ddcf3928 Binary files /dev/null and b/Documentation/html/_static/fonts/fontawesome-webfont.eot differ diff --git a/Documentation/html/_static/fonts/fontawesome-webfont.svg b/Documentation/html/_static/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000000000000000000000000000000000000..855c845e538b65548118279537a04eab2ec6ef0d --- /dev/null +++ b/Documentation/html/_static/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg> +<metadata> +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. +</metadata> +<defs> +<font id="FontAwesome" horiz-adv-x="1536" > + <font-face + font-family="FontAwesome" + font-weight="400" + font-stretch="normal" + units-per-em="1792" + panose-1="0 0 0 0 0 0 0 0 0 0" + ascent="1536" + descent="-256" + bbox="-1.02083 -256.962 2304.6 1537.02" + underline-thickness="0" + underline-position="0" + unicode-range="U+0020-F500" + /> +<missing-glyph horiz-adv-x="896" +d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" /> + <glyph glyph-name=".notdef" horiz-adv-x="896" +d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" /> + <glyph glyph-name=".null" horiz-adv-x="0" + /> + <glyph glyph-name="nonmarkingreturn" horiz-adv-x="597" + /> + <glyph glyph-name="space" unicode=" " horiz-adv-x="448" + /> + <glyph glyph-name="dieresis" unicode="¨" horiz-adv-x="1792" + /> + <glyph glyph-name="copyright" unicode="©" horiz-adv-x="1792" + /> + <glyph glyph-name="registered" unicode="®" horiz-adv-x="1792" + /> + <glyph glyph-name="acute" unicode="´" horiz-adv-x="1792" + /> + <glyph glyph-name="AE" unicode="Æ" horiz-adv-x="1792" + /> + <glyph glyph-name="Oslash" unicode="Ø" horiz-adv-x="1792" + /> + <glyph glyph-name="trademark" unicode="™" horiz-adv-x="1792" + /> + <glyph glyph-name="infinity" unicode="∞" horiz-adv-x="1792" + /> + <glyph glyph-name="notequal" unicode="≠" horiz-adv-x="1792" + /> + <glyph glyph-name="glass" unicode="" horiz-adv-x="1792" +d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" /> + <glyph glyph-name="music" unicode="" +d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 +t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" /> + <glyph glyph-name="search" unicode="" horiz-adv-x="1664" +d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 +t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> + <glyph glyph-name="envelope" unicode="" horiz-adv-x="1792" +d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 +t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z +M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> + <glyph glyph-name="heart" unicode="" horiz-adv-x="1792" +d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 +q-18 -18 -44 -18z" /> + <glyph glyph-name="star" unicode="" horiz-adv-x="1664" +d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 +l502 -73q56 -9 56 -46z" /> + <glyph glyph-name="star_empty" unicode="" horiz-adv-x="1664" +d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 +l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" /> + <glyph glyph-name="user" unicode="" horiz-adv-x="1280" +d="M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5 +t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" /> + <glyph glyph-name="film" unicode="" horiz-adv-x="1920" +d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 +q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 +t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 +q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 +t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> + <glyph glyph-name="th_large" unicode="" horiz-adv-x="1664" +d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 +h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> + <glyph glyph-name="th" unicode="" horiz-adv-x="1792" +d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 +q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 +h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 +q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" /> + <glyph glyph-name="th_list" unicode="" horiz-adv-x="1792" +d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 +q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 +h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" /> + <glyph glyph-name="ok" unicode="" horiz-adv-x="1792" +d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" /> + <glyph glyph-name="remove" unicode="" horiz-adv-x="1408" +d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 +t-28 -68l-294 -294l294 -294q28 -28 28 -68z" /> + <glyph glyph-name="zoom_in" unicode="" horiz-adv-x="1664" +d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 +q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 +t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> + <glyph glyph-name="zoom_out" unicode="" horiz-adv-x="1664" +d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z +M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z +" /> + <glyph glyph-name="off" unicode="" +d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 +t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" /> + <glyph glyph-name="signal" unicode="" horiz-adv-x="1792" +d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 +v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" /> + <glyph glyph-name="cog" unicode="" +d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 +q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 +l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 +q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" /> + <glyph glyph-name="trash" unicode="" horiz-adv-x="1408" +d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 +q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 +q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /> + <glyph glyph-name="home" unicode="" horiz-adv-x="1664" +d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 +l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" /> + <glyph glyph-name="file_alt" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +" /> + <glyph glyph-name="time" unicode="" +d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="road" unicode="" horiz-adv-x="1920" +d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 +q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" /> + <glyph glyph-name="download_alt" unicode="" horiz-adv-x="1664" +d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 +q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" /> + <glyph glyph-name="download" unicode="" +d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 +t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="upload" unicode="" +d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 +t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="inbox" unicode="" +d="M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 +q25 -61 25 -123z" /> + <glyph glyph-name="play_circle" unicode="" +d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="repeat" unicode="" +d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9 +l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" /> + <glyph glyph-name="refresh" unicode="" +d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 +q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 +q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" /> + <glyph glyph-name="list_alt" unicode="" horiz-adv-x="1792" +d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z +M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 +t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 +t47 -113z" /> + <glyph glyph-name="lock" unicode="" horiz-adv-x="1152" +d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" /> + <glyph glyph-name="flag" unicode="" horiz-adv-x="1792" +d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 +t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" /> + <glyph glyph-name="headphones" unicode="" horiz-adv-x="1664" +d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 +t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 +t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" /> + <glyph glyph-name="volume_off" unicode="" horiz-adv-x="768" +d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" /> + <glyph glyph-name="volume_down" unicode="" horiz-adv-x="1152" +d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36 +t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" /> + <glyph glyph-name="volume_up" unicode="" horiz-adv-x="1664" +d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36 +t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 +t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 +t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" /> + <glyph glyph-name="qrcode" unicode="" horiz-adv-x="1408" +d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z +M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" /> + <glyph glyph-name="barcode" unicode="" horiz-adv-x="1792" +d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z +M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" /> + <glyph glyph-name="tag" unicode="" +d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 +l715 -714q37 -39 37 -91z" /> + <glyph glyph-name="tags" unicode="" horiz-adv-x="1920" +d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 +l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" /> + <glyph glyph-name="book" unicode="" horiz-adv-x="1664" +d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 +q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 +q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 +t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" /> + <glyph glyph-name="bookmark" unicode="" horiz-adv-x="1280" +d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> + <glyph glyph-name="print" unicode="" horiz-adv-x="1664" +d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 +v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" /> + <glyph glyph-name="camera" unicode="" horiz-adv-x="1920" +d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 +q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="font" unicode="" horiz-adv-x="1664" +d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57 +q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5 +q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" /> + <glyph glyph-name="bold" unicode="" horiz-adv-x="1408" +d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142 +q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5 +t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5 +t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" /> + <glyph glyph-name="italic" unicode="" horiz-adv-x="1024" +d="M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5 +q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" /> + <glyph glyph-name="text_height" unicode="" horiz-adv-x="1792" +d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2 +t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5 +q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 +q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" /> + <glyph glyph-name="text_width" unicode="" +d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1 +t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 +q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5 +t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49 +t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" /> + <glyph glyph-name="align_left" unicode="" horiz-adv-x="1792" +d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 +t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> + <glyph glyph-name="align_center" unicode="" horiz-adv-x="1792" +d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 +h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" /> + <glyph glyph-name="align_right" unicode="" horiz-adv-x="1792" +d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 +t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> + <glyph glyph-name="align_justify" unicode="" horiz-adv-x="1792" +d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 +t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> + <glyph glyph-name="list" unicode="" horiz-adv-x="1792" +d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 +t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 +q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 +t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 +q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" /> + <glyph glyph-name="indent_left" unicode="" horiz-adv-x="1792" +d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 +t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 +q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> + <glyph glyph-name="indent_right" unicode="" horiz-adv-x="1792" +d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 +t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 +q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> + <glyph glyph-name="facetime_video" unicode="" horiz-adv-x="1792" +d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 +q39 -17 39 -59z" /> + <glyph glyph-name="picture" unicode="" horiz-adv-x="1920" +d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 +q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> + <glyph glyph-name="pencil" unicode="" +d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 +q53 0 91 -38l235 -234q37 -39 37 -91z" /> + <glyph glyph-name="map_marker" unicode="" horiz-adv-x="1024" +d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" /> + <glyph glyph-name="adjust" unicode="" +d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="tint" unicode="" horiz-adv-x="1024" +d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 +q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" /> + <glyph glyph-name="edit" unicode="" horiz-adv-x="1792" +d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 +q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 +l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" /> + <glyph glyph-name="share" unicode="" horiz-adv-x="1664" +d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 +q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 +t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" /> + <glyph glyph-name="check" unicode="" horiz-adv-x="1664" +d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 +q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 +q24 -24 24 -57t-24 -57z" /> + <glyph glyph-name="move" unicode="" horiz-adv-x="1792" +d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 +t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> + <glyph glyph-name="step_backward" unicode="" horiz-adv-x="1024" +d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z" /> + <glyph glyph-name="fast_backward" unicode="" horiz-adv-x="1792" +d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710 +q19 19 32 13t13 -32v-710q4 10 13 19z" /> + <glyph glyph-name="backward" unicode="" horiz-adv-x="1664" +d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z" /> + <glyph glyph-name="play" unicode="" horiz-adv-x="1408" +d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" /> + <glyph glyph-name="pause" unicode="" +d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" /> + <glyph glyph-name="stop" unicode="" +d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> + <glyph glyph-name="forward" unicode="" horiz-adv-x="1664" +d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" /> + <glyph glyph-name="fast_forward" unicode="" horiz-adv-x="1792" +d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710 +q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" /> + <glyph glyph-name="step_forward" unicode="" horiz-adv-x="1024" +d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z" /> + <glyph glyph-name="eject" unicode="" horiz-adv-x="1538" +d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" /> + <glyph glyph-name="chevron_left" unicode="" horiz-adv-x="1280" +d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" /> + <glyph glyph-name="chevron_right" unicode="" horiz-adv-x="1280" +d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" /> + <glyph glyph-name="plus_sign" unicode="" +d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 +t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="minus_sign" unicode="" +d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 +t103 -385.5z" /> + <glyph glyph-name="remove_sign" unicode="" +d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 +q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="ok_sign" unicode="" +d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 +t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="question_sign" unicode="" +d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 +q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 +t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="info_sign" unicode="" +d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 +t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="screenshot" unicode="" +d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 +q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 +q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" /> + <glyph glyph-name="remove_circle" unicode="" +d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 +l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 +t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="ok_circle" unicode="" +d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 +t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="ban_circle" unicode="" +d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 +t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" /> + <glyph glyph-name="arrow_left" unicode="" +d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 +t32.5 -90.5z" /> + <glyph glyph-name="arrow_right" unicode="" +d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" /> + <glyph glyph-name="arrow_up" unicode="" horiz-adv-x="1664" +d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 +q37 -39 37 -91z" /> + <glyph glyph-name="arrow_down" unicode="" horiz-adv-x="1664" +d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" /> + <glyph glyph-name="share_alt" unicode="" horiz-adv-x="1792" +d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 +t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" /> + <glyph glyph-name="resize_full" unicode="" +d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 +q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" /> + <glyph glyph-name="resize_small" unicode="" +d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 +t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" /> + <glyph glyph-name="plus" unicode="" horiz-adv-x="1408" +d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" /> + <glyph glyph-name="minus" unicode="" horiz-adv-x="1408" +d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" /> + <glyph glyph-name="asterisk" unicode="" horiz-adv-x="1664" +d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 +q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" /> + <glyph glyph-name="exclamation_sign" unicode="" +d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 +q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" /> + <glyph glyph-name="gift" unicode="" +d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 +q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 +t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" /> + <glyph glyph-name="leaf" unicode="" horiz-adv-x="1792" +d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 +q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 +t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" /> + <glyph glyph-name="fire" unicode="" horiz-adv-x="1408" +d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 +q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" /> + <glyph glyph-name="eye_open" unicode="" horiz-adv-x="1792" +d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 +t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" /> + <glyph glyph-name="eye_close" unicode="" horiz-adv-x="1792" +d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 +q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 +q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z +" /> + <glyph glyph-name="warning_sign" unicode="" horiz-adv-x="1792" +d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 +q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" /> + <glyph glyph-name="plane" unicode="" horiz-adv-x="1408" +d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 +q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" /> + <glyph glyph-name="calendar" unicode="" horiz-adv-x="1664" +d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z +M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 +q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 +h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> + <glyph glyph-name="random" unicode="" horiz-adv-x="1792" +d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 +t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 +v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 +t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> + <glyph glyph-name="comment" unicode="" horiz-adv-x="1792" +d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 +q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" /> + <glyph glyph-name="magnet" unicode="" +d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 +q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" /> + <glyph glyph-name="chevron_up" unicode="" horiz-adv-x="1792" +d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" /> + <glyph glyph-name="chevron_down" unicode="" horiz-adv-x="1792" +d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" /> + <glyph glyph-name="retweet" unicode="" horiz-adv-x="1920" +d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21 +zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z +" /> + <glyph glyph-name="shopping_cart" unicode="" horiz-adv-x="1664" +d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45 +t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" /> + <glyph glyph-name="folder_close" unicode="" horiz-adv-x="1664" +d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> + <glyph glyph-name="folder_open" unicode="" horiz-adv-x="1920" +d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 +t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" /> + <glyph glyph-name="resize_vertical" unicode="" horiz-adv-x="768" +d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" /> + <glyph glyph-name="resize_horizontal" unicode="" horiz-adv-x="1792" +d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> + <glyph glyph-name="bar_chart" unicode="" horiz-adv-x="2048" +d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" /> + <glyph glyph-name="twitter_sign" unicode="" +d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 +q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 +t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="facebook_sign" unicode="" +d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960 +q0 119 84.5 203.5t203.5 84.5h960z" /> + <glyph glyph-name="camera_retro" unicode="" horiz-adv-x="1792" +d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 +t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 +q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" /> + <glyph glyph-name="key" unicode="" horiz-adv-x="1792" +d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 +l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 +t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" /> + <glyph glyph-name="cogs" unicode="" horiz-adv-x="1920" +d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 +t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 +l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 +l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 +q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 +t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 +q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 +q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" /> + <glyph glyph-name="comments" unicode="" horiz-adv-x="1792" +d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 +q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 +q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" /> + <glyph glyph-name="thumbs_up_alt" unicode="" +d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 +t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 +q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 +q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" /> + <glyph glyph-name="thumbs_down_alt" unicode="" +d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 +t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z +M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 +h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z" /> + <glyph glyph-name="star_half" unicode="" horiz-adv-x="896" +d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" /> + <glyph glyph-name="heart_empty" unicode="" horiz-adv-x="1792" +d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 +q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 +q224 0 351 -124t127 -344z" /> + <glyph glyph-name="signout" unicode="" horiz-adv-x="1664" +d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 +q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" /> + <glyph glyph-name="linkedin_sign" unicode="" +d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 +q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="pushpin" unicode="" horiz-adv-x="1152" +d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 +t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" /> + <glyph glyph-name="external_link" unicode="" horiz-adv-x="1792" +d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 +q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" /> + <glyph glyph-name="signin" unicode="" +d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 +q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="trophy" unicode="" horiz-adv-x="1664" +d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 +t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 +q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" /> + <glyph glyph-name="github_sign" unicode="" +d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4 +q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4 +t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16 +q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960 +q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="upload_alt" unicode="" horiz-adv-x="1664" +d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 +t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" /> + <glyph glyph-name="lemon" unicode="" +d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 +q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 +q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 +q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z" /> + <glyph glyph-name="phone" unicode="" horiz-adv-x="1408" +d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186 +q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14 +t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" /> + <glyph glyph-name="check_empty" unicode="" horiz-adv-x="1408" +d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 +q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="bookmark_empty" unicode="" horiz-adv-x="1280" +d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 +q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> + <glyph glyph-name="phone_sign" unicode="" +d="M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5 +t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5 +t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z +" /> + <glyph glyph-name="twitter" unicode="" horiz-adv-x="1664" +d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 +q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" /> + <glyph glyph-name="facebook" unicode="" horiz-adv-x="1024" +d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" /> + <glyph glyph-name="github" unicode="" +d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24 +q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5 +t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12 +q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z +M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" /> + <glyph glyph-name="unlock" unicode="" horiz-adv-x="1664" +d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 +t316.5 -131.5t131.5 -316.5z" /> + <glyph glyph-name="credit_card" unicode="" horiz-adv-x="1920" +d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 +q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" /> + <glyph glyph-name="rss" unicode="" horiz-adv-x="1408" +d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 +t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 +q187 -186 294 -425.5t120 -501.5z" /> + <glyph glyph-name="hdd" unicode="" +d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 +h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 +l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" /> + <glyph glyph-name="bullhorn" unicode="" horiz-adv-x="1792" +d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 +t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" /> + <glyph glyph-name="bell" unicode="" horiz-adv-x="1792" +d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z +M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5 +t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" /> + <glyph glyph-name="certificate" unicode="" +d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 +l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 +l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" /> + <glyph glyph-name="hand_right" unicode="" horiz-adv-x="1792" +d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 +q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 +q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 +t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" /> + <glyph glyph-name="hand_left" unicode="" horiz-adv-x="1792" +d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5 +t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z +M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67 +q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" /> + <glyph glyph-name="hand_up" unicode="" +d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 +q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 +t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 +q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" /> + <glyph glyph-name="hand_down" unicode="" +d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 +t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 +q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 +q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" /> + <glyph glyph-name="circle_arrow_left" unicode="" +d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="circle_arrow_right" unicode="" +d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="circle_arrow_up" unicode="" +d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="circle_arrow_down" unicode="" +d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="globe" unicode="" +d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 +q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 11t-9.5 10q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 +q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 +q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 +t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-4 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 +q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 +q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 +t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 +t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10.5t17 -19.5q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 +q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 +q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 +q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 +t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q8 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 +q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 +q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" /> + <glyph glyph-name="wrench" unicode="" horiz-adv-x="1664" +d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 +t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" /> + <glyph glyph-name="tasks" unicode="" horiz-adv-x="1792" +d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 +t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> + <glyph glyph-name="filter" unicode="" horiz-adv-x="1408" +d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" /> + <glyph glyph-name="briefcase" unicode="" horiz-adv-x="1792" +d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 +t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" /> + <glyph glyph-name="fullscreen" unicode="" +d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 +l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z +" /> + <glyph glyph-name="group" unicode="" horiz-adv-x="1920" +d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 +t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 +t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 +t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" /> + <glyph glyph-name="link" unicode="" horiz-adv-x="1664" +d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 +l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 +t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 +q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" /> + <glyph glyph-name="cloud" unicode="" horiz-adv-x="1920" +d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z +" /> + <glyph glyph-name="beaker" unicode="" horiz-adv-x="1664" +d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" /> + <glyph glyph-name="cut" unicode="" horiz-adv-x="1792" +d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 +q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 +q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 +q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 +q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" /> + <glyph glyph-name="copy" unicode="" horiz-adv-x="1792" +d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 +h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" /> + <glyph glyph-name="paper_clip" unicode="" horiz-adv-x="1408" +d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 +l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 +z" /> + <glyph glyph-name="save" unicode="" +d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 +h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" /> + <glyph glyph-name="sign_blank" unicode="" +d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="reorder" unicode="" +d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 +t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> + <glyph glyph-name="ul" unicode="" horiz-adv-x="1792" +d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 +t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z +M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> + <glyph glyph-name="ol" unicode="" horiz-adv-x="1792" +d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 +q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 +t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 121.5t0.5 121.5v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216 +q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> + <glyph glyph-name="strikethrough" unicode="" horiz-adv-x="1792" +d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 98 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 +l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -56 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 +l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" /> + <glyph glyph-name="underline" unicode="" +d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 +q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 +q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 +q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" /> + <glyph glyph-name="table" unicode="" horiz-adv-x="1664" +d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 +v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 +q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 +q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 +z" /> + <glyph glyph-name="magic" unicode="" horiz-adv-x="1664" +d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 +l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" /> + <glyph glyph-name="truck" unicode="" horiz-adv-x="1792" +d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 +t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 +t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" /> + <glyph glyph-name="pinterest" unicode="" +d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 +q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 +q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="pinterest_sign" unicode="" +d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 +t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 +t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" /> + <glyph glyph-name="google_plus_sign" unicode="" +d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585 +h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="google_plus" unicode="" horiz-adv-x="2304" +d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62 +q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" /> + <glyph glyph-name="money" unicode="" horiz-adv-x="1920" +d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 +v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" /> + <glyph glyph-name="caret_down" unicode="" horiz-adv-x="1024" +d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> + <glyph glyph-name="caret_up" unicode="" horiz-adv-x="1024" +d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> + <glyph glyph-name="caret_left" unicode="" horiz-adv-x="640" +d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" /> + <glyph glyph-name="caret_right" unicode="" horiz-adv-x="640" +d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" /> + <glyph glyph-name="columns" unicode="" horiz-adv-x="1664" +d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" /> + <glyph glyph-name="sort" unicode="" horiz-adv-x="1024" +d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> + <glyph glyph-name="sort_down" unicode="" horiz-adv-x="1024" +d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> + <glyph glyph-name="sort_up" unicode="" horiz-adv-x="1024" +d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> + <glyph glyph-name="envelope_alt" unicode="" horiz-adv-x="1792" +d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 +q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" /> + <glyph glyph-name="linkedin" unicode="" +d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 +q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" /> + <glyph glyph-name="undo" unicode="" +d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 +t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" /> + <glyph glyph-name="legal" unicode="" horiz-adv-x="1792" +d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 +t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 +q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 +q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" /> + <glyph glyph-name="dashboard" unicode="" horiz-adv-x="1792" +d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 +t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 +t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 +q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="comment_alt" unicode="" horiz-adv-x="1792" +d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 +q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 +t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" /> + <glyph glyph-name="comments_alt" unicode="" horiz-adv-x="1792" +d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 +t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 +t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 +q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" /> + <glyph glyph-name="bolt" unicode="" horiz-adv-x="896" +d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" /> + <glyph glyph-name="sitemap" unicode="" horiz-adv-x="1792" +d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 +q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 +z" /> + <glyph glyph-name="umbrella" unicode="" horiz-adv-x="1664" +d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 +q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 +q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" /> + <glyph glyph-name="paste" unicode="" horiz-adv-x="1792" +d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 +h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" /> + <glyph glyph-name="light_bulb" unicode="" horiz-adv-x="1024" +d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 +q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 +q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 +t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" /> + <glyph glyph-name="exchange" unicode="" horiz-adv-x="1792" +d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 +q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> + <glyph glyph-name="cloud_download" unicode="" horiz-adv-x="1920" +d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 +q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> + <glyph glyph-name="cloud_upload" unicode="" horiz-adv-x="1920" +d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 +q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> + <glyph glyph-name="user_md" unicode="" horiz-adv-x="1408" +d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 +t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 +t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 +t271.5 -112.5t112.5 -271.5z" /> + <glyph glyph-name="stethoscope" unicode="" horiz-adv-x="1408" +d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 +t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 +t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" /> + <glyph glyph-name="suitcase" unicode="" horiz-adv-x="1792" +d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 +t66 -158z" /> + <glyph glyph-name="bell_alt" unicode="" horiz-adv-x="1792" +d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5 +t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" /> + <glyph glyph-name="coffee" unicode="" horiz-adv-x="1920" +d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 +t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" /> + <glyph glyph-name="food" unicode="" horiz-adv-x="1408" +d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 +t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" /> + <glyph glyph-name="file_text_alt" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704 +q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" /> + <glyph glyph-name="building" unicode="" horiz-adv-x="1408" +d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" /> + <glyph glyph-name="hospital" unicode="" horiz-adv-x="1408" +d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 +t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 +v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" /> + <glyph glyph-name="ambulance" unicode="" horiz-adv-x="1920" +d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 +t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 +q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> + <glyph glyph-name="medkit" unicode="" horiz-adv-x="1792" +d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 +q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" /> + <glyph glyph-name="fighter_jet" unicode="" horiz-adv-x="1920" +d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 +q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q128 -28 200 -52t80 -34z" /> + <glyph glyph-name="beer" unicode="" horiz-adv-x="1664" +d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" /> + <glyph glyph-name="h_sign" unicode="" +d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 +q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="f0fe" unicode="" +d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 +q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="double_angle_left" unicode="" horiz-adv-x="1024" +d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 +t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" /> + <glyph glyph-name="double_angle_right" unicode="" horiz-adv-x="1024" +d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 +l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> + <glyph glyph-name="double_angle_up" unicode="" horiz-adv-x="1152" +d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 +q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> + <glyph glyph-name="double_angle_down" unicode="" horiz-adv-x="1152" +d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 +t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> + <glyph glyph-name="angle_left" unicode="" horiz-adv-x="640" +d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> + <glyph glyph-name="angle_right" unicode="" horiz-adv-x="640" +d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> + <glyph glyph-name="angle_up" unicode="" horiz-adv-x="1152" +d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> + <glyph glyph-name="angle_down" unicode="" horiz-adv-x="1152" +d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> + <glyph glyph-name="desktop" unicode="" horiz-adv-x="1920" +d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 +t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> + <glyph glyph-name="laptop" unicode="" horiz-adv-x="1920" +d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z +M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" /> + <glyph glyph-name="tablet" unicode="" horiz-adv-x="1152" +d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 +q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" /> + <glyph glyph-name="mobile_phone" unicode="" horiz-adv-x="768" +d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 +q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> + <glyph glyph-name="circle_blank" unicode="" +d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 +t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="quote_left" unicode="" horiz-adv-x="1664" +d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z +M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" /> + <glyph glyph-name="quote_right" unicode="" horiz-adv-x="1664" +d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 +v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" /> + <glyph glyph-name="spinner" unicode="" horiz-adv-x="1792" +d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5 +t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z +M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5 +q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" /> + <glyph glyph-name="circle" unicode="" +d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="reply" unicode="" horiz-adv-x="1792" +d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 +l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" /> + <glyph glyph-name="github_alt" unicode="" horiz-adv-x="1664" +d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 +q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 +t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 +q0 -87 -27 -168q136 -160 136 -398z" /> + <glyph glyph-name="folder_close_alt" unicode="" horiz-adv-x="1664" +d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 +q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> + <glyph glyph-name="folder_open_alt" unicode="" horiz-adv-x="1920" +d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 +v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z +" /> + <glyph glyph-name="expand_alt" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="collapse_alt" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="smile" unicode="" +d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 +t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 +t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="frown" unicode="" +d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 +t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 +t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="meh" unicode="" +d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 +t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="gamepad" unicode="" horiz-adv-x="1920" +d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 +t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 +t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" /> + <glyph glyph-name="keyboard" unicode="" horiz-adv-x="1920" +d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 +h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 +h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 +q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 +h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" /> + <glyph glyph-name="flag_alt" unicode="" horiz-adv-x="1792" +d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 +h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 +q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> + <glyph glyph-name="flag_checkered" unicode="" horiz-adv-x="1792" +d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 +q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 +q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 +q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> + <glyph glyph-name="terminal" unicode="" horiz-adv-x="1664" +d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 +t9 -23z" /> + <glyph glyph-name="code" unicode="" horiz-adv-x="1920" +d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 +l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" /> + <glyph glyph-name="reply_all" unicode="" horiz-adv-x="1792" +d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 +q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" /> + <glyph glyph-name="star_half_empty" unicode="" horiz-adv-x="1664" +d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 +l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" /> + <glyph glyph-name="location_arrow" unicode="" horiz-adv-x="1408" +d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" /> + <glyph glyph-name="crop" unicode="" horiz-adv-x="1664" +d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 +v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" /> + <glyph glyph-name="code_fork" unicode="" horiz-adv-x="1024" +d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 +q-2 -287 -226 -414q-67 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 +q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" /> + <glyph glyph-name="unlink" unicode="" horiz-adv-x="1664" +d="M439 265l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 +q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 +l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 +t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" /> + <glyph glyph-name="question" unicode="" horiz-adv-x="1024" +d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 +t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" /> + <glyph glyph-name="_279" unicode="" horiz-adv-x="640" +d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 +q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" /> + <glyph glyph-name="exclamation" unicode="" horiz-adv-x="640" +d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" /> + <glyph glyph-name="superscript" unicode="" +d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z +M1534 846v-206h-514l-3 27q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5 +t-65.5 -51.5t-30.5 -63h232v80h126z" /> + <glyph glyph-name="subscript" unicode="" +d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z +M1536 -50v-206h-514l-4 27q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73 +h232v80h126z" /> + <glyph glyph-name="_283" unicode="" horiz-adv-x="1920" +d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" /> + <glyph glyph-name="puzzle_piece" unicode="" horiz-adv-x="1664" +d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 +t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 +q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 +q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" /> + <glyph glyph-name="microphone" unicode="" horiz-adv-x="1152" +d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 +t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" /> + <glyph glyph-name="microphone_off" unicode="" horiz-adv-x="1408" +d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 +q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 +t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" /> + <glyph glyph-name="shield" unicode="" horiz-adv-x="1280" +d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 +t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> + <glyph glyph-name="calendar_empty" unicode="" horiz-adv-x="1664" +d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 +q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> + <glyph glyph-name="fire_extinguisher" unicode="" horiz-adv-x="1408" +d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 +q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 +q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" /> + <glyph glyph-name="rocket" unicode="" horiz-adv-x="1664" +d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 +q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" /> + <glyph glyph-name="maxcdn" unicode="" horiz-adv-x="1792" +d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" /> + <glyph glyph-name="chevron_sign_left" unicode="" +d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 +t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="chevron_sign_right" unicode="" +d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 +t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="chevron_sign_up" unicode="" +d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 +t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="chevron_sign_down" unicode="" +d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 +t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="html5" unicode="" horiz-adv-x="1408" +d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" /> + <glyph glyph-name="css3" unicode="" horiz-adv-x="1792" +d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" /> + <glyph glyph-name="anchor" unicode="" horiz-adv-x="1792" +d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 +q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 +t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" /> + <glyph glyph-name="unlock_alt" unicode="" horiz-adv-x="1152" +d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 +v-320h736z" /> + <glyph glyph-name="bullseye" unicode="" +d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 +t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="ellipsis_horizontal" unicode="" horiz-adv-x="1408" +d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 +q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> + <glyph glyph-name="ellipsis_vertical" unicode="" horiz-adv-x="384" +d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 +q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> + <glyph glyph-name="_303" unicode="" +d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 233 -176.5 396.5t-396.5 176.5q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128 +q13 0 23 10t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960 +q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="play_sign" unicode="" +d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 +q16 -8 32 -8q17 0 32 9z" /> + <glyph glyph-name="ticket" unicode="" horiz-adv-x="1792" +d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 +t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" /> + <glyph glyph-name="minus_sign_alt" unicode="" +d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 +t84.5 -203.5z" /> + <glyph glyph-name="check_minus" unicode="" horiz-adv-x="1408" +d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 +t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="level_up" unicode="" horiz-adv-x="1024" +d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" /> + <glyph glyph-name="level_down" unicode="" horiz-adv-x="1024" +d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" /> + <glyph glyph-name="check_sign" unicode="" +d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 +t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="edit_sign" unicode="" +d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 +v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_312" unicode="" +d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 +q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="share_sign" unicode="" +d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q11 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 +t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="compass" unicode="" +d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 +t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="collapse" unicode="" +d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 +v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="collapse_top" unicode="" +d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 +q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_317" unicode="" +d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 +t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="eur" unicode="" horiz-adv-x="1024" +d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 +t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 +l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" /> + <glyph glyph-name="gbp" unicode="" horiz-adv-x="1024" +d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 +q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" /> + <glyph glyph-name="usd" unicode="" horiz-adv-x="1024" +d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 +t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 +t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 +t53 -63.5t31.5 -76.5t13 -94z" /> + <glyph glyph-name="inr" unicode="" horiz-adv-x="898" +d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 +q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" /> + <glyph glyph-name="jpy" unicode="" horiz-adv-x="1027" +d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 +l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" /> + <glyph glyph-name="rub" unicode="" horiz-adv-x="1280" +d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 +q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" /> + <glyph glyph-name="krw" unicode="" horiz-adv-x="1792" +d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 +t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 +q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" /> + <glyph glyph-name="btc" unicode="" horiz-adv-x="1280" +d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 +l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 +t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" /> + <glyph glyph-name="file" unicode="" +d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" /> + <glyph glyph-name="file_text" unicode="" +d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704 +q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" /> + <glyph glyph-name="sort_by_alphabet" unicode="" horiz-adv-x="1664" +d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 +v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 +l230 -662h70z" /> + <glyph glyph-name="_329" unicode="" horiz-adv-x="1664" +d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 +v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 +v119h121z" /> + <glyph glyph-name="sort_by_attributes" unicode="" horiz-adv-x="1792" +d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 +q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 +q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" /> + <glyph glyph-name="sort_by_attributes_alt" unicode="" horiz-adv-x="1792" +d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 +q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 +q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" /> + <glyph glyph-name="sort_by_order" unicode="" +d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 +zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 +t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" /> + <glyph glyph-name="sort_by_order_alt" unicode="" +d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 +t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 +q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" /> + <glyph glyph-name="_334" unicode="" horiz-adv-x="1664" +d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 +q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 +t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" /> + <glyph glyph-name="_335" unicode="" horiz-adv-x="1664" +d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 +t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 +t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" /> + <glyph glyph-name="youtube_sign" unicode="" +d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 17 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 +q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 +q21 -29 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 +q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78q7 -23 23 -69l24 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38 +q-51 0 -78 -38q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5 +h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="youtube" unicode="" +d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 +q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 +q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 +q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-38 -51 -106 -51q-67 0 -105 51 +q-28 38 -28 118v175q0 80 28 117q38 51 105 51q68 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" /> + <glyph glyph-name="xing" unicode="" horiz-adv-x="1408" +d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 +q25 45 64 45h241q22 0 31 -15z" /> + <glyph glyph-name="xing_sign" unicode="" +d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 +l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="youtube_play" unicode="" horiz-adv-x="1792" +d="M711 408l484 250l-484 253v-503zM896 1270q168 0 324.5 -4.5t229.5 -9.5l73 -4q1 0 17 -1.5t23 -3t23.5 -4.5t28.5 -8t28 -13t31 -19.5t29 -26.5q6 -6 15.5 -18.5t29 -58.5t26.5 -101q8 -64 12.5 -136.5t5.5 -113.5v-40v-136q1 -145 -18 -290q-7 -55 -25 -99.5t-32 -61.5 +l-14 -17q-14 -15 -29 -26.5t-31 -19t-28 -12.5t-28.5 -8t-24 -4.5t-23 -3t-16.5 -1.5q-251 -19 -627 -19q-207 2 -359.5 6.5t-200.5 7.5l-49 4l-36 4q-36 5 -54.5 10t-51 21t-56.5 41q-6 6 -15.5 18.5t-29 58.5t-26.5 101q-8 64 -12.5 136.5t-5.5 113.5v40v136 +q-1 145 18 290q7 55 25 99.5t32 61.5l14 17q14 15 29 26.5t31 19.5t28 13t28.5 8t23.5 4.5t23 3t17 1.5q251 18 627 18z" /> + <glyph glyph-name="dropbox" unicode="" horiz-adv-x="1792" +d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" /> + <glyph glyph-name="stackexchange" unicode="" +d="M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z" /> + <glyph glyph-name="instagram" unicode="" +d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270 +q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5 +t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317 +q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z" /> + <glyph glyph-name="flickr" unicode="" +d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 +t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" /> + <glyph glyph-name="adn" unicode="" +d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="f171" unicode="" horiz-adv-x="1408" +d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 +t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 +t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 +t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" /> + <glyph glyph-name="bitbucket_sign" unicode="" +d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 +t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z +M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 +v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="tumblr" unicode="" horiz-adv-x="1024" +d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14 +q78 2 134 29z" /> + <glyph glyph-name="tumblr_sign" unicode="" +d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z +M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="long_arrow_down" unicode="" horiz-adv-x="768" +d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" /> + <glyph glyph-name="long_arrow_up" unicode="" horiz-adv-x="768" +d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" /> + <glyph glyph-name="long_arrow_left" unicode="" horiz-adv-x="1792" +d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" /> + <glyph glyph-name="long_arrow_right" unicode="" horiz-adv-x="1792" +d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" /> + <glyph glyph-name="apple" unicode="" horiz-adv-x="1408" +d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q113 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 +q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" /> + <glyph glyph-name="windows" unicode="" horiz-adv-x="1664" +d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" /> + <glyph glyph-name="android" unicode="" horiz-adv-x="1408" +d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 +t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 +h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" /> + <glyph glyph-name="linux" unicode="" +d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-10 -11 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z +M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 +q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 +q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 +t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 +q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 +q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18q-2 -1 -4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 +q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 +q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-6 0 -8 -2t0 -4 +t5 -3q14 -4 18 -31q0 -3 8 2q2 2 2 3zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5 +t-30 -18.5t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43 +q-19 4 -51 9.5t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49 +t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54 +q110 143 124 195q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5 +t-40.5 -33.5t-61 -14q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5 +t15.5 47.5q1 -31 8 -56.5t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" /> + <glyph glyph-name="dribble" unicode="" +d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 +t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 +q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -5 6.5 -17t7.5 -17q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 +t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="skype" unicode="" +d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 +t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 +q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 +q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" /> + <glyph glyph-name="foursquare" unicode="" horiz-adv-x="1280" +d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z +M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324 +l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" /> + <glyph glyph-name="trello" unicode="" +d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 +q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> + <glyph glyph-name="female" unicode="" horiz-adv-x="1280" +d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 +q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> + <glyph glyph-name="male" unicode="" horiz-adv-x="1024" +d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z +M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> + <glyph glyph-name="gittip" unicode="" +d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 +t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="sun" unicode="" horiz-adv-x="1792" +d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 +l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 +q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" /> + <glyph glyph-name="_366" unicode="" +d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 +t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" /> + <glyph glyph-name="archive" unicode="" horiz-adv-x="1792" +d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 +q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" /> + <glyph glyph-name="bug" unicode="" horiz-adv-x="1664" +d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 +q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 +t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" /> + <glyph glyph-name="vk" unicode="" horiz-adv-x="1920" +d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-40 -51 -55 -72t-30.5 -49.5t-12 -42t13 -34.5t32.5 -43t57 -53q4 -2 5 -4q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 +t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 +q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q16 19 38 30q53 26 239 24 +q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 +q39 5 64 -2.5t31 -16.5z" /> + <glyph glyph-name="weibo" unicode="" horiz-adv-x="1792" +d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 +q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 +q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 +q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z +M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" /> + <glyph glyph-name="renren" unicode="" +d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 +q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" /> + <glyph glyph-name="_372" unicode="" horiz-adv-x="1408" +d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 +t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 +t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -4 1 -50t-1 -72q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 +t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" /> + <glyph glyph-name="stack_exchange" unicode="" horiz-adv-x="1280" +d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z +" /> + <glyph glyph-name="_374" unicode="" +d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 +t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="arrow_circle_alt_left" unicode="" +d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 +t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_376" unicode="" +d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z +M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="dot_circle_alt" unicode="" +d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 +t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_378" unicode="" horiz-adv-x="1664" +d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 +q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 17 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" /> + <glyph glyph-name="vimeo_square" unicode="" +d="M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179 +q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_380" unicode="" horiz-adv-x="1152" +d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 +q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" /> + <glyph glyph-name="plus_square_o" unicode="" horiz-adv-x="1408" +d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 +q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_382" unicode="" horiz-adv-x="2176" +d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40 +t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29 +q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" /> + <glyph glyph-name="_383" unicode="" horiz-adv-x="1664" +d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9 +q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102 +t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" /> + <glyph glyph-name="_384" unicode="" +d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69 +q-47 32 -142 92.5t-142 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13 +t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" /> + <glyph glyph-name="_385" unicode="" horiz-adv-x="1792" +d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5 +t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21 +t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286 +t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273 +t273 -182.5t331.5 -68z" /> + <glyph glyph-name="_386" unicode="" horiz-adv-x="1792" +d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" /> + <glyph glyph-name="_387" unicode="" horiz-adv-x="2048" +d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 +q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" /> + <glyph glyph-name="_388" unicode="" horiz-adv-x="2304" +d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 +q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" /> + <glyph glyph-name="_389" unicode="" +d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q44 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 +q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" /> + <glyph glyph-name="uniF1A0" unicode="" +d="M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5 +t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z" /> + <glyph glyph-name="f1a1" unicode="" horiz-adv-x="1792" +d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26 +t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37 +q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191 +t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="_392" unicode="" +d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54 +q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83 +q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 +q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_393" unicode="" +d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 +v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 +t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="f1a4" unicode="" horiz-adv-x="1920" +d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328 +v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" /> + <glyph glyph-name="_395" unicode="" +d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 +t84.5 -203.5z" /> + <glyph glyph-name="_396" unicode="" horiz-adv-x="2048" +d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123 +v-369h123z" /> + <glyph glyph-name="_397" unicode="" +d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101 +v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 +q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_398" unicode="" horiz-adv-x="2038" +d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14 +q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24 +q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33 +q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5 +t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43 +q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5 +t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13 +t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" /> + <glyph glyph-name="_399" unicode="" +d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10 +q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14 +q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14 +t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44 +q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" /> + <glyph glyph-name="_400" unicode="" +d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z +M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5 +t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5 +q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126 +t135.5 51q85 0 145 -60.5t60 -145.5z" /> + <glyph glyph-name="f1ab" unicode="" +d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5 +q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28 +q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z +M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11 +q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q107 36 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5 +q20 0 20 -21v-418z" /> + <glyph glyph-name="_402" unicode="" horiz-adv-x="1792" +d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48 +l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23 +t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128 +q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128 +q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" /> + <glyph glyph-name="_403" unicode="" +d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9 +t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64 +q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 +q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9 +t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64 +q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 +q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9 +t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" /> + <glyph glyph-name="_404" unicode="" horiz-adv-x="1280" +d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68q29 28 68.5 28t67.5 -28l228 -228h368l228 228q28 28 68 28t68 -28q28 -29 28 -68.5t-28 -67.5zM864 1152 +q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> + <glyph glyph-name="uniF1B1" unicode="" horiz-adv-x="1664" +d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5 +q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819 +q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5 +t100.5 134t141.5 55.5z" /> + <glyph glyph-name="_406" unicode="" horiz-adv-x="768" +d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" /> + <glyph glyph-name="_407" unicode="" horiz-adv-x="1792" +d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z +" /> + <glyph glyph-name="_408" unicode="" horiz-adv-x="2304" +d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67 +t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-4 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70 +v-400l434 -186q36 -16 57 -48t21 -70z" /> + <glyph glyph-name="_409" unicode="" horiz-adv-x="2048" +d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658 +q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204 +q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" /> + <glyph glyph-name="_410" unicode="" +d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5 +t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217 +t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" /> + <glyph glyph-name="_411" unicode="" horiz-adv-x="1792" +d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5 +q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89 +q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" /> + <glyph glyph-name="_412" unicode="" +d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5 +q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5 +q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z +" /> + <glyph glyph-name="_413" unicode="" horiz-adv-x="1792" +d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188 +l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5 +t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1 +q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" /> + <glyph glyph-name="_414" unicode="" horiz-adv-x="2048" +d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384 +q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5 +l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" /> + <glyph glyph-name="_415" unicode="" horiz-adv-x="2048" +d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5 +t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z +M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" /> + <glyph glyph-name="_416" unicode="" +d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384 +q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" /> + <glyph glyph-name="_417" unicode="" +d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64 +q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37 +q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_418" unicode="" horiz-adv-x="1024" +d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" /> + <glyph glyph-name="_419" unicode="" horiz-adv-x="2304" +d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11 +q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245 +q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785 +l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242 +q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236 +q0 -11 -8 -19t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786 +q-13 2 -22 11t-9 22v899q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" /> + <glyph glyph-name="uniF1C0" unicode="" +d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127 +t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5 +t-103 128v128q0 69 103 128t280 93.5t385 34.5z" /> + <glyph glyph-name="uniF1C1" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197 +q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8 +q-1 1 -1 2q-1 2 -1 3q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" /> + <glyph glyph-name="_422" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4q0 3 -0.5 6.5t-1.5 8t-1 6.5q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5 +t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 438h90v107h-300z" /> + <glyph glyph-name="_423" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107 +h-290v-107h68l189 -272l-194 -283h-68z" /> + <glyph glyph-name="_424" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" /> + <glyph glyph-name="_425" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" /> + <glyph glyph-name="_426" unicode="" +d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400 +v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79 +q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" /> + <glyph glyph-name="_427" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5 +q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" /> + <glyph glyph-name="_428" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" /> + <glyph glyph-name="_429" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243 +l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" /> + <glyph glyph-name="_430" unicode="" +d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406 +q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" /> + <glyph glyph-name="_431" unicode="" horiz-adv-x="1792" +d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 +q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" /> + <glyph glyph-name="_432" unicode="" horiz-adv-x="2048" +d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 +q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 +t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97l93 -108q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5t-85 -189.5z" /> + <glyph glyph-name="_433" unicode="" horiz-adv-x="1792" +d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 +q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 +t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" /> + <glyph glyph-name="_434" unicode="" horiz-adv-x="1792" +d="M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5 +t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z" /> + <glyph glyph-name="uniF1D0" unicode="" horiz-adv-x="1792" +d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 +t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 +t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 +q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" /> + <glyph glyph-name="uniF1D1" unicode="" horiz-adv-x="1792" +d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 +l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 +q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 +q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 +t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 +t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="uniF1D2" unicode="" +d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 +q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 +q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 +q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_438" unicode="" horiz-adv-x="1792" +d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58 +q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47 +q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171 +v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" /> + <glyph glyph-name="_439" unicode="" +d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="uniF1D5" unicode="" horiz-adv-x="1280" +d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5 +t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153 +t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" /> + <glyph glyph-name="uniF1D6" unicode="" horiz-adv-x="1792" +d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5 +q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20 +t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5 +t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" /> + <glyph glyph-name="uniF1D7" unicode="" horiz-adv-x="2048" +d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25 +q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5 +q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109 +q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" /> + <glyph glyph-name="_443" unicode="" horiz-adv-x="1792" +d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" /> + <glyph glyph-name="_444" unicode="" horiz-adv-x="1792" +d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137 +l863 639l-478 -797z" /> + <glyph glyph-name="_445" unicode="" +d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 +t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23 +t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" /> + <glyph glyph-name="_446" unicode="" +d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 +t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_447" unicode="" horiz-adv-x="1792" +d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15 +t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2 +t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160 +q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5 +q0 -26 -12 -48t-36 -22z" /> + <glyph glyph-name="_448" unicode="" horiz-adv-x="1280" +d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179 +q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" /> + <glyph glyph-name="_449" unicode="" +d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256 +q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" /> + <glyph glyph-name="uniF1E0" unicode="" +d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5 +t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" /> + <glyph glyph-name="_451" unicode="" +d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5 +t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_452" unicode="" horiz-adv-x="1792" +d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5 +t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91 +q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9 +t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" /> + <glyph glyph-name="_453" unicode="" horiz-adv-x="1792" +d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323 +l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" /> + <glyph glyph-name="_454" unicode="" horiz-adv-x="1792" +d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 +v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192 +q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23 +zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5 +t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" /> + <glyph glyph-name="_455" unicode="" horiz-adv-x="1792" +d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z +M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" /> + <glyph glyph-name="_456" unicode="" horiz-adv-x="1792" +d="M1755 1083q37 -38 37 -90.5t-37 -90.5l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234 +l401 400q38 37 91 37t90 -37z" /> + <glyph glyph-name="_457" unicode="" horiz-adv-x="1792" +d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5 +t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z +M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q4 -2 11.5 -7 +t10.5 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" /> + <glyph glyph-name="_458" unicode="" horiz-adv-x="1792" +d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" /> + <glyph glyph-name="_459" unicode="" +d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36 +q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q71 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5 +t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87 +q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" /> + <glyph glyph-name="_460" unicode="" horiz-adv-x="2048" +d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19 +t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" /> + <glyph glyph-name="_461" unicode="" horiz-adv-x="2048" +d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121 +q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z +M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" /> + <glyph glyph-name="_462" unicode="" horiz-adv-x="1792" +d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 +t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5 +t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5 +t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z +M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38 +h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_463" unicode="" +d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246 +q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598 +q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" /> + <glyph glyph-name="_464" unicode="" horiz-adv-x="1792" +d="M441 864q33 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640 +q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z" /> + <glyph glyph-name="uniF1F0" unicode="" horiz-adv-x="2304" +d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27 +q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128 +q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_466" unicode="" horiz-adv-x="2304" +d="M1119 1195q-128 85 -281 85q-103 0 -197.5 -40.5t-162.5 -108.5t-108.5 -162t-40.5 -197q0 -104 40.5 -198t108.5 -162t162 -108.5t198 -40.5q153 0 281 85q-131 107 -178 265.5t0.5 316.5t177.5 265zM1152 1171q-126 -99 -172 -249.5t-0.5 -300.5t172.5 -249 +q127 99 172.5 249t-0.5 300.5t-172 249.5zM1185 1195q130 -107 177.5 -265.5t0.5 -317t-178 -264.5q128 -85 281 -85q104 0 198 40.5t162 108.5t108.5 162t40.5 198q0 103 -40.5 197t-108.5 162t-162.5 108.5t-197.5 40.5q-153 0 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17z +M1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-2h-3v3h3h2v-1zM1947 7h3l-4 5h2l1 1q1 1 1 3t-1 3l-1 1h-3h-6v-13h3v5h1zM685 75q0 19 11 31t30 12q18 0 29 -12.5t11 -30.5q0 -19 -11 -31t-29 -12q-19 0 -30 12t-11 31zM1158 119q30 0 35 -32 +h-70q5 32 35 32zM1514 75q0 19 11 31t29 12t29.5 -12.5t11.5 -30.5q0 -19 -11 -31t-30 -12q-18 0 -29 12t-11 31zM1786 75q0 18 11.5 30.5t29.5 12.5t29.5 -12.5t11.5 -30.5q0 -19 -11.5 -31t-29.5 -12t-29.5 12.5t-11.5 30.5zM1944 3q-2 0 -4 1q-1 0 -3 2t-2 3q-1 2 -1 4 +q0 3 1 4q0 2 2 4l1 1q2 0 2 1q2 1 4 1q3 0 4 -1l4 -2l2 -4v-1q1 -2 1 -3l-1 -1v-3t-1 -1l-1 -2q-2 -2 -4 -2q-1 -1 -4 -1zM599 7h30v85q0 24 -14.5 38.5t-39.5 15.5q-32 0 -47 -24q-14 24 -45 24q-24 0 -39 -20v16h-30v-135h30v75q0 36 33 36q30 0 30 -36v-75h29v75 +q0 36 33 36q30 0 30 -36v-75zM765 7h29v68v67h-29v-16q-17 20 -43 20q-29 0 -48 -20t-19 -51t19 -51t48 -20q28 0 43 20v-17zM943 48q0 34 -47 40l-14 2q-23 4 -23 14q0 15 25 15q23 0 43 -11l12 24q-22 14 -55 14q-26 0 -41 -12t-15 -32q0 -33 47 -39l13 -2q24 -4 24 -14 +q0 -17 -31 -17q-25 0 -45 14l-13 -23q25 -17 58 -17q29 0 45.5 12t16.5 32zM1073 14l-8 25q-13 -7 -26 -7q-19 0 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61q0 -50 47 -50q21 0 36 10zM1159 146q-29 0 -48 -20t-19 -51q0 -32 19.5 -51.5t49.5 -19.5q33 0 55 19l-14 22 +q-18 -15 -39 -15q-34 0 -41 33h101v12q0 32 -18 51.5t-46 19.5zM1318 146q-23 0 -35 -20v16h-30v-135h30v76q0 35 29 35q10 0 18 -4l9 28q-9 4 -21 4zM1348 75q0 -31 19.5 -51t52.5 -20q29 0 48 16l-14 24q-18 -13 -35 -12q-18 0 -29.5 12t-11.5 31t11.5 31t29.5 12 +q19 0 35 -12l14 24q-20 16 -48 16q-33 0 -52.5 -20t-19.5 -51zM1593 7h30v68v67h-30v-16q-15 20 -42 20q-29 0 -48.5 -20t-19.5 -51t19.5 -51t48.5 -20q28 0 42 20v-17zM1726 146q-23 0 -35 -20v16h-29v-135h29v76q0 35 29 35q10 0 18 -4l9 28q-8 4 -21 4zM1866 7h29v68v122 +h-29v-71q-15 20 -43 20t-47.5 -20.5t-19.5 -50.5t19.5 -50.5t47.5 -20.5q29 0 43 20v-17zM1944 27l-2 -1h-3q-2 -1 -4 -3q-3 -1 -3 -4q-1 -2 -1 -6q0 -3 1 -5q0 -2 3 -4q2 -2 4 -3t5 -1q4 0 6 1q0 1 2 2l2 1q1 1 3 4q1 2 1 5q0 4 -1 6q-1 1 -3 4q0 1 -2 2l-2 1q-1 0 -3 0.5 +t-3 0.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_467" unicode="" horiz-adv-x="2304" +d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42 +q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604 +v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569 +q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73 +t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" /> + <glyph glyph-name="f1f3" unicode="" horiz-adv-x="2304" +d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z +M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260 +l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279 +v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040 +q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168 +q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5 +t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21 +h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5 +t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" /> + <glyph glyph-name="_469" unicode="" horiz-adv-x="2304" +d="M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16 +t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76 +q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59 +t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489 +l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66 +q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_470" unicode="" horiz-adv-x="2304" +d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109 +q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118 +q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151 +q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31 +q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_471" unicode="" horiz-adv-x="2048" +d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5 +l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5 +l418 363q10 8 23.5 7t21.5 -11z" /> + <glyph glyph-name="_472" unicode="" horiz-adv-x="2048" +d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128 +q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161 +q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" /> + <glyph glyph-name="_473" unicode="" horiz-adv-x="1408" +d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704 +q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167 +q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /> + <glyph glyph-name="_474" unicode="" +d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5 +t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 +t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_475" unicode="" +d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53 +q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24 +t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61 +t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" /> + <glyph glyph-name="_476" unicode="" horiz-adv-x="1792" +d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10 +t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" /> + <glyph glyph-name="f1fc" unicode="" horiz-adv-x="1792" +d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5 +t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" /> + <glyph glyph-name="_478" unicode="" horiz-adv-x="1792" +d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11q24 0 44 -7t31 -15t33 -27q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5 +t47 37.5q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-24 0 -44 7t-31 15t-33 27q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38 +t-58 27t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448 +h256v448h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5 +q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" /> + <glyph glyph-name="_479" unicode="" horiz-adv-x="2048" +d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" /> + <glyph glyph-name="_480" unicode="" horiz-adv-x="1792" +d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_481" unicode="" horiz-adv-x="2048" +d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9 +t9 -23z" /> + <glyph glyph-name="_482" unicode="" horiz-adv-x="1792" +d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20 +q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50 +t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1 +q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" /> + <glyph glyph-name="_483" unicode="" +d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73 +q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110 +q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960 +q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_484" unicode="" horiz-adv-x="2048" +d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5 +t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5 +t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" /> + <glyph glyph-name="_485" unicode="" horiz-adv-x="2048" +d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5 +t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" /> + <glyph glyph-name="_486" unicode="" horiz-adv-x="2304" +d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94 +q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469 +q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400 +q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" /> + <glyph glyph-name="_487" unicode="" +d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5 +h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 +t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" /> + <glyph glyph-name="_488" unicode="" horiz-adv-x="2048" +d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327 +q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5 +q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" /> + <glyph glyph-name="_489" unicode="" horiz-adv-x="1280" +d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q17 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119 +t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5 +t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14 +q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88 +q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5 +t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" /> + <glyph glyph-name="_490" unicode="" horiz-adv-x="2048" +d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206 +q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307 +t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14 +t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" /> + <glyph glyph-name="_491" unicode="" +d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5 +t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" /> + <glyph glyph-name="_492" unicode="" +d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55 +q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410 +q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" /> + <glyph glyph-name="_493" unicode="" +d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" /> + <glyph glyph-name="_494" unicode="" horiz-adv-x="2048" +d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335 +q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5 +q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360l15 -6l188 199v347l-187 194q-13 -8 -29 -10zM986 1438 +h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13zM552 226h402l64 66 +l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946 +l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82 +zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" /> + <glyph glyph-name="f210" unicode="" +d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" /> + <glyph glyph-name="_496" unicode="" +d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384 +q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" /> + <glyph glyph-name="f212" unicode="" horiz-adv-x="2048" +d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021 +q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25 +q209 0 374 -102q172 107 374 102z" /> + <glyph glyph-name="_498" unicode="" horiz-adv-x="2048" +d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101 +q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284 +q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" /> + <glyph glyph-name="_499" unicode="" +d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34 +l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114 +v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z +M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378 +v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51 +h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5 +t-43 -34t-16.5 -53.5z" /> + <glyph glyph-name="_500" unicode="" horiz-adv-x="2048" +d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832 +q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" /> + <glyph glyph-name="_501" unicode="" horiz-adv-x="2048" +d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126t-103.5 132.5t-108.5 126.5t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5 +t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113 +t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5 +q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" /> + <glyph glyph-name="_502" unicode="" horiz-adv-x="1664" +d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 +t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 +q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" /> + <glyph glyph-name="_503" unicode="" horiz-adv-x="1664" +d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 +t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 +q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" /> + <glyph glyph-name="_504" unicode="" horiz-adv-x="2048" +d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20 +l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" /> + <glyph glyph-name="_505" unicode="" horiz-adv-x="2048" +d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 +q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83 +q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314 +v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 +q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" /> + <glyph glyph-name="_506" unicode="" +d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14 +t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5 +q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31 +t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" /> + <glyph glyph-name="_507" unicode="" horiz-adv-x="2304" +d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5 +t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105 +l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226 +t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" /> + <glyph glyph-name="_508" unicode="" +d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12 +q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384 +q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5 +t158.5 -65.5t65.5 -158.5z" /> + <glyph glyph-name="_509" unicode="" horiz-adv-x="1792" +d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221 +q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124 +t127 -344z" /> + <glyph glyph-name="venus" unicode="" horiz-adv-x="1280" +d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292 +q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" /> + <glyph glyph-name="_511" unicode="" +d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5 +q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_512" unicode="" horiz-adv-x="1280" +d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5 +t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 +t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_513" unicode="" +d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 +q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 +t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_514" unicode="" horiz-adv-x="1792" +d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 +q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9 +t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5 +t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_515" unicode="" horiz-adv-x="1792" +d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23 +t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391 +q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391 +q0 -226 -154 -391q103 -57 218 -57z" /> + <glyph glyph-name="_516" unicode="" horiz-adv-x="1920" +d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230 +q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9 +t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128 +q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -28 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" /> + <glyph glyph-name="_517" unicode="" horiz-adv-x="2048" +d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23 +t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9 +t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5 +t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" /> + <glyph glyph-name="_518" unicode="" +d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5 +t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 +t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_519" unicode="" horiz-adv-x="1280" +d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22 +t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5 +t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_520" unicode="" horiz-adv-x="2048" +d="M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5 +t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5 +t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_521" unicode="" horiz-adv-x="1280" +d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5 +t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_522" unicode="" horiz-adv-x="1280" +d="M1024 576q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123 +t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z" /> + <glyph glyph-name="_523" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="_524" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="_525" unicode="" +d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" /> + <glyph glyph-name="_526" unicode="" horiz-adv-x="1280" +d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5 +l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5 +q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" /> + <glyph glyph-name="_527" unicode="" +d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5 +t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233 +l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" /> + <glyph glyph-name="_528" unicode="" horiz-adv-x="1792" +d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216 +q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" /> + <glyph glyph-name="_529" unicode="" horiz-adv-x="2048" +d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5 +t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5 +t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" /> + <glyph glyph-name="_530" unicode="" horiz-adv-x="2048" +d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136 +q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69 +t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" /> + <glyph glyph-name="_531" unicode="" horiz-adv-x="2048" +d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704 +q-26 0 -45 -19t-19 -45v-384h1152z" /> + <glyph glyph-name="_532" unicode="" +d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" /> + <glyph glyph-name="_533" unicode="" +d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56 +t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" /> + <glyph glyph-name="_534" unicode="" +d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47 +t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" /> + <glyph glyph-name="_535" unicode="" horiz-adv-x="1792" +d="M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116 +q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z" /> + <glyph glyph-name="_536" unicode="" +d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" /> + <glyph glyph-name="_537" unicode="" horiz-adv-x="2296" +d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5 +q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5 +q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42 +q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37 +q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5 +q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139 +q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 5 5 8q16 18 60 23h13q5 18 19 30t33 8 +t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132 +q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132 +q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z +M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-105 2 -211 0v1q-1 -27 2.5 -86 +t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103 +q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34q0 2 0.5 3.5t1.5 3t1 2.5v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4 +l-10 -2.5t-12 -2l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-6 -1 -9 -1q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130 +t-73 70q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -1 -1 -4t-1 -5q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150 +q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12 +q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" /> + <glyph glyph-name="_538" unicode="" horiz-adv-x="2304" +d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5 +t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5 +t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" /> + <glyph glyph-name="_539" unicode="" horiz-adv-x="1792" +d="M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348 +t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23 +t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96 +q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512 +q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z" /> + <glyph glyph-name="_540" unicode="" horiz-adv-x="2304" +d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113 +v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z" /> + <glyph glyph-name="_541" unicode="" horiz-adv-x="2304" +d="M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9 +h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" /> + <glyph glyph-name="_542" unicode="" horiz-adv-x="2304" +d="M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9 +h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" /> + <glyph glyph-name="_543" unicode="" horiz-adv-x="2304" +d="M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9 +h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" /> + <glyph glyph-name="_544" unicode="" horiz-adv-x="2304" +d="M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23 +v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" /> + <glyph glyph-name="_545" unicode="" horiz-adv-x="1280" +d="M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z" /> + <glyph glyph-name="_546" unicode="" horiz-adv-x="1024" +d="M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z" /> + <glyph glyph-name="_547" unicode="" horiz-adv-x="2048" +d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128 +h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" /> + <glyph glyph-name="_548" unicode="" horiz-adv-x="2304" +d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256 +v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" /> + <glyph glyph-name="_549" unicode="" +d="M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z" /> + <glyph glyph-name="_550" unicode="" +d="M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68 +z" /> + <glyph glyph-name="_551" unicode="" horiz-adv-x="2304" +d="M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5 +t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88 +t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90 +t90 38h2048q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_552" unicode="" horiz-adv-x="2304" +d="M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294 +t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z +M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_553" unicode="" horiz-adv-x="1792" +d="M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113 +zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z" /> + <glyph glyph-name="_554" unicode="" horiz-adv-x="2304" +d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64 +q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91 +t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5 +t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z" /> + <glyph glyph-name="_555" unicode="" +d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 +t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5 +t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" /> + <glyph glyph-name="_556" unicode="" +d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 +t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z" /> + <glyph glyph-name="_557" unicode="" +d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 +t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z" /> + <glyph glyph-name="_558" unicode="" +d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 +t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196 +h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" /> + <glyph glyph-name="_559" unicode="" +d="M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87 +t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9 +h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z" /> + <glyph glyph-name="_560" unicode="" +d="M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25 +q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27 +t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21 +q72 69 174 69z" /> + <glyph glyph-name="_561" unicode="" horiz-adv-x="1792" +d="M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33 +t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52 +h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z" /> + <glyph glyph-name="_562" unicode="" horiz-adv-x="1792" +d="M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668 +q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17 +t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5 +t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5 +q0 -42 -23 -78t-61 -53l-310 -141h91z" /> + <glyph glyph-name="_563" unicode="" horiz-adv-x="2048" +d="M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32 +q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68 +q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z" /> + <glyph glyph-name="_564" unicode="" horiz-adv-x="2048" +d="M459 -256q-77 0 -137.5 47.5t-79.5 122.5l-101 401q-13 57 -13 108q0 45 -5 67l-116 477q-7 27 -7 57q0 93 62 161t155 78q17 85 82.5 139t152.5 54q83 0 148 -51.5t85 -132.5l83 -348l103 428q20 81 85 132.5t148 51.5q89 0 155.5 -57.5t80.5 -144.5q92 -10 152 -79 +t60 -162q0 -24 -7 -59l-123 -512q10 7 37.5 28.5t38.5 29.5t35 23t41 20.5t41.5 11t49.5 5.5q105 0 180 -74t75 -179q0 -62 -28.5 -118t-78.5 -94l-507 -380q-68 -51 -153 -51h-694zM1104 1408q-38 0 -68.5 -24t-39.5 -62l-164 -682h-127l-145 602q-9 38 -39.5 62t-68.5 24 +q-48 0 -80 -33t-32 -80q0 -15 3 -28l132 -547h-26l-99 408q-9 37 -40 62.5t-69 25.5q-47 0 -80 -33t-33 -79q0 -14 3 -26l116 -478q7 -28 9 -86t10 -88l100 -401q8 -32 34 -52.5t59 -20.5h694q42 0 76 26l507 379q56 43 56 110q0 52 -37.5 88.5t-89.5 36.5q-43 0 -77 -26 +l-307 -230v227q0 4 32 138t68 282t39 161q4 18 4 29q0 47 -32 81t-79 34q-39 0 -69.5 -24t-39.5 -62l-116 -482h-26l150 624q3 14 3 28q0 48 -31.5 82t-79.5 34z" /> + <glyph glyph-name="_565" unicode="" horiz-adv-x="1792" +d="M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5 +q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5 +v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32 +v-384h32z" /> + <glyph glyph-name="_566" unicode="" +d="M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181 +v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46 +q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5 +q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308 +q0 -53 37.5 -90.5t90.5 -37.5h668z" /> + <glyph glyph-name="_567" unicode="" horiz-adv-x="1973" +d="M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5 +t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0 -29 19l-188 427l-45 -590q-1 -12 -10 -20.5t-21 -8.5h-135q-13 0 -23 10q-9 10 -9 24l78 961q1 12 10 20.5t21 8.5h142q20 0 29 -19l220 -520q10 -24 20 -51q3 7 9.5 24.5t10.5 26.5l221 520q9 19 29 19h141 +q13 0 22 -8.5t10 -20.5z" /> + <glyph glyph-name="_568" unicode="" horiz-adv-x="1792" +d="M1042 833q0 88 -60 121q-33 18 -117 18h-123v-281h162q66 0 102 37t36 105zM1094 548l205 -373q8 -17 -1 -31q-8 -16 -27 -16h-152q-20 0 -28 17l-194 365h-155v-350q0 -14 -9 -23t-23 -9h-134q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h294q128 0 190 -24q85 -31 134 -109 +t49 -180q0 -92 -42.5 -165.5t-115.5 -109.5q6 -10 9 -16zM896 1376q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM1792 640 +q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="_569" unicode="" horiz-adv-x="1792" +d="M605 303q153 0 257 104q14 18 3 36l-45 82q-6 13 -24 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78 +q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-148 0 -246 -96.5t-98 -240.5q0 -146 97 -241.5t247 -95.5zM1235 303q153 0 257 104q14 18 4 36l-45 82q-8 14 -25 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5 +t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-147 0 -245.5 -96.5t-98.5 -240.5q0 -146 97 -241.5t247 -95.5zM896 1376 +q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191 +t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71z" /> + <glyph glyph-name="f260" unicode="" horiz-adv-x="2048" +d="M736 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1312 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" /> + <glyph glyph-name="f261" unicode="" horiz-adv-x="1792" +d="M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640q0 -182 -71 -348t-191 -286t-286 -191 +t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="_572" unicode="" horiz-adv-x="2304" +d="M651 539q0 -39 -27.5 -66.5t-65.5 -27.5q-39 0 -66.5 27.5t-27.5 66.5q0 38 27.5 65.5t66.5 27.5q38 0 65.5 -27.5t27.5 -65.5zM1805 540q0 -39 -27.5 -66.5t-66.5 -27.5t-66.5 27.5t-27.5 66.5t27.5 66t66.5 27t66.5 -27t27.5 -66zM765 539q0 79 -56.5 136t-136.5 57 +t-136.5 -56.5t-56.5 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM1918 540q0 80 -56.5 136.5t-136.5 56.5q-79 0 -136 -56.5t-57 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM850 539q0 -116 -81.5 -197.5t-196.5 -81.5q-116 0 -197.5 82t-81.5 197 +t82 196.5t197 81.5t196.5 -81.5t81.5 -196.5zM2004 540q0 -115 -81.5 -196.5t-197.5 -81.5q-115 0 -196.5 81.5t-81.5 196.5t81.5 196.5t196.5 81.5q116 0 197.5 -81.5t81.5 -196.5zM1040 537q0 191 -135.5 326.5t-326.5 135.5q-125 0 -231 -62t-168 -168.5t-62 -231.5 +t62 -231.5t168 -168.5t231 -62q191 0 326.5 135.5t135.5 326.5zM1708 1110q-254 111 -556 111q-319 0 -573 -110q117 0 223 -45.5t182.5 -122.5t122 -183t45.5 -223q0 115 43.5 219.5t118 180.5t177.5 123t217 50zM2187 537q0 191 -135 326.5t-326 135.5t-326.5 -135.5 +t-135.5 -326.5t135.5 -326.5t326.5 -135.5t326 135.5t135 326.5zM1921 1103h383q-44 -51 -75 -114.5t-40 -114.5q110 -151 110 -337q0 -156 -77 -288t-209 -208.5t-287 -76.5q-133 0 -249 56t-196 155q-47 -56 -129 -179q-11 22 -53.5 82.5t-74.5 97.5 +q-80 -99 -196.5 -155.5t-249.5 -56.5q-155 0 -287 76.5t-209 208.5t-77 288q0 186 110 337q-9 51 -40 114.5t-75 114.5h365q149 100 355 156.5t432 56.5q224 0 421 -56t348 -157z" /> + <glyph glyph-name="f263" unicode="" horiz-adv-x="1280" +d="M640 629q-188 0 -321 133t-133 320q0 188 133 321t321 133t321 -133t133 -321q0 -187 -133 -320t-321 -133zM640 1306q-92 0 -157.5 -65.5t-65.5 -158.5q0 -92 65.5 -157.5t157.5 -65.5t157.5 65.5t65.5 157.5q0 93 -65.5 158.5t-157.5 65.5zM1163 574q13 -27 15 -49.5 +t-4.5 -40.5t-26.5 -38.5t-42.5 -37t-61.5 -41.5q-115 -73 -315 -94l73 -72l267 -267q30 -31 30 -74t-30 -73l-12 -13q-31 -30 -74 -30t-74 30q-67 68 -267 268l-267 -268q-31 -30 -74 -30t-73 30l-12 13q-31 30 -31 73t31 74l267 267l72 72q-203 21 -317 94 +q-39 25 -61.5 41.5t-42.5 37t-26.5 38.5t-4.5 40.5t15 49.5q10 20 28 35t42 22t56 -2t65 -35q5 -4 15 -11t43 -24.5t69 -30.5t92 -24t113 -11q91 0 174 25.5t120 50.5l38 25q33 26 65 35t56 2t42 -22t28 -35z" /> + <glyph glyph-name="_574" unicode="" +d="M927 956q0 -66 -46.5 -112.5t-112.5 -46.5t-112.5 46.5t-46.5 112.5t46.5 112.5t112.5 46.5t112.5 -46.5t46.5 -112.5zM1141 593q-10 20 -28 32t-47.5 9.5t-60.5 -27.5q-10 -8 -29 -20t-81 -32t-127 -20t-124 18t-86 36l-27 18q-31 25 -60.5 27.5t-47.5 -9.5t-28 -32 +q-22 -45 -2 -74.5t87 -73.5q83 -53 226 -67l-51 -52q-142 -142 -191 -190q-22 -22 -22 -52.5t22 -52.5l9 -9q22 -22 52.5 -22t52.5 22l191 191q114 -115 191 -191q22 -22 52.5 -22t52.5 22l9 9q22 22 22 52.5t-22 52.5l-191 190l-52 52q141 14 225 67q67 44 87 73.5t-2 74.5 +zM1092 956q0 134 -95 229t-229 95t-229 -95t-95 -229t95 -229t229 -95t229 95t95 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_575" unicode="" horiz-adv-x="1720" +d="M1565 1408q65 0 110 -45.5t45 -110.5v-519q0 -176 -68 -336t-182.5 -275t-274 -182.5t-334.5 -67.5q-176 0 -335.5 67.5t-274.5 182.5t-183 275t-68 336v519q0 64 46 110t110 46h1409zM861 344q47 0 82 33l404 388q37 35 37 85q0 49 -34.5 83.5t-83.5 34.5q-47 0 -82 -33 +l-323 -310l-323 310q-35 33 -81 33q-49 0 -83.5 -34.5t-34.5 -83.5q0 -51 36 -85l405 -388q33 -33 81 -33z" /> + <glyph glyph-name="_576" unicode="" horiz-adv-x="2304" +d="M1494 -103l-295 695q-25 -49 -158.5 -305.5t-198.5 -389.5q-1 -1 -27.5 -0.5t-26.5 1.5q-82 193 -255.5 587t-259.5 596q-21 50 -66.5 107.5t-103.5 100.5t-102 43q0 5 -0.5 24t-0.5 27h583v-50q-39 -2 -79.5 -16t-66.5 -43t-10 -64q26 -59 216.5 -499t235.5 -540 +q31 61 140 266.5t131 247.5q-19 39 -126 281t-136 295q-38 69 -201 71v50l513 -1v-47q-60 -2 -93.5 -25t-12.5 -69q33 -70 87 -189.5t86 -187.5q110 214 173 363q24 55 -10 79.5t-129 26.5q1 7 1 25v24q64 0 170.5 0.5t180 1t92.5 0.5v-49q-62 -2 -119 -33t-90 -81 +l-213 -442q13 -33 127.5 -290t121.5 -274l441 1017q-14 38 -49.5 62.5t-65 31.5t-55.5 8v50l460 -4l1 -2l-1 -44q-139 -4 -201 -145q-526 -1216 -559 -1291h-49z" /> + <glyph glyph-name="_577" unicode="" horiz-adv-x="1792" +d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640 +q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5 +t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5 +t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5 +t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191 +t191 -286t71 -348z" /> + <glyph glyph-name="_578" unicode="" horiz-adv-x="1792" +d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962 +q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" /> + <glyph glyph-name="_579" unicode="" horiz-adv-x="1792" +d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5 +q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5 +q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" /> + <glyph glyph-name="_580" unicode="" horiz-adv-x="1792" +d="M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339 +q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z +" /> + <glyph glyph-name="_581" unicode="" horiz-adv-x="1792" +d="M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606 +q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z +M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z" /> + <glyph glyph-name="_582" unicode="" horiz-adv-x="2048" +d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23 +v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> + <glyph glyph-name="_583" unicode="" horiz-adv-x="1792" +d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34 +h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100 +q-68 175 -180 287z" /> + <glyph glyph-name="_584" unicode="" +d="M1401 -11l-6 -6q-113 -113 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6 +q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13 +q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 33 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249 +q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 33 -6t30 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183 +q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46 +t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z" /> + <glyph glyph-name="_585" unicode="" horiz-adv-x="1792" +d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z +M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30 +q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57 +t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133 +q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" /> + <glyph glyph-name="_586" unicode="" horiz-adv-x="1792" +d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9 +h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224 +v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" /> + <glyph glyph-name="_587" unicode="" horiz-adv-x="1792" +d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23 +t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47 +t47 -113v-96h128q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_588" unicode="" horiz-adv-x="1792" +d="M1111 151l-46 -46q-9 -9 -22 -9t-23 9l-188 189l-188 -189q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22t9 23l189 188l-189 188q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l188 -188l188 188q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23l-188 -188l188 -188q9 -10 9 -23t-9 -22z +M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 +q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_589" unicode="" horiz-adv-x="1792" +d="M1303 572l-512 -512q-10 -9 -23 -9t-23 9l-288 288q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l220 -220l444 444q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23 +t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47 +t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_590" unicode="" horiz-adv-x="1792" +d="M448 1536q26 0 45 -19t19 -45v-891l536 429q17 14 40 14q26 0 45 -19t19 -45v-379l536 429q17 14 40 14q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h384z" /> + <glyph glyph-name="_591" unicode="" horiz-adv-x="1024" +d="M512 448q66 0 128 15v-655q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v655q62 -15 128 -15zM512 1536q212 0 362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362t150 362t362 150zM512 1312q14 0 23 9t9 23t-9 23t-23 9q-146 0 -249 -103t-103 -249 +q0 -14 9 -23t23 -9t23 9t9 23q0 119 84.5 203.5t203.5 84.5z" /> + <glyph glyph-name="_592" unicode="" horiz-adv-x="1792" +d="M1745 1239q10 -10 10 -23t-10 -23l-141 -141q-28 -28 -68 -28h-1344q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h576v64q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-64h512q40 0 68 -28zM768 320h256v-512q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v512zM1600 768 +q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1344q-40 0 -68 28l-141 141q-10 10 -10 23t10 23l141 141q28 28 68 28h512v192h256v-192h576z" /> + <glyph glyph-name="_593" unicode="" horiz-adv-x="2048" +d="M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173 +v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" /> + <glyph glyph-name="_594" unicode="" horiz-adv-x="1792" +d="M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472 +q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z" /> + <glyph glyph-name="_595" unicode="" horiz-adv-x="1792" +d="M640 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 640q0 53 -37.5 90.5t-90.5 37.5 +t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-110 0 -211 18q-173 -173 -435 -229q-52 -10 -86 -13q-12 -1 -22 6t-13 18q-4 15 20 37q5 5 23.5 21.5t25.5 23.5t23.5 25.5t24 31.5t20.5 37 +t20 48t14.5 57.5t12.5 72.5q-146 90 -229.5 216.5t-83.5 269.5q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" /> + <glyph glyph-name="_596" unicode="" horiz-adv-x="1792" +d="M640 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 -53 -37.5 -90.5t-90.5 -37.5 +t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5 +t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51 +t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 130 71 248.5t191 204.5t286 136.5t348 50.5t348 -50.5t286 -136.5t191 -204.5t71 -248.5z" /> + <glyph glyph-name="_597" unicode="" horiz-adv-x="1024" +d="M512 345l512 295v-591l-512 -296v592zM0 640v-591l512 296zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" /> + <glyph glyph-name="_598" unicode="" horiz-adv-x="1792" +d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246 +q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" /> + <glyph glyph-name="f27e" unicode="" +d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" /> + <glyph glyph-name="uniF280" unicode="" +d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72 +h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275 +l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" /> + <glyph glyph-name="uniF281" unicode="" horiz-adv-x="1792" +d="M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5 +l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44 +t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106 +q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z" /> + <glyph glyph-name="_602" unicode="" horiz-adv-x="1792" +d="M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53 +q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z" /> + <glyph glyph-name="_603" unicode="" horiz-adv-x="2304" +d="M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z" /> + <glyph glyph-name="_604" unicode="" horiz-adv-x="1792" +d="M1584 246l-218 111q-74 -120 -196.5 -189t-263.5 -69q-147 0 -271 72t-196 196t-72 270q0 110 42.5 209.5t115 172t172 115t209.5 42.5q131 0 247.5 -60.5t192.5 -168.5l215 125q-110 169 -286.5 265t-378.5 96q-161 0 -308 -63t-253 -169t-169 -253t-63 -308t63 -308 +t169 -253t253 -169t308 -63q213 0 397.5 107t290.5 292zM1030 643l693 -352q-116 -253 -334.5 -400t-492.5 -147q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q260 0 470.5 -133.5t335.5 -366.5zM1543 640h-39v-160h-96v352h136q32 0 54.5 -20 +t28.5 -48t1 -56t-27.5 -48t-57.5 -20z" /> + <glyph glyph-name="uniF285" unicode="" horiz-adv-x="1792" +d="M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z" /> + <glyph glyph-name="uniF286" unicode="" horiz-adv-x="1792" +d="M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96 +q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 6 2.5 9.5t8.5 5t9.5 2t11.5 0t9 -0.5v391q-32 15 -32 50q0 23 16.5 39t38.5 16t38.5 -16t16.5 -39q0 -35 -32 -50v-17q45 10 83 10q21 0 59.5 -7.5t54.5 -7.5 +q17 0 47 7.5t37 7.5q16 0 16 -16v-210q0 -15 -35 -21.5t-62 -6.5q-18 0 -54.5 7.5t-55.5 7.5q-40 0 -90 -12v-133q1 0 9 0.5t11.5 0t9.5 -2t8.5 -5t2.5 -9.5v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96 +q16 0 16 -16z" /> + <glyph glyph-name="_607" unicode="" horiz-adv-x="2304" +d="M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96 +q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5 +t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z" /> + <glyph glyph-name="_608" unicode="" horiz-adv-x="1792" +d="M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348 +t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="_609" unicode="" horiz-adv-x="2304" +d="M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22 +q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5 +q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13 +q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z" /> + <glyph glyph-name="_610" unicode="" +d="M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83 +t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20 +q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5 +t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z" /> + <glyph glyph-name="_611" unicode="" +d="M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103 +t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_612" unicode="" +d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273 +t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z" /> + <glyph glyph-name="_613" unicode="" +d="M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 +t103 -385.5z" /> + <glyph glyph-name="_614" unicode="" +d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273 +t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z" /> + <glyph glyph-name="_615" unicode="" horiz-adv-x="1792" +d="M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5 +t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" /> + <glyph glyph-name="_616" unicode="" horiz-adv-x="2048" +d="M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5 +t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416 +q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441 +h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z" /> + <glyph glyph-name="_617" unicode="" horiz-adv-x="1792" +d="M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12 +q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311 +q15 0 25 -12q9 -12 6 -28z" /> + <glyph glyph-name="_618" unicode="" +d="M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5 +t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z" /> + <glyph glyph-name="_619" unicode="" horiz-adv-x="1024" +d="M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" /> + <glyph glyph-name="_620" unicode="" +d="M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5 +t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 +t271.5 -112.5t112.5 -271.5z" /> + <glyph glyph-name="_621" unicode="" horiz-adv-x="1792" +d="M104 830l792 -1015l-868 630q-18 13 -25 34.5t0 42.5l101 308v0zM566 830h660l-330 -1015v0zM368 1442l198 -612h-462l198 612q8 23 33 23t33 -23zM1688 830l101 -308q7 -21 0 -42.5t-25 -34.5l-868 -630l792 1015v0zM1688 830h-462l198 612q8 23 33 23t33 -23z" /> + <glyph glyph-name="_622" unicode="" horiz-adv-x="1792" +d="M384 704h160v224h-160v-224zM1221 372v92q-104 -36 -243 -38q-135 -1 -259.5 46.5t-220.5 122.5l1 -96q88 -80 212 -128.5t272 -47.5q129 0 238 49zM640 704h640v224h-640v-224zM1792 736q0 -187 -99 -352q89 -102 89 -229q0 -157 -129.5 -268t-313.5 -111 +q-122 0 -225 52.5t-161 140.5q-19 -1 -57 -1t-57 1q-58 -88 -161 -140.5t-225 -52.5q-184 0 -313.5 111t-129.5 268q0 127 89 229q-99 165 -99 352q0 209 120 385.5t326.5 279.5t449.5 103t449.5 -103t326.5 -279.5t120 -385.5z" /> + <glyph glyph-name="_623" unicode="" +d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240q0 8 -6 14t-14 6h-32l-378 -256l-210 171l-210 -171l-378 256h-32q-8 0 -14 -6t-6 -14v-1240q0 -8 6 -14 +t14 -6h1240q8 0 14 6t6 14zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240q0 -62 -43 -105t-105 -43h-1240q-62 0 -105 43t-43 105v1240q0 62 43 105t105 43h1240q62 0 105 -43t43 -105z" /> + <glyph glyph-name="_624" unicode="" horiz-adv-x="1792" +d="M896 720q-104 196 -160 278q-139 202 -347 318q-34 19 -70 36q-89 40 -94 32t34 -38l39 -31q62 -43 112.5 -93.5t94.5 -116.5t70.5 -113t70.5 -131q9 -17 13 -25q44 -84 84 -153t98 -154t115.5 -150t131 -123.5t148.5 -90.5q153 -66 154 -60q1 3 -49 37q-53 36 -81 57 +q-77 58 -179 211t-185 310zM549 177q-76 60 -132.5 125t-98 143.5t-71 154.5t-58.5 186t-52 209t-60.5 252t-76.5 289q273 0 497.5 -36t379 -92t271 -144.5t185.5 -172.5t110 -198.5t56 -199.5t12.5 -198.5t-9.5 -173t-20 -143.5t-13 -107l323 -327h-104l-281 285 +q-22 -2 -91.5 -14t-121.5 -19t-138 -6t-160.5 17t-167.5 59t-179 111z" /> + <glyph glyph-name="_625" unicode="" horiz-adv-x="1792" +d="M1374 879q-6 26 -28.5 39.5t-48.5 7.5q-261 -62 -401 -62t-401 62q-26 6 -48.5 -7.5t-28.5 -39.5t7.5 -48.5t39.5 -28.5q194 -46 303 -58q-2 -158 -15.5 -269t-26.5 -155.5t-41 -115.5l-9 -21q-10 -25 1 -49t36 -34q9 -4 23 -4q44 0 60 41l8 20q54 139 71 259h42 +q17 -120 71 -259l8 -20q16 -41 60 -41q14 0 23 4q25 10 36 34t1 49l-9 21q-28 71 -41 115.5t-26.5 155.5t-15.5 269q109 12 303 58q26 6 39.5 28.5t7.5 48.5zM1024 1024q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z +M1600 640q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5zM896 1408q-156 0 -298 -61t-245 -164t-164 -245t-61 -298t61 -298 +t164 -245t245 -164t298 -61t298 61t245 164t164 245t61 298t-61 298t-164 245t-245 164t-298 61zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="_626" unicode="" +d="M1438 723q34 -35 29 -82l-44 -551q-4 -42 -34.5 -70t-71.5 -28q-6 0 -9 1q-44 3 -72.5 36.5t-25.5 77.5l35 429l-143 -8q55 -113 55 -240q0 -216 -148 -372l-137 137q91 101 91 235q0 145 -102.5 248t-247.5 103q-134 0 -236 -92l-137 138q120 114 284 141l264 300 +l-149 87l-181 -161q-33 -30 -77 -27.5t-73 35.5t-26.5 77t34.5 73l239 213q26 23 60 26.5t64 -14.5l488 -283q36 -21 48 -68q17 -67 -26 -117l-205 -232l371 20q49 3 83 -32zM1240 1180q-74 0 -126 52t-52 126t52 126t126 52t126.5 -52t52.5 -126t-52.5 -126t-126.5 -52z +M613 -62q106 0 196 61l139 -139q-146 -116 -335 -116q-148 0 -273.5 73t-198.5 198t-73 273q0 188 116 336l139 -139q-60 -88 -60 -197q0 -145 102.5 -247.5t247.5 -102.5z" /> + <glyph glyph-name="_627" unicode="" +d="M880 336v-160q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h160q14 0 23 -9t9 -23zM1136 832q0 -50 -15 -90t-45.5 -69t-52 -44t-59.5 -36q-32 -18 -46.5 -28t-26 -24t-11.5 -29v-32q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v68q0 35 10.5 64.5 +t24 47.5t39 35.5t41 25.5t44.5 21q53 25 75 43t22 49q0 42 -43.5 71.5t-95.5 29.5q-56 0 -95 -27q-29 -20 -80 -83q-9 -12 -25 -12q-11 0 -19 6l-108 82q-10 7 -12 20t5 23q122 192 349 192q129 0 238.5 -89.5t109.5 -214.5zM768 1280q-130 0 -248.5 -51t-204 -136.5 +t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5 +t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_628" unicode="" horiz-adv-x="1408" +d="M366 1225q-64 0 -110 45.5t-46 110.5q0 64 46 109.5t110 45.5t109.5 -45.5t45.5 -109.5q0 -65 -45.5 -110.5t-109.5 -45.5zM917 583q0 -50 -30 -67.5t-63.5 -6.5t-47.5 34l-367 438q-7 12 -14 15.5t-11 1.5l-3 -3q-7 -8 4 -21l122 -139l1 -354l-161 -457 +q-67 -192 -92 -234q-15 -26 -28 -32q-50 -26 -103 -1q-29 13 -41.5 43t-9.5 57q2 17 197 618l5 416l-85 -164l35 -222q4 -24 -1 -42t-14 -27.5t-19 -16t-17 -7.5l-7 -2q-19 -3 -34.5 3t-24 16t-14 22t-7.5 19.5t-2 9.5l-46 299l211 381q23 34 113 34q75 0 107 -40l424 -521 +q7 -5 14 -17l3 -3l-1 -1q7 -13 7 -29zM514 433q43 -113 88.5 -225t69.5 -168l24 -55q36 -93 42 -125q11 -70 -36 -97q-35 -22 -66 -16t-51 22t-29 35h-1q-6 16 -8 25l-124 351zM1338 -159q31 -49 31 -57q0 -5 -3 -7q-9 -5 -14.5 0.5t-15.5 26t-16 30.5q-114 172 -423 661 +q3 -1 7 1t7 4l3 2q11 9 11 17z" /> + <glyph glyph-name="_629" unicode="" horiz-adv-x="2304" +d="M504 542h171l-1 265zM1530 641q0 87 -50.5 140t-146.5 53h-54v-388h52q91 0 145 57t54 138zM956 1018l1 -756q0 -14 -9.5 -24t-23.5 -10h-216q-14 0 -23.5 10t-9.5 24v62h-291l-55 -81q-10 -15 -28 -15h-267q-21 0 -30.5 18t3.5 35l556 757q9 14 27 14h332q14 0 24 -10 +t10 -24zM1783 641q0 -193 -125.5 -303t-324.5 -110h-270q-14 0 -24 10t-10 24v756q0 14 10 24t24 10h268q200 0 326 -109t126 -302zM1939 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5 +t-7.5 60t-20 91.5t-41 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2123 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-45 -108t-74 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5 +h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2304 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66 104.5t41 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96 +t9.5 -70.5z" /> + <glyph glyph-name="uniF2A0" unicode="" horiz-adv-x="1408" +d="M617 -153q0 11 -13 58t-31 107t-20 69q-1 4 -5 26.5t-8.5 36t-13.5 21.5q-15 14 -51 14q-23 0 -70 -5.5t-71 -5.5q-34 0 -47 11q-6 5 -11 15.5t-7.5 20t-6.5 24t-5 18.5q-37 128 -37 255t37 255q1 4 5 18.5t6.5 24t7.5 20t11 15.5q13 11 47 11q24 0 71 -5.5t70 -5.5 +q36 0 51 14q9 8 13.5 21.5t8.5 36t5 26.5q2 9 20 69t31 107t13 58q0 22 -43.5 52.5t-75.5 42.5q-20 8 -45 8q-34 0 -98 -18q-57 -17 -96.5 -40.5t-71 -66t-46 -70t-45.5 -94.5q-6 -12 -9 -19q-49 -107 -68 -216t-19 -244t19 -244t68 -216q56 -122 83 -161q63 -91 179 -127 +l6 -2q64 -18 98 -18q25 0 45 8q32 12 75.5 42.5t43.5 52.5zM776 760q-26 0 -45 19t-19 45.5t19 45.5q37 37 37 90q0 52 -37 91q-19 19 -19 45t19 45t45 19t45 -19q75 -75 75 -181t-75 -181q-21 -19 -45 -19zM957 579q-27 0 -45 19q-19 19 -19 45t19 45q112 114 112 272 +t-112 272q-19 19 -19 45t19 45t45 19t45 -19q150 -150 150 -362t-150 -362q-18 -19 -45 -19zM1138 398q-27 0 -45 19q-19 19 -19 45t19 45q90 91 138.5 208t48.5 245t-48.5 245t-138.5 208q-19 19 -19 45t19 45t45 19t45 -19q109 -109 167 -249t58 -294t-58 -294t-167 -249 +q-18 -19 -45 -19z" /> + <glyph glyph-name="uniF2A1" unicode="" horiz-adv-x="2176" +d="M192 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 352 +q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 864 +q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 1376q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 192q0 -80 -56 -136 +t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 1216q0 -80 -56 -136t-136 -56 +t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 192q0 -80 -56 -136t-136 -56t-136 56 +t-56 136t56 136t136 56t136 -56t56 -136zM1664 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136 +t56 136t136 56t136 -56t56 -136zM2176 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z" /> + <glyph glyph-name="uniF2A2" unicode="" horiz-adv-x="1792" +d="M128 -192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM320 0q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM365 365l256 -256l-90 -90l-256 256zM704 384q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45z +M1411 704q0 -59 -11.5 -108.5t-37.5 -93.5t-44 -67.5t-53 -64.5q-31 -35 -45.5 -54t-33.5 -50t-26.5 -64t-7.5 -74q0 -159 -112.5 -271.5t-271.5 -112.5q-26 0 -45 19t-19 45t19 45t45 19q106 0 181 75t75 181q0 57 11.5 105.5t37 91t43.5 66.5t52 63q40 46 59.5 72 +t37.5 74.5t18 103.5q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM896 576q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45 +t45 19t45 -19t19 -45zM1184 704q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 93 -65.5 158.5t-158.5 65.5q-92 0 -158 -65.5t-66 -158.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 146 103 249t249 103t249 -103t103 -249zM1578 993q10 -25 -1 -49t-36 -34q-9 -4 -23 -4 +q-19 0 -35.5 11t-23.5 30q-68 178 -224 295q-21 16 -25 42t12 47q17 21 43 25t47 -12q183 -137 266 -351zM1788 1074q9 -25 -1.5 -49t-35.5 -34q-11 -4 -23 -4q-44 0 -60 41q-92 238 -297 393q-22 16 -25.5 42t12.5 47q16 22 42 25.5t47 -12.5q235 -175 341 -449z" /> + <glyph glyph-name="uniF2A3" unicode="" horiz-adv-x="2304" +d="M1032 576q-59 2 -84 55q-17 34 -48 53.5t-68 19.5q-53 0 -90.5 -37.5t-37.5 -90.5q0 -56 36 -89l10 -8q34 -31 82 -31q37 0 68 19.5t48 53.5q25 53 84 55zM1600 704q0 56 -36 89l-10 8q-34 31 -82 31q-37 0 -68 -19.5t-48 -53.5q-25 -53 -84 -55q59 -2 84 -55 +q17 -34 48 -53.5t68 -19.5q53 0 90.5 37.5t37.5 90.5zM1174 925q-17 -35 -55 -48t-73 4q-62 31 -134 31q-51 0 -99 -17q3 0 9.5 0.5t9.5 0.5q92 0 170.5 -50t118.5 -133q17 -36 3.5 -73.5t-49.5 -54.5q-18 -9 -39 -9q21 0 39 -9q36 -17 49.5 -54.5t-3.5 -73.5 +q-40 -83 -118.5 -133t-170.5 -50h-6q-16 2 -44 4l-290 27l-239 -120q-14 -7 -29 -7q-40 0 -57 35l-160 320q-11 23 -4 47.5t29 37.5l209 119l148 267q17 155 91.5 291.5t195.5 236.5q31 25 70.5 21.5t64.5 -34.5t21.5 -70t-34.5 -65q-70 -59 -117 -128q123 84 267 101 +q40 5 71.5 -19t35.5 -64q5 -40 -19 -71.5t-64 -35.5q-84 -10 -159 -55q46 10 99 10q115 0 218 -50q36 -18 49 -55.5t-5 -73.5zM2137 1085l160 -320q11 -23 4 -47.5t-29 -37.5l-209 -119l-148 -267q-17 -155 -91.5 -291.5t-195.5 -236.5q-26 -22 -61 -22q-45 0 -74 35 +q-25 31 -21.5 70t34.5 65q70 59 117 128q-123 -84 -267 -101q-4 -1 -12 -1q-36 0 -63.5 24t-31.5 60q-5 40 19 71.5t64 35.5q84 10 159 55q-46 -10 -99 -10q-115 0 -218 50q-36 18 -49 55.5t5 73.5q17 35 55 48t73 -4q62 -31 134 -31q51 0 99 17q-3 0 -9.5 -0.5t-9.5 -0.5 +q-92 0 -170.5 50t-118.5 133q-17 36 -3.5 73.5t49.5 54.5q18 9 39 9q-21 0 -39 9q-36 17 -49.5 54.5t3.5 73.5q40 83 118.5 133t170.5 50h6h1q14 -2 42 -4l291 -27l239 120q14 7 29 7q40 0 57 -35z" /> + <glyph glyph-name="uniF2A4" unicode="" horiz-adv-x="1792" +d="M1056 704q0 -26 19 -45t45 -19t45 19t19 45q0 146 -103 249t-249 103t-249 -103t-103 -249q0 -26 19 -45t45 -19t45 19t19 45q0 93 66 158.5t158 65.5t158 -65.5t66 -158.5zM835 1280q-117 0 -223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5q0 -26 19 -45t45 -19t45 19 +t19 45q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -55 -18 -103.5t-37.5 -74.5t-59.5 -72q-34 -39 -52 -63t-43.5 -66.5t-37 -91t-11.5 -105.5q0 -106 -75 -181t-181 -75q-26 0 -45 -19t-19 -45t19 -45t45 -19q159 0 271.5 112.5t112.5 271.5q0 41 7.5 74 +t26.5 64t33.5 50t45.5 54q35 41 53 64.5t44 67.5t37.5 93.5t11.5 108.5q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5zM591 561l226 -226l-579 -579q-12 -12 -29 -12t-29 12l-168 168q-12 12 -12 29t12 29zM1612 1524l168 -168q12 -12 12 -29t-12 -30l-233 -233 +l-26 -25l-71 -71q-66 153 -195 258l91 91l207 207q13 12 30 12t29 -12z" /> + <glyph glyph-name="uniF2A5" unicode="" +d="M866 1021q0 -27 -13 -94q-11 -50 -31.5 -150t-30.5 -150q-2 -11 -4.5 -12.5t-13.5 -2.5q-20 -2 -31 -2q-58 0 -84 49.5t-26 113.5q0 88 35 174t103 124q28 14 51 14q28 0 36.5 -16.5t8.5 -47.5zM1352 597q0 14 -39 75.5t-52 66.5q-21 8 -34 8q-91 0 -226 -77l-2 2 +q3 22 27.5 135t24.5 178q0 233 -242 233q-24 0 -68 -6q-94 -17 -168.5 -89.5t-111.5 -166.5t-37 -189q0 -146 80.5 -225t227.5 -79q25 0 25 -3t-1 -5q-4 -34 -26 -117q-14 -52 -51.5 -101t-82.5 -49q-42 0 -42 47q0 24 10.5 47.5t25 39.5t29.5 28.5t26 20t11 8.5q0 3 -7 10 +q-24 22 -58.5 36.5t-65.5 14.5q-35 0 -63.5 -34t-41 -75t-12.5 -75q0 -88 51.5 -142t138.5 -54q82 0 155 53t117.5 126t65.5 153q6 22 15.5 66.5t14.5 66.5q3 12 14 18q118 60 227 60q48 0 127 -18q1 -1 4 -1q5 0 9.5 4.5t4.5 8.5zM1536 1120v-960q0 -119 -84.5 -203.5 +t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="uniF2A6" unicode="" horiz-adv-x="1535" +d="M744 1231q0 24 -2 38.5t-8.5 30t-21 23t-37.5 7.5q-39 0 -78 -23q-105 -58 -159 -190.5t-54 -269.5q0 -44 8.5 -85.5t26.5 -80.5t52.5 -62.5t81.5 -23.5q4 0 18 -0.5t20 0t16 3t15 8.5t7 16q16 77 48 231.5t48 231.5q19 91 19 146zM1498 575q0 -7 -7.5 -13.5t-15.5 -6.5 +l-6 1q-22 3 -62 11t-72 12.5t-63 4.5q-167 0 -351 -93q-15 -8 -21 -27q-10 -36 -24.5 -105.5t-22.5 -100.5q-23 -91 -70 -179.5t-112.5 -164.5t-154.5 -123t-185 -47q-135 0 -214.5 83.5t-79.5 219.5q0 53 19.5 117t63 116.5t97.5 52.5q38 0 120 -33.5t83 -61.5 +q0 -1 -16.5 -12.5t-39.5 -31t-46 -44.5t-39 -61t-16 -74q0 -33 16.5 -53t48.5 -20q45 0 85 31.5t66.5 78t48 105.5t32.5 107t16 90v9q0 2 -3.5 3.5t-8.5 1.5h-10t-10 -0.5t-6 -0.5q-227 0 -352 122.5t-125 348.5q0 108 34.5 221t96 210t156 167.5t204.5 89.5q52 9 106 9 +q374 0 374 -360q0 -98 -38 -273t-43 -211l3 -3q101 57 182.5 88t167.5 31q22 0 53 -13q19 -7 80 -102.5t61 -116.5z" /> + <glyph glyph-name="uniF2A7" unicode="" horiz-adv-x="1664" +d="M831 863q32 0 59 -18l222 -148q61 -40 110 -97l146 -170q40 -46 29 -106l-72 -413q-6 -32 -29.5 -53.5t-55.5 -25.5l-527 -56l-352 -32h-9q-39 0 -67.5 28t-28.5 68q0 37 27 64t65 32l260 32h-448q-41 0 -69.5 30t-26.5 71q2 39 32 65t69 26l442 1l-521 64q-41 5 -66 37 +t-19 73q6 35 34.5 57.5t65.5 22.5h10l481 -60l-351 94q-38 10 -62 41.5t-18 68.5q6 36 33 58.5t62 22.5q6 0 20 -2l448 -96l217 -37q1 0 3 -0.5t3 -0.5q23 0 30.5 23t-12.5 36l-186 125q-35 23 -42 63.5t18 73.5q27 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38 +l-238 262q-1 1 -2.5 3.5t-2.5 3.5q-24 31 -18.5 70t37.5 64q31 23 68 17.5t64 -33.5l142 -147q-2 -1 -5 -3.5t-4 -4.5q-32 -45 -23 -99t55 -85zM1648 1115l15 -266q4 -73 -11 -147l-48 -219q-12 -59 -67 -87l-106 -54q2 62 -39 109l-146 170q-53 61 -117 103l-222 148 +q-34 23 -76 23q-51 0 -88 -37l-235 312q-25 33 -18 73.5t41 63.5q33 22 71.5 14t62.5 -40l266 -352l-262 455q-21 35 -10.5 75t47.5 59q35 18 72.5 6t57.5 -46l241 -420l-136 337q-15 35 -4.5 74t44.5 56q37 19 76 6t56 -51l193 -415l101 -196q8 -15 23 -17.5t27 7.5t11 26 +l-12 224q-2 41 26 71t69 31q39 0 67 -28.5t30 -67.5z" /> + <glyph glyph-name="uniF2A8" unicode="" horiz-adv-x="1792" +d="M335 180q-2 0 -6 2q-86 57 -168.5 145t-139.5 180q-21 30 -21 69q0 9 2 19t4 18t7 18t8.5 16t10.5 17t10 15t12 15.5t11 14.5q184 251 452 365q-110 198 -110 211q0 19 17 29q116 64 128 64q18 0 28 -16l124 -229q92 19 192 19q266 0 497.5 -137.5t378.5 -369.5 +q20 -31 20 -69t-20 -69q-91 -142 -218.5 -253.5t-278.5 -175.5q110 -198 110 -211q0 -20 -17 -29q-116 -64 -127 -64q-19 0 -29 16l-124 229l-64 119l-444 820l7 7q-58 -24 -99 -47q3 -5 127 -234t243 -449t119 -223q0 -7 -9 -9q-13 -3 -72 -3q-57 0 -60 7l-456 841 +q-39 -28 -82 -68q24 -43 214 -393.5t190 -354.5q0 -10 -11 -10q-14 0 -82.5 22t-72.5 28l-106 197l-224 413q-44 -53 -78 -106q2 -3 18 -25t23 -34l176 -327q0 -10 -10 -10zM1165 282l49 -91q273 111 450 385q-180 277 -459 389q67 -64 103 -148.5t36 -176.5 +q0 -106 -47 -200.5t-132 -157.5zM848 896q0 -20 14 -34t34 -14q86 0 147 -61t61 -147q0 -20 14 -34t34 -14t34 14t14 34q0 126 -89 215t-215 89q-20 0 -34 -14t-14 -34zM1214 961l-9 4l7 -7z" /> + <glyph glyph-name="uniF2A9" unicode="" horiz-adv-x="1280" +d="M1050 430q0 -215 -147 -374q-148 -161 -378 -161q-232 0 -378 161q-147 159 -147 374q0 147 68 270.5t189 196.5t268 73q96 0 182 -31q-32 -62 -39 -126q-66 28 -143 28q-167 0 -280.5 -123t-113.5 -291q0 -170 112.5 -288.5t281.5 -118.5t281 118.5t112 288.5 +q0 89 -32 166q66 13 123 49q41 -98 41 -212zM846 619q0 -192 -79.5 -345t-238.5 -253l-14 -1q-29 0 -62 5q83 32 146.5 102.5t99.5 154.5t58.5 189t30 192.5t7.5 178.5q0 69 -3 103q55 -160 55 -326zM791 947v-2q-73 214 -206 440q88 -59 142.5 -186.5t63.5 -251.5z +M1035 744q-83 0 -160 75q218 120 290 247q19 37 21 56q-42 -94 -139.5 -166.5t-204.5 -97.5q-35 54 -35 113q0 37 17 79t43 68q46 44 157 74q59 16 106 58.5t74 100.5q74 -105 74 -253q0 -109 -24 -170q-32 -77 -88.5 -130.5t-130.5 -53.5z" /> + <glyph glyph-name="uniF2AA" unicode="" +d="M1050 495q0 78 -28 147q-41 -25 -85 -34q22 -50 22 -114q0 -117 -77 -198.5t-193 -81.5t-193.5 81.5t-77.5 198.5q0 115 78 199.5t193 84.5q53 0 98 -19q4 43 27 87q-60 21 -125 21q-154 0 -257.5 -108.5t-103.5 -263.5t103.5 -261t257.5 -106t257.5 106.5t103.5 260.5z +M872 850q2 -24 2 -71q0 -63 -5 -123t-20.5 -132.5t-40.5 -130t-68.5 -106t-100.5 -70.5q21 -3 42 -3h10q219 139 219 411q0 116 -38 225zM872 850q-4 80 -44 171.5t-98 130.5q92 -156 142 -302zM1207 955q0 102 -51 174q-41 -86 -124 -109q-69 -19 -109 -53.5t-40 -99.5 +q0 -40 24 -77q74 17 140.5 67t95.5 115q-4 -52 -74.5 -111.5t-138.5 -97.5q52 -52 110 -52q51 0 90 37t60 90q17 42 17 117zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 +t84.5 -203.5z" /> + <glyph glyph-name="uniF2AB" unicode="" +d="M1279 388q0 22 -22 27q-67 15 -118 59t-80 108q-7 19 -7 25q0 15 19.5 26t43 17t43 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-12 0 -32 -8t-31 -8q-4 0 -12 2q5 95 5 114q0 79 -17 114q-36 78 -103 121.5t-152 43.5q-199 0 -275 -165q-17 -35 -17 -114q0 -19 5 -114 +q-4 -2 -14 -2q-12 0 -32 7.5t-30 7.5q-21 0 -38.5 -12t-17.5 -32q0 -21 19.5 -35.5t43 -20.5t43 -17t19.5 -26q0 -6 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -46 137 -68q2 -5 6 -26t11.5 -30.5t23.5 -9.5q12 0 37.5 4.5t39.5 4.5q35 0 67 -15t54 -32.5t57.5 -32.5 +t76.5 -15q43 0 79 15t57.5 32.5t53.5 32.5t67 15q14 0 39.5 -4t38.5 -4q16 0 23 10t11 30t6 25q137 22 137 68zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 +t103 -385.5z" /> + <glyph glyph-name="uniF2AC" unicode="" horiz-adv-x="1664" +d="M848 1408q134 1 240.5 -68.5t163.5 -192.5q27 -58 27 -179q0 -47 -9 -191q14 -7 28 -7q18 0 51 13.5t51 13.5q29 0 56 -18t27 -46q0 -32 -31.5 -54t-69 -31.5t-69 -29t-31.5 -47.5q0 -15 12 -43q37 -82 102.5 -150t144.5 -101q28 -12 80 -23q28 -6 28 -35 +q0 -70 -219 -103q-7 -11 -11 -39t-14 -46.5t-33 -18.5q-20 0 -62 6.5t-64 6.5q-37 0 -62 -5q-32 -5 -63 -22.5t-58 -38t-58 -40.5t-76 -33.5t-99 -13.5q-52 0 -96.5 13.5t-75 33.5t-57.5 40.5t-58 38t-62 22.5q-26 5 -63 5q-24 0 -65.5 -7.5t-58.5 -7.5q-25 0 -35 18.5 +t-14 47.5t-11 40q-219 33 -219 103q0 29 28 35q52 11 80 23q78 32 144.5 101t102.5 150q12 28 12 43q0 28 -31.5 47.5t-69.5 29.5t-69.5 31.5t-31.5 52.5q0 27 26 45.5t55 18.5q15 0 48 -13t53 -13q18 0 32 7q-9 142 -9 190q0 122 27 180q64 137 172 198t264 63z" /> + <glyph glyph-name="uniF2AD" unicode="" +d="M1280 388q0 22 -22 27q-67 14 -118 58t-80 109q-7 14 -7 25q0 15 19.5 26t42.5 17t42.5 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-11 0 -31 -8t-32 -8q-4 0 -12 2q5 63 5 115q0 78 -17 114q-36 78 -102.5 121.5t-152.5 43.5q-198 0 -275 -165q-18 -38 -18 -115 +q0 -38 6 -114q-10 -2 -15 -2q-11 0 -31.5 8t-30.5 8q-20 0 -37.5 -12.5t-17.5 -32.5q0 -21 19.5 -35.5t42.5 -20.5t42.5 -17t19.5 -26q0 -11 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -47 138 -69q2 -5 6 -26t11 -30.5t23 -9.5q13 0 38.5 5t38.5 5q35 0 67.5 -15 +t54.5 -32.5t57.5 -32.5t76.5 -15q43 0 79 15t57.5 32.5t54 32.5t67.5 15q13 0 39 -4.5t39 -4.5q15 0 22.5 9.5t11.5 31t5 24.5q138 22 138 69zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 +q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="uniF2AE" unicode="" horiz-adv-x="2304" +d="M2304 1536q-69 -46 -125 -92t-89 -81t-59.5 -71.5t-37.5 -57.5t-22 -44.5t-14 -29.5q-10 -18 -35.5 -136.5t-48.5 -164.5q-15 -29 -50 -60.5t-67.5 -50.5t-72.5 -41t-48 -28q-47 -31 -151 -231q-341 14 -630 -158q-92 -53 -303 -179q47 16 86 31t55 22l15 7 +q71 27 163 64.5t133.5 53.5t108 34.5t142.5 31.5q186 31 465 -7q1 0 10 -3q11 -6 14 -17t-3 -22l-194 -345q-15 -29 -47 -22q-128 24 -354 24q-146 0 -402 -44.5t-392 -46.5q-82 -1 -149 13t-107 37t-61 40t-33 34l-1 1v2q0 6 6 6q138 0 371 55q192 366 374.5 524t383.5 158 +q5 0 14.5 -0.5t38 -5t55 -12t61.5 -24.5t63 -39.5t54 -59t40 -82.5l102 177q2 4 21 42.5t44.5 86.5t61 109.5t84 133.5t100.5 137q66 82 128 141.5t121.5 96.5t92.5 53.5t88 39.5z" /> + <glyph glyph-name="uniF2B0" unicode="" +d="M1322 640q0 -45 -5 -76l-236 14l224 -78q-19 -73 -58 -141l-214 103l177 -158q-44 -61 -107 -108l-157 178l103 -215q-61 -37 -140 -59l-79 228l14 -240q-38 -6 -76 -6t-76 6l14 238l-78 -226q-74 19 -140 59l103 215l-157 -178q-59 43 -108 108l178 158l-214 -104 +q-39 69 -58 141l224 79l-237 -14q-5 42 -5 76q0 35 5 77l238 -14l-225 79q19 73 58 140l214 -104l-177 159q46 61 107 108l158 -178l-103 215q67 39 140 58l77 -224l-13 236q36 6 75 6q38 0 76 -6l-14 -237l78 225q74 -19 140 -59l-103 -214l158 178q61 -47 107 -108 +l-177 -159l213 104q37 -62 58 -141l-224 -78l237 14q5 -31 5 -77zM1352 640q0 160 -78.5 295.5t-213 214t-292.5 78.5q-119 0 -227 -46.5t-186.5 -125t-124.5 -187.5t-46 -229q0 -119 46 -228t124.5 -187.5t186.5 -125t227 -46.5q158 0 292.5 78.5t213 214t78.5 294.5z +M1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" /> + <glyph glyph-name="uniF2B1" unicode="" horiz-adv-x="1664" +d="M339 1318h691l-26 -72h-665q-110 0 -188.5 -79t-78.5 -189v-771q0 -95 60.5 -169.5t153.5 -93.5q23 -5 98 -5v-72h-45q-140 0 -239.5 100t-99.5 240v771q0 140 99.5 240t239.5 100zM1190 1536h247l-482 -1294q-23 -61 -40.5 -103.5t-45 -98t-54 -93.5t-64.5 -78.5 +t-79.5 -65t-95.5 -41t-116 -18.5v195q163 26 220 182q20 52 20 105q0 54 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795q37 55 45 73h678v1038q0 85 -49.5 155t-129.5 99l25 67q101 -34 163.5 -123.5t62.5 -197.5z" /> + <glyph glyph-name="uniF2B2" unicode="" horiz-adv-x="1792" +d="M852 1227q0 -29 -17 -52.5t-45 -23.5t-45 23.5t-17 52.5t17 52.5t45 23.5t45 -23.5t17 -52.5zM688 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50 -21.5t-20 -51.5v-114q0 -30 20.5 -52t49.5 -22q30 0 50.5 22t20.5 52zM860 -149v114q0 30 -20 51.5t-50 21.5t-50.5 -21.5 +t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22q29 0 49.5 22t20.5 52zM1034 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1208 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114 +q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1476 535q-84 -160 -232 -259.5t-323 -99.5q-123 0 -229.5 51.5t-178.5 137t-113 197.5t-41 232q0 88 21 174q-104 -175 -104 -390q0 -162 65 -312t185 -251q30 57 91 57q56 0 86 -50q32 50 87 50q56 0 86 -50q32 50 87 50t87 -50 +q30 50 86 50q28 0 52.5 -15.5t37.5 -40.5q112 94 177 231.5t73 287.5zM1326 564q0 75 -72 75q-17 0 -47 -6q-95 -19 -149 -19q-226 0 -226 243q0 86 30 204q-83 -127 -83 -275q0 -150 89 -260.5t235 -110.5q111 0 210 70q13 48 13 79zM884 1223q0 50 -32 89.5t-81 39.5 +t-81 -39.5t-32 -89.5q0 -51 31.5 -90.5t81.5 -39.5t81.5 39.5t31.5 90.5zM1513 884q0 96 -37.5 179t-113 137t-173.5 54q-77 0 -149 -35t-127 -94q-48 -159 -48 -268q0 -104 45.5 -157t147.5 -53q53 0 142 19q36 6 53 6q51 0 77.5 -28t26.5 -80q0 -26 -4 -46 +q75 68 117.5 165.5t42.5 200.5zM1792 667q0 -111 -33.5 -249.5t-93.5 -204.5q-58 -64 -195 -142.5t-228 -104.5l-4 -1v-114q0 -43 -29.5 -75t-72.5 -32q-56 0 -86 50q-32 -50 -87 -50t-87 50q-30 -50 -86 -50q-55 0 -87 50q-30 -50 -86 -50q-47 0 -75 33.5t-28 81.5 +q-90 -68 -198 -68q-118 0 -211 80q54 1 106 20q-113 31 -182 127q32 -7 71 -7q89 0 164 46q-192 192 -240 306q-24 56 -24 160q0 57 9 125.5t31.5 146.5t55 141t86.5 105t120 42q59 0 81 -52q19 29 42 54q2 3 12 13t13 16q10 15 23 38t25 42t28 39q87 111 211.5 177 +t260.5 66q35 0 62 -4q59 64 146 64q83 0 140 -57q5 -5 5 -12q0 -5 -6 -13.5t-12.5 -16t-16 -17l-10.5 -10.5q17 -6 36 -18t19 -24q0 -6 -16 -25q157 -138 197 -378q25 30 60 30q45 0 100 -49q90 -80 90 -279z" /> + <glyph glyph-name="uniF2B3" unicode="" +d="M917 631q0 33 -6 64h-362v-132h217q-12 -76 -74.5 -120.5t-142.5 -44.5q-99 0 -169 71.5t-70 170.5t70 170.5t169 71.5q93 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585h109v110 +h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="uniF2B4" unicode="" +d="M1536 1024v-839q0 -48 -49 -62q-174 -52 -338 -52q-73 0 -215.5 29.5t-227.5 29.5q-164 0 -370 -48v-338h-160v1368q-63 25 -101 81t-38 124q0 91 64 155t155 64t155 -64t64 -155q0 -68 -38 -124t-101 -81v-68q190 44 343 44q99 0 198 -15q14 -2 111.5 -22.5t149.5 -20.5 +q77 0 165 18q11 2 80 21t89 19q26 0 45 -19t19 -45z" /> + <glyph glyph-name="uniF2B5" unicode="" horiz-adv-x="2304" +d="M192 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32zM1665 442q-10 13 -38.5 50t-41.5 54t-38 49t-42.5 53t-40.5 47t-45 49l-125 -140q-83 -94 -208.5 -92t-205.5 98q-57 69 -56.5 158t58.5 157l177 206q-22 11 -51 16.5t-47.5 6t-56.5 -0.5t-49 -1q-92 0 -158 -66 +l-158 -158h-155v-544q5 0 21 0.5t22 0t19.5 -2t20.5 -4.5t17.5 -8.5t18.5 -13.5l297 -292q115 -111 227 -111q78 0 125 47q57 -20 112.5 8t72.5 85q74 -6 127 44q20 18 36 45.5t14 50.5q10 -10 43 -10q43 0 77 21t49.5 53t12 71.5t-30.5 73.5zM1824 384h96v512h-93l-157 180 +q-66 76 -169 76h-167q-89 0 -146 -67l-209 -243q-28 -33 -28 -75t27 -75q43 -51 110 -52t111 49l193 218q25 23 53.5 21.5t47 -27t8.5 -56.5q16 -19 56 -63t60 -68q29 -36 82.5 -105.5t64.5 -84.5q52 -66 60 -140zM2112 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32z +M2304 960v-640q0 -26 -19 -45t-45 -19h-434q-27 -65 -82 -106.5t-125 -51.5q-33 -48 -80.5 -81.5t-102.5 -45.5q-42 -53 -104.5 -81.5t-128.5 -24.5q-60 -34 -126 -39.5t-127.5 14t-117 53.5t-103.5 81l-287 282h-358q-26 0 -45 19t-19 45v672q0 26 19 45t45 19h421 +q14 14 47 48t47.5 48t44 40t50.5 37.5t51 25.5t62 19.5t68 5.5h117q99 0 181 -56q82 56 181 56h167q35 0 67 -6t56.5 -14.5t51.5 -26.5t44.5 -31t43 -39.5t39 -42t41 -48t41.5 -48.5h355q26 0 45 -19t19 -45z" /> + <glyph glyph-name="uniF2B6" unicode="" horiz-adv-x="1792" +d="M1792 882v-978q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v978q0 15 11 24q8 7 39 34.5t41.5 36t45.5 37.5t70 55.5t96 73t143.5 107t192.5 140.5q5 4 52.5 40t71.5 52.5t64 35t69 18.5t69 -18.5t65 -35.5t71 -52t52 -40q110 -80 192.5 -140.5t143.5 -107 +t96 -73t70 -55.5t45.5 -37.5t41.5 -36t39 -34.5q11 -9 11 -24zM1228 297q263 191 345 252q11 8 12.5 20.5t-6.5 23.5l-38 52q-8 11 -21 12.5t-24 -6.5q-231 -169 -343 -250q-5 -3 -52 -39t-71.5 -52.5t-64.5 -35t-69 -18.5t-69 18.5t-64.5 35t-71.5 52.5t-52 39 +q-186 134 -343 250q-11 8 -24 6.5t-21 -12.5l-38 -52q-8 -11 -6.5 -23.5t12.5 -20.5q82 -61 345 -252q10 -8 50 -38t65 -47t64 -39.5t77.5 -33.5t75.5 -11t75.5 11t79 34.5t64.5 39.5t65 47.5t48 36.5z" /> + <glyph glyph-name="uniF2B7" unicode="" horiz-adv-x="1792" +d="M1474 623l39 -51q8 -11 6.5 -23.5t-11.5 -20.5q-43 -34 -126.5 -98.5t-146.5 -113t-67 -51.5q-39 -32 -60 -48t-60.5 -41t-76.5 -36.5t-74 -11.5h-1h-1q-37 0 -74 11.5t-76 36.5t-61 41.5t-60 47.5q-5 4 -65 50.5t-143.5 111t-122.5 94.5q-11 8 -12.5 20.5t6.5 23.5 +l37 52q8 11 21.5 13t24.5 -7q94 -73 306 -236q5 -4 43.5 -35t60.5 -46.5t56.5 -32.5t58.5 -17h1h1q24 0 58.5 17t56.5 32.5t60.5 46.5t43.5 35q258 198 313 242q11 8 24 6.5t21 -12.5zM1664 -96v928q-90 83 -159 139q-91 74 -389 304q-3 2 -43 35t-61 48t-56 32.5t-59 17.5 +h-1h-1q-24 0 -59 -17.5t-56 -32.5t-61 -48t-43 -35q-215 -166 -315.5 -245.5t-129.5 -104t-82 -74.5q-14 -12 -21 -19v-928q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 832v-928q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v928q0 56 41 94 +q123 114 350 290.5t233 181.5q36 30 59 47.5t61.5 42t76 36.5t74.5 12h1h1q37 0 74.5 -12t76 -36.5t61.5 -42t59 -47.5q43 -36 156 -122t226 -177t201 -173q41 -38 41 -94z" /> + <glyph glyph-name="uniF2B8" unicode="" +d="M330 1l202 -214l-34 236l-216 213zM556 -225l274 218l-11 245l-300 -215zM245 413l227 -213l-48 327l-245 204zM495 189l317 214l-14 324l-352 -200zM843 178l95 -80l-2 239l-103 79q0 -1 1 -8.5t0 -12t-5 -7.5l-78 -52l85 -70q7 -6 7 -88zM138 930l256 -200l-68 465 +l-279 173zM1173 267l15 234l-230 -164l2 -240zM417 722l373 194l-19 441l-423 -163zM1270 357l20 233l-226 142l-2 -105l144 -95q6 -4 4 -9l-7 -119zM1461 496l30 222l-179 -128l-20 -228zM1273 329l-71 49l-8 -117q0 -5 -4 -8l-234 -187q-7 -5 -14 0l-98 83l7 -161 +q0 -5 -4 -8l-293 -234q-4 -2 -6 -2q-8 2 -8 3l-228 242q-4 4 -59 277q-2 7 5 11l61 37q-94 86 -95 92l-72 351q-2 7 6 12l94 45q-133 100 -135 108l-96 466q-2 10 7 13l433 135q5 0 8 -1l317 -153q6 -4 6 -9l20 -463q0 -7 -6 -10l-118 -61l126 -85q5 -2 5 -8l5 -123l121 74 +q5 4 11 0l84 -56l3 110q0 6 5 9l206 126q6 3 11 0l245 -135q4 -4 5 -7t-6.5 -60t-17.5 -124.5t-10 -70.5q0 -5 -4 -7l-191 -153q-6 -5 -13 0z" /> + <glyph glyph-name="uniF2B9" unicode="" horiz-adv-x="1664" +d="M1201 298q0 57 -5.5 107t-21 100.5t-39.5 86t-64 58t-91 22.5q-6 -4 -33.5 -20.5t-42.5 -24.5t-40.5 -20t-49 -17t-46.5 -5t-46.5 5t-49 17t-40.5 20t-42.5 24.5t-33.5 20.5q-51 0 -91 -22.5t-64 -58t-39.5 -86t-21 -100.5t-5.5 -107q0 -73 42 -121.5t103 -48.5h576 +q61 0 103 48.5t42 121.5zM1028 892q0 108 -76.5 184t-183.5 76t-183.5 -76t-76.5 -184q0 -107 76.5 -183t183.5 -76t183.5 76t76.5 183zM1664 352v-192q0 -14 -9 -23t-23 -9h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216 +q66 0 113 -47t47 -113v-224h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23z" /> + <glyph glyph-name="uniF2BA" unicode="" horiz-adv-x="1664" +d="M1028 892q0 -107 -76.5 -183t-183.5 -76t-183.5 76t-76.5 183q0 108 76.5 184t183.5 76t183.5 -76t76.5 -184zM980 672q46 0 82.5 -17t60 -47.5t39.5 -67t24 -81t11.5 -82.5t3.5 -79q0 -67 -39.5 -118.5t-105.5 -51.5h-576q-66 0 -105.5 51.5t-39.5 118.5q0 48 4.5 93.5 +t18.5 98.5t36.5 91.5t63 64.5t93.5 26h5q7 -4 32 -19.5t35.5 -21t33 -17t37 -16t35 -9t39.5 -4.5t39.5 4.5t35 9t37 16t33 17t35.5 21t32 19.5zM1664 928q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96 +q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216q66 0 113 -47t47 -113v-224h96q13 0 22.5 -9.5t9.5 -22.5v-192zM1408 -96v1472q0 13 -9.5 22.5t-22.5 9.5h-1216 +q-13 0 -22.5 -9.5t-9.5 -22.5v-1472q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5z" /> + <glyph glyph-name="uniF2BB" unicode="" horiz-adv-x="2048" +d="M1024 405q0 64 -9 117.5t-29.5 103t-60.5 78t-97 28.5q-6 -4 -30 -18t-37.5 -21.5t-35.5 -17.5t-43 -14.5t-42 -4.5t-42 4.5t-43 14.5t-35.5 17.5t-37.5 21.5t-30 18q-57 0 -97 -28.5t-60.5 -78t-29.5 -103t-9 -117.5t37 -106.5t91 -42.5h512q54 0 91 42.5t37 106.5z +M867 925q0 94 -66.5 160.5t-160.5 66.5t-160.5 -66.5t-66.5 -160.5t66.5 -160.5t160.5 -66.5t160.5 66.5t66.5 160.5zM1792 416v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1792 676v56q0 15 -10.5 25.5t-25.5 10.5h-568 +q-15 0 -25.5 -10.5t-10.5 -25.5v-56q0 -15 10.5 -25.5t25.5 -10.5h568q15 0 25.5 10.5t10.5 25.5zM1792 928v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-352v96q0 14 -9 23t-23 9 +h-64q-14 0 -23 -9t-9 -23v-96h-768v96q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-96h-352q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2BC" unicode="" horiz-adv-x="2048" +d="M1024 405q0 -64 -37 -106.5t-91 -42.5h-512q-54 0 -91 42.5t-37 106.5t9 117.5t29.5 103t60.5 78t97 28.5q6 -4 30 -18t37.5 -21.5t35.5 -17.5t43 -14.5t42 -4.5t42 4.5t43 14.5t35.5 17.5t37.5 21.5t30 18q57 0 97 -28.5t60.5 -78t29.5 -103t9 -117.5zM867 925 +q0 -94 -66.5 -160.5t-160.5 -66.5t-160.5 66.5t-66.5 160.5t66.5 160.5t160.5 66.5t160.5 -66.5t66.5 -160.5zM1792 480v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1792 732v-56q0 -15 -10.5 -25.5t-25.5 -10.5h-568 +q-15 0 -25.5 10.5t-10.5 25.5v56q0 15 10.5 25.5t25.5 10.5h568q15 0 25.5 -10.5t10.5 -25.5zM1792 992v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1920 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1728q-13 0 -22.5 -9.5 +t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h352v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h768v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h352q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113 +t113 47h1728q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2BD" unicode="" horiz-adv-x="1792" +d="M1523 197q-22 155 -87.5 257.5t-184.5 118.5q-67 -74 -159.5 -115.5t-195.5 -41.5t-195.5 41.5t-159.5 115.5q-119 -16 -184.5 -118.5t-87.5 -257.5q106 -150 271 -237.5t356 -87.5t356 87.5t271 237.5zM1280 896q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5 +t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1792 640q0 -182 -71 -347.5t-190.5 -286t-285.5 -191.5t-349 -71q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="uniF2BE" unicode="" horiz-adv-x="1792" +d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348q0 -181 -70.5 -347t-190.5 -286t-286 -191.5t-349 -71.5t-349 71t-285.5 191.5t-190.5 286t-71 347.5t71 348t191 286t286 191t348 71zM1515 185q149 205 149 455q0 156 -61 298t-164 245t-245 164t-298 61t-298 -61 +t-245 -164t-164 -245t-61 -298q0 -250 149 -455q66 327 306 327q131 -128 313 -128t313 128q240 0 306 -327zM1280 832q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5z" /> + <glyph glyph-name="uniF2C0" unicode="" +d="M1201 752q47 -14 89.5 -38t89 -73t79.5 -115.5t55 -172t22 -236.5q0 -154 -100 -263.5t-241 -109.5h-854q-141 0 -241 109.5t-100 263.5q0 131 22 236.5t55 172t79.5 115.5t89 73t89.5 38q-79 125 -79 272q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5 +t198.5 -40.5t163.5 -109.5t109.5 -163.5t40.5 -198.5q0 -147 -79 -272zM768 1408q-159 0 -271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5zM1195 -128q88 0 150.5 71.5t62.5 173.5q0 239 -78.5 377t-225.5 145 +q-145 -127 -336 -127t-336 127q-147 -7 -225.5 -145t-78.5 -377q0 -102 62.5 -173.5t150.5 -71.5h854z" /> + <glyph glyph-name="uniF2C1" unicode="" horiz-adv-x="1280" +d="M1024 278q0 -64 -37 -107t-91 -43h-512q-54 0 -91 43t-37 107t9 118t29.5 104t61 78.5t96.5 28.5q80 -75 188 -75t188 75q56 0 96.5 -28.5t61 -78.5t29.5 -104t9 -118zM870 797q0 -94 -67.5 -160.5t-162.5 -66.5t-162.5 66.5t-67.5 160.5t67.5 160.5t162.5 66.5 +t162.5 -66.5t67.5 -160.5zM1152 -96v1376h-1024v-1376q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1280 1376v-1472q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h352v-96q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v96h352 +q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2C2" unicode="" horiz-adv-x="2048" +d="M896 324q0 54 -7.5 100.5t-24.5 90t-51 68.5t-81 25q-64 -64 -156 -64t-156 64q-47 0 -81 -25t-51 -68.5t-24.5 -90t-7.5 -100.5q0 -55 31.5 -93.5t75.5 -38.5h426q44 0 75.5 38.5t31.5 93.5zM768 768q0 80 -56 136t-136 56t-136 -56t-56 -136t56 -136t136 -56t136 56 +t56 136zM1792 288v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1408 544v64q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1792 544v64q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23 +v-64q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1792 800v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM128 1152h1792v96q0 14 -9 23t-23 9h-1728q-14 0 -23 -9t-9 -23v-96zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728 +q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2C3" unicode="" horiz-adv-x="2048" +d="M896 324q0 -55 -31.5 -93.5t-75.5 -38.5h-426q-44 0 -75.5 38.5t-31.5 93.5q0 54 7.5 100.5t24.5 90t51 68.5t81 25q64 -64 156 -64t156 64q47 0 81 -25t51 -68.5t24.5 -90t7.5 -100.5zM768 768q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z +M1792 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1408 608v-64q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h320q14 0 23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v64 +q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 864v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1920 32v1120h-1792v-1120q0 -13 9.5 -22.5t22.5 -9.5h1728q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47 +h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2C4" unicode="" horiz-adv-x="1792" +d="M1255 749q0 318 -105 474.5t-330 156.5q-222 0 -326 -157t-104 -474q0 -316 104 -471.5t326 -155.5q74 0 131 17q-22 43 -39 73t-44 65t-53.5 56.5t-63 36t-77.5 14.5q-46 0 -79 -16l-49 97q105 91 276 91q132 0 215.5 -54t150.5 -155q67 149 67 402zM1645 117h117 +q3 -27 -2 -67t-26.5 -95t-58 -100.5t-107 -78t-162.5 -32.5q-71 0 -130.5 19t-105.5 56t-79 78t-66 96q-97 -27 -205 -27q-150 0 -292.5 58t-253 158.5t-178 249t-67.5 317.5q0 170 67.5 319.5t178.5 250.5t253.5 159t291.5 58q121 0 238.5 -36t217 -106t176 -164.5 +t119.5 -219t43 -261.5q0 -190 -80.5 -347.5t-218.5 -264.5q47 -70 93.5 -106.5t104.5 -36.5q61 0 94 37.5t38 85.5z" /> + <glyph glyph-name="uniF2C5" unicode="" horiz-adv-x="2304" +d="M453 -101q0 -21 -16 -37.5t-37 -16.5q-1 0 -13 3q-63 15 -162 140q-225 284 -225 676q0 341 213 614q39 51 95 103.5t94 52.5q19 0 35 -13.5t16 -32.5q0 -27 -63 -90q-98 -102 -147 -184q-119 -199 -119 -449q0 -281 123 -491q50 -85 136 -173q2 -3 14.5 -16t19.5 -21 +t17 -20.5t14.5 -23.5t4.5 -21zM1796 33q0 -29 -17.5 -48.5t-46.5 -19.5h-1081q-26 0 -45 19t-19 45q0 29 17.5 48.5t46.5 19.5h1081q26 0 45 -19t19 -45zM1581 644q0 -134 -67 -233q-25 -38 -69.5 -78.5t-83.5 -60.5q-16 -10 -27 -10q-7 0 -15 6t-8 12q0 9 19 30t42 46 +t42 67.5t19 88.5q0 76 -35 130q-29 42 -46 42q-3 0 -3 -5q0 -12 7.5 -35.5t7.5 -36.5q0 -22 -21.5 -35t-44.5 -13q-66 0 -66 76q0 15 1.5 44t1.5 44q0 25 -10 46q-13 25 -42 53.5t-51 28.5q-5 0 -7 -0.5t-3.5 -2.5t-1.5 -6q0 -2 16 -26t16 -54q0 -37 -19 -68t-46 -54 +t-53.5 -46t-45.5 -54t-19 -68q0 -98 42 -160q29 -43 79 -63q16 -5 17 -10q1 -2 1 -5q0 -16 -18 -16q-6 0 -33 11q-119 43 -195 139.5t-76 218.5q0 55 24.5 115.5t60 115t70.5 108.5t59.5 113.5t24.5 111.5q0 53 -25 94q-29 48 -56 64q-19 9 -19 21q0 20 41 20q50 0 110 -29 +q41 -19 71 -44.5t49.5 -51t33.5 -62.5t22 -69t16 -80q0 -1 3 -17.5t4.5 -25t5.5 -25t9 -27t11 -21.5t14.5 -16.5t18.5 -5.5q23 0 37 14t14 37q0 25 -20 67t-20 52t10 10q27 0 93 -70q72 -76 102.5 -156t30.5 -186zM2304 615q0 -274 -138 -503q-19 -32 -48 -72t-68 -86.5 +t-81 -77t-74 -30.5q-16 0 -31 15.5t-15 31.5q0 15 29 50.5t68.5 77t48.5 52.5q183 230 183 531q0 131 -20.5 235t-72.5 211q-58 119 -163 228q-2 3 -13 13.5t-16.5 16.5t-15 17.5t-15 20t-9.5 18.5t-4 19q0 19 16 35.5t35 16.5q70 0 196 -169q98 -131 146 -273t60 -314 +q2 -42 2 -64z" /> + <glyph glyph-name="uniF2C6" unicode="" horiz-adv-x="1792" +d="M1189 229l147 693q9 44 -10.5 63t-51.5 7l-864 -333q-29 -11 -39.5 -25t-2.5 -26.5t32 -19.5l221 -69l513 323q21 14 32 6q7 -5 -4 -15l-415 -375v0v0l-16 -228q23 0 45 22l108 104l224 -165q64 -36 81 38zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 +t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="uniF2C7" unicode="" horiz-adv-x="1024" +d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v907h128v-907q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5 +t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192 +v128h192z" /> + <glyph glyph-name="uniF2C8" unicode="" horiz-adv-x="1024" +d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v651h128v-651q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5 +t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192 +v128h192z" /> + <glyph glyph-name="uniF2C9" unicode="" horiz-adv-x="1024" +d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v395h128v-395q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5 +t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192 +v128h192z" /> + <glyph glyph-name="uniF2CA" unicode="" horiz-adv-x="1024" +d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v139h128v-139q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5 +t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192 +v128h192z" /> + <glyph glyph-name="uniF2CB" unicode="" horiz-adv-x="1024" +d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 79 56 135.5t136 56.5t136 -56.5t56 -135.5zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5z +M896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z" /> + <glyph glyph-name="uniF2CC" unicode="" horiz-adv-x="1920" +d="M1433 1287q10 -10 10 -23t-10 -23l-626 -626q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l44 44q-72 91 -81.5 207t46.5 215q-74 71 -176 71q-106 0 -181 -75t-75 -181v-1280h-256v1280q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5q106 0 201 -41 +t166 -115q94 39 197 24.5t185 -79.5l44 44q10 10 23 10t23 -10zM1344 1024q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1600 896q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1856 1024q26 0 45 -19t19 -45t-19 -45t-45 -19 +t-45 19t-19 45t19 45t45 19zM1216 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1408 832q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM1728 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 768 +q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 640q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1600 768q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 512q-26 0 -45 19t-19 45t19 45t45 19t45 -19 +t19 -45t-19 -45t-45 -19zM1472 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 384 +q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 256q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19z" /> + <glyph glyph-name="uniF2CD" unicode="" horiz-adv-x="1792" +d="M1664 448v-192q0 -169 -128 -286v-194q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v118q-63 -22 -128 -22h-768q-65 0 -128 22v-110q0 -17 -9.5 -28.5t-22.5 -11.5h-64q-13 0 -22.5 11.5t-9.5 28.5v186q-128 117 -128 286v192h1536zM704 864q0 -14 -9 -23t-23 -9t-23 9 +t-9 23t9 23t23 9t23 -9t9 -23zM768 928q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM704 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1056q0 -14 -9 -23t-23 -9t-23 9 +t-9 23t9 23t23 9t23 -9t9 -23zM704 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v640q0 106 75 181t181 75q108 0 184 -78q46 19 98 12t93 -39l22 22q11 11 22 0l42 -42 +q11 -11 0 -22l-314 -314q-11 -11 -22 0l-42 42q-11 11 0 22l22 22q-36 46 -40.5 104t23.5 108q-37 35 -88 35q-53 0 -90.5 -37.5t-37.5 -90.5v-640h1504q14 0 23 -9t9 -23zM896 1056q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1120q0 -14 -9 -23t-23 -9 +t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM896 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1248q0 -14 -9 -23 +t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1024 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1088 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23z" /> + <glyph glyph-name="uniF2CE" unicode="" +d="M994 344q0 -86 -17 -197q-31 -215 -55 -313q-22 -90 -152 -90t-152 90q-24 98 -55 313q-17 110 -17 197q0 168 224 168t224 -168zM1536 768q0 -240 -134 -434t-350 -280q-8 -3 -15 3t-6 15q7 48 10 66q4 32 6 47q1 9 9 12q159 81 255.5 234t96.5 337q0 180 -91 330.5 +t-247 234.5t-337 74q-124 -7 -237 -61t-193.5 -140.5t-128 -202t-46.5 -240.5q1 -184 99 -336.5t257 -231.5q7 -3 9 -12q3 -21 6 -45q1 -9 5 -32.5t6 -35.5q1 -9 -6.5 -15t-15.5 -2q-148 58 -261 169.5t-173.5 264t-52.5 319.5q7 143 66 273.5t154.5 227t225 157.5t272.5 70 +q164 10 315.5 -46.5t261 -160.5t175 -250.5t65.5 -308.5zM994 800q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5zM1282 768q0 -122 -53.5 -228.5t-146.5 -177.5q-8 -6 -16 -2t-10 14q-6 52 -29 92q-7 10 3 20 +q58 54 91 127t33 155q0 111 -58.5 204t-157.5 141.5t-212 36.5q-133 -15 -229 -113t-109 -231q-10 -92 23.5 -176t98.5 -144q10 -10 3 -20q-24 -41 -29 -93q-2 -9 -10 -13t-16 2q-95 74 -148.5 183t-51.5 234q3 131 69 244t177 181.5t241 74.5q144 7 268 -60t196.5 -187.5 +t72.5 -263.5z" /> + <glyph glyph-name="uniF2D0" unicode="" horiz-adv-x="1792" +d="M256 128h1280v768h-1280v-768zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2D1" unicode="" horiz-adv-x="1792" +d="M1792 224v-192q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2D2" unicode="" horiz-adv-x="2048" +d="M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96q66 0 113 -47t47 -113v-352zM2048 1376v-960q0 -66 -47 -113t-113 -47h-608v-352q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h608v352q0 66 47 113t113 47h960q66 0 113 -47 +t47 -113z" /> + <glyph glyph-name="uniF2D3" unicode="" horiz-adv-x="1792" +d="M1175 215l146 146q10 10 10 23t-10 23l-233 233l233 233q10 10 10 23t-10 23l-146 146q-10 10 -23 10t-23 -10l-233 -233l-233 233q-10 10 -23 10t-23 -10l-146 -146q-10 -10 -10 -23t10 -23l233 -233l-233 -233q-10 -10 -10 -23t10 -23l146 -146q10 -10 23 -10t23 10 +l233 233l233 -233q10 -10 23 -10t23 10zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2D4" unicode="" horiz-adv-x="1792" +d="M1257 425l-146 -146q-10 -10 -23 -10t-23 10l-169 169l-169 -169q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l169 169l-169 169q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l169 -169l169 169q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 +l-169 -169l169 -169q10 -10 10 -23t-10 -23zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2D5" unicode="" horiz-adv-x="1792" +d="M1070 358l306 564h-654l-306 -564h654zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="uniF2D6" unicode="" horiz-adv-x="1794" +d="M1291 1060q-15 17 -35 8.5t-26 -28.5t5 -38q14 -17 40 -14.5t34 20.5t-18 52zM895 814q-8 -8 -19.5 -8t-18.5 8q-8 8 -8 19t8 18q7 8 18.5 8t19.5 -8q7 -7 7 -18t-7 -19zM1060 740l-35 -35q-12 -13 -29.5 -13t-30.5 13l-38 38q-12 13 -12 30t12 30l35 35q12 12 29.5 12 +t30.5 -12l38 -39q12 -12 12 -29.5t-12 -29.5zM951 870q-7 -8 -18.5 -8t-19.5 8q-7 8 -7 19t7 19q8 8 19 8t19 -8t8 -19t-8 -19zM1354 968q-34 -64 -107.5 -85.5t-127.5 16.5q-38 28 -61 66.5t-21 87.5t39 92t75.5 53t70.5 -5t70 -51q2 -2 13 -12.5t14.5 -13.5t13 -13.5 +t12.5 -15.5t10 -15.5t8.5 -18t4 -18.5t1 -21t-5 -22t-9.5 -24zM1555 486q3 20 -8.5 34.5t-27.5 21.5t-33 17t-23 20q-40 71 -84 98.5t-113 11.5q19 13 40 18.5t33 4.5l12 -1q2 45 -34 90q6 20 6.5 40.5t-2.5 30.5l-3 10q43 24 71 65t34 91q10 84 -43 150.5t-137 76.5 +q-60 7 -114 -18.5t-82 -74.5q-30 -51 -33.5 -101t14.5 -87t43.5 -64t56.5 -42q-45 4 -88 36t-57 88q-28 108 32 222q-16 21 -29 32q-50 0 -89 -19q19 24 42 37t36 14l13 1q0 50 -13 78q-10 21 -32.5 28.5t-47 -3.5t-37.5 -40q2 4 4 7q-7 -28 -6.5 -75.5t19 -117t48.5 -122.5 +q-25 -14 -47 -36q-35 -16 -85.5 -70.5t-84.5 -101.5l-33 -46q-90 -34 -181 -125.5t-75 -162.5q1 -16 11 -27q-15 -12 -30 -30q-21 -25 -21 -54t21.5 -40t63.5 6q41 19 77 49.5t55 60.5q-2 2 -6.5 5t-20.5 7.5t-33 3.5q23 5 51 12.5t40 10t27.5 6t26 4t23.5 0.5q14 -7 22 34 +q7 37 7 90q0 102 -40 150q106 -103 101 -219q-1 -29 -15 -50t-27 -27l-13 -6q-4 -7 -19 -32t-26 -45.5t-26.5 -52t-25 -61t-17 -63t-6.5 -66.5t10 -63q-35 54 -37 80q-22 -24 -34.5 -39t-33.5 -42t-30.5 -46t-16.5 -41t-0.5 -38t25.5 -27q45 -25 144 64t190.5 221.5 +t122.5 228.5q86 52 145 115.5t86 119.5q47 -93 154 -178q104 -83 167 -80q39 2 46 43zM1794 640q0 -182 -71 -348t-191 -286t-286.5 -191t-348.5 -71t-348.5 71t-286.5 191t-191 286t-71 348t71 348t191 286t286.5 191t348.5 71t348.5 -71t286.5 -191t191 -286t71 -348z" /> + <glyph glyph-name="uniF2D7" unicode="" +d="M518 1353v-655q103 -1 191.5 1.5t125.5 5.5l37 3q68 2 90.5 24.5t39.5 94.5l33 142h103l-14 -322l7 -319h-103l-29 127q-15 68 -45 93t-84 26q-87 8 -352 8v-556q0 -78 43.5 -115.5t133.5 -37.5h357q35 0 59.5 2t55 7.5t54 18t48.5 32t46 50.5t39 73l93 216h89 +q-6 -37 -31.5 -252t-30.5 -276q-146 5 -263.5 8t-162.5 4h-44h-628l-376 -12v102l127 25q67 13 91.5 37t25.5 79l8 643q3 402 -8 645q-2 61 -25.5 84t-91.5 36l-127 24v102l376 -12h702q139 0 374 27q-6 -68 -14 -194.5t-12 -219.5l-5 -92h-93l-32 124q-31 121 -74 179.5 +t-113 58.5h-548q-28 0 -35.5 -8.5t-7.5 -30.5z" /> + <glyph glyph-name="uniF2D8" unicode="" +d="M922 739v-182q0 -4 0.5 -15t0 -15l-1.5 -12t-3.5 -11.5t-6.5 -7.5t-11 -5.5t-16 -1.5v309q9 0 16 -1t11 -5t6.5 -5.5t3.5 -9.5t1 -10.5v-13.5v-14zM1238 643v-121q0 -1 0.5 -12.5t0 -15.5t-2.5 -11.5t-7.5 -10.5t-13.5 -3q-9 0 -14 9q-4 10 -4 165v7v8.5v9t1.5 8.5l3.5 7 +t5 5.5t8 1.5q6 0 10 -1.5t6.5 -4.5t4 -6t2 -8.5t0.5 -8v-9.5v-9zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221q-20 148 -32 221h-158v-472h107v312l45 -312h76l43 319v-319zM1039 712q0 67 -5 90q-3 16 -11 28.5t-17 20.5t-25 14t-26.5 8.5t-31 4t-29 1.5 +h-29.5h-12h-91v-472h56q169 -1 197 24.5t25 180.5q-1 62 -1 100zM1356 515v133q0 29 -2 45t-9.5 33.5t-24.5 25t-46 7.5q-46 0 -77 -34v154h-117v-472h110l7 30q30 -36 77 -36q50 0 66 30.5t16 83.5zM1536 1248v-1216q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113 +v1216q0 66 47 113t113 47h1216q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2D9" unicode="" horiz-adv-x="2176" +d="M1143 -197q-6 1 -11 4q-13 8 -36 23t-86 65t-116.5 104.5t-112 140t-89.5 172.5q-17 3 -175 37q66 -213 235 -362t391 -184zM502 409l168 -28q-25 76 -41 167.5t-19 145.5l-4 53q-84 -82 -121 -224q5 -65 17 -114zM612 1018q-43 -64 -77 -148q44 46 74 68zM2049 584 +q0 161 -62 307t-167.5 252t-250.5 168.5t-304 62.5q-147 0 -281 -52.5t-240 -148.5q-30 -58 -45 -160q60 51 143 83.5t158.5 43t143 13.5t108.5 -1l40 -3q33 -1 53 -15.5t24.5 -33t6.5 -37t-1 -28.5q-126 11 -227.5 0.5t-183 -43.5t-142.5 -71.5t-131 -98.5 +q4 -36 11.5 -92.5t35.5 -178t62 -179.5q123 -6 247.5 14.5t214.5 53.5t162.5 67t109.5 59l37 24q22 16 39.5 20.5t30.5 -5t17 -34.5q14 -97 -39 -121q-208 -97 -467 -134q-135 -20 -317 -16q41 -96 110 -176.5t137 -127t130.5 -79t101.5 -43.5l39 -12q143 -23 263 15 +q195 99 314 289t119 418zM2123 621q-14 -135 -40 -212q-70 -208 -181.5 -346.5t-318.5 -253.5q-48 -33 -82 -44q-72 -26 -163 -16q-36 -3 -73 -3q-283 0 -504.5 173t-295.5 442q-1 0 -4 0.5t-5 0.5q-6 -50 2.5 -112.5t26 -115t36 -98t31.5 -71.5l14 -26q8 -12 54 -82 +q-71 38 -124.5 106.5t-78.5 140t-39.5 137t-17.5 107.5l-2 42q-5 2 -33.5 12.5t-48.5 18t-53 20.5t-57.5 25t-50 25.5t-42.5 27t-25 25.5q19 -10 50.5 -25.5t113 -45.5t145.5 -38l2 32q11 149 94 290q41 202 176 365q28 115 81 214q15 28 32 45t49 32q158 74 303.5 104 +t302 11t306.5 -97q220 -115 333 -336t87 -474z" /> + <glyph glyph-name="uniF2DA" unicode="" horiz-adv-x="1792" +d="M1341 752q29 44 -6.5 129.5t-121.5 142.5q-58 39 -125.5 53.5t-118 4.5t-68.5 -37q-12 -23 -4.5 -28t42.5 -10q23 -3 38.5 -5t44.5 -9.5t56 -17.5q36 -13 67.5 -31.5t53 -37t40 -38.5t30.5 -38t22 -34.5t16.5 -28.5t12 -18.5t10.5 -6t11 9.5zM1704 178 +q-52 -127 -148.5 -220t-214.5 -141.5t-253 -60.5t-266 13.5t-251 91t-210 161.5t-141.5 235.5t-46.5 303.5q1 41 8.5 84.5t12.5 64t24 80.5t23 73q-51 -208 1 -397t173 -318t291 -206t346 -83t349 74.5t289 244.5q20 27 18 14q0 -4 -4 -14zM1465 627q0 -104 -40.5 -199 +t-108.5 -164t-162 -109.5t-198 -40.5t-198 40.5t-162 109.5t-108.5 164t-40.5 199t40.5 199t108.5 164t162 109.5t198 40.5t198 -40.5t162 -109.5t108.5 -164t40.5 -199zM1752 915q-65 147 -180.5 251t-253 153.5t-292 53.5t-301 -36.5t-275.5 -129t-220 -211.5t-131 -297 +t-10 -373q-49 161 -51.5 311.5t35.5 272.5t109 227t165.5 180.5t207 126t232 71t242.5 9t236 -54t216 -124.5t178 -197q33 -50 62 -121t31 -112zM1690 573q12 244 -136.5 416t-396.5 240q-8 0 -10 5t24 8q125 -4 230 -50t173 -120t116 -168.5t58.5 -199t-1 -208 +t-61.5 -197.5t-122.5 -167t-185 -117.5t-248.5 -46.5q108 30 201.5 80t174 123t129.5 176.5t55 225.5z" /> + <glyph glyph-name="uniF2DB" unicode="" +d="M192 256v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 512v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 768v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16 +q0 16 16 16h112zM192 1024v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 1280v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM1280 1440v-1472q0 -40 -28 -68t-68 -28h-832q-40 0 -68 28 +t-28 68v1472q0 40 28 68t68 28h832q40 0 68 -28t28 -68zM1536 208v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 464v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 720v-32 +q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 976v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 1232v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16 +h48q16 0 16 -16z" /> + <glyph glyph-name="uniF2DC" unicode="" horiz-adv-x="1664" +d="M1566 419l-167 -33l186 -107q23 -13 29.5 -38.5t-6.5 -48.5q-14 -23 -39 -29.5t-48 6.5l-186 106l55 -160q13 -38 -12 -63.5t-60.5 -20.5t-48.5 42l-102 300l-271 156v-313l208 -238q16 -18 17 -39t-11 -36.5t-28.5 -25t-37 -5.5t-36.5 22l-112 128v-214q0 -26 -19 -45 +t-45 -19t-45 19t-19 45v214l-112 -128q-16 -18 -36.5 -22t-37 5.5t-28.5 25t-11 36.5t17 39l208 238v313l-271 -156l-102 -300q-13 -37 -48.5 -42t-60.5 20.5t-12 63.5l55 160l-186 -106q-23 -13 -48 -6.5t-39 29.5q-13 23 -6.5 48.5t29.5 38.5l186 107l-167 33 +q-29 6 -42 29t-8.5 46.5t25.5 40t50 10.5l310 -62l271 157l-271 157l-310 -62q-4 -1 -13 -1q-27 0 -44 18t-19 40t11 43t40 26l167 33l-186 107q-23 13 -29.5 38.5t6.5 48.5t39 30t48 -7l186 -106l-55 160q-13 38 12 63.5t60.5 20.5t48.5 -42l102 -300l271 -156v313 +l-208 238q-16 18 -17 39t11 36.5t28.5 25t37 5.5t36.5 -22l112 -128v214q0 26 19 45t45 19t45 -19t19 -45v-214l112 128q16 18 36.5 22t37 -5.5t28.5 -25t11 -36.5t-17 -39l-208 -238v-313l271 156l102 300q13 37 48.5 42t60.5 -20.5t12 -63.5l-55 -160l186 106 +q23 13 48 6.5t39 -29.5q13 -23 6.5 -48.5t-29.5 -38.5l-186 -107l167 -33q27 -5 40 -26t11 -43t-19 -40t-44 -18q-9 0 -13 1l-310 62l-271 -157l271 -157l310 62q29 6 50 -10.5t25.5 -40t-8.5 -46.5t-42 -29z" /> + <glyph glyph-name="uniF2DD" unicode="" horiz-adv-x="1792" +d="M1473 607q7 118 -33 226.5t-113 189t-177 131t-221 57.5q-116 7 -225.5 -32t-192 -110.5t-135 -175t-59.5 -220.5q-7 -118 33 -226.5t113 -189t177.5 -131t221.5 -57.5q155 -9 293 59t224 195.5t94 283.5zM1792 1536l-349 -348q120 -117 180.5 -272t50.5 -321 +q-11 -183 -102 -339t-241 -255.5t-332 -124.5l-999 -132l347 347q-120 116 -180.5 271.5t-50.5 321.5q11 184 102 340t241.5 255.5t332.5 124.5q167 22 500 66t500 66z" /> + <glyph glyph-name="uniF2DE" unicode="" horiz-adv-x="1792" +d="M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640q0 159 -62 304t-167.5 250.5t-250.5 167.5t-304 62 +t-304 -62t-250.5 -167.5t-167.5 -250.5t-62 -304t62 -304t167.5 -250.5t250.5 -167.5t304 -62t304 62t250.5 167.5t167.5 250.5t62 304zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71 +t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="uniF2E0" unicode="" horiz-adv-x="1920" +d="M1334 302q-4 24 -27.5 34t-49.5 10.5t-48.5 12.5t-25.5 38q-5 47 33 139.5t75 181t32 127.5q-14 101 -117 103q-45 1 -75 -16l-3 -2l-5 -2.5t-4.5 -2t-5 -2t-5 -0.5t-6 1.5t-6 3.5t-6.5 5q-3 2 -9 8.5t-9 9t-8.5 7.5t-9.5 7.5t-9.5 5.5t-11 4.5t-11.5 2.5q-30 5 -48 -3 +t-45 -31q-1 -1 -9 -8.5t-12.5 -11t-15 -10t-16.5 -5.5t-17 3q-54 27 -84 40q-41 18 -94 -5t-76 -65q-16 -28 -41 -98.5t-43.5 -132.5t-40 -134t-21.5 -73q-22 -69 18.5 -119t110.5 -46q30 2 50.5 15t38.5 46q7 13 79 199.5t77 194.5q6 11 21.5 18t29.5 0q27 -15 21 -53 +q-2 -18 -51 -139.5t-50 -132.5q-6 -38 19.5 -56.5t60.5 -7t55 49.5q4 8 45.5 92t81.5 163.5t46 88.5q20 29 41 28q29 0 25 -38q-2 -16 -65.5 -147.5t-70.5 -159.5q-12 -53 13 -103t74 -74q17 -9 51 -15.5t71.5 -8t62.5 14t20 48.5zM383 86q3 -15 -5 -27.5t-23 -15.5 +q-14 -3 -26.5 5t-15.5 23q-3 14 5 27t22 16t27 -5t16 -23zM953 -177q12 -17 8.5 -37.5t-20.5 -32.5t-37.5 -8t-32.5 21q-11 17 -7.5 37.5t20.5 32.5t37.5 8t31.5 -21zM177 635q-18 -27 -49.5 -33t-57.5 13q-26 18 -32 50t12 58q18 27 49.5 33t57.5 -12q26 -19 32 -50.5 +t-12 -58.5zM1467 -42q19 -28 13 -61.5t-34 -52.5t-60.5 -13t-51.5 34t-13 61t33 53q28 19 60.5 13t52.5 -34zM1579 562q69 -113 42.5 -244.5t-134.5 -207.5q-90 -63 -199 -60q-20 -80 -84.5 -127t-143.5 -44.5t-140 57.5q-12 -9 -13 -10q-103 -71 -225 -48.5t-193 126.5 +q-50 73 -53 164q-83 14 -142.5 70.5t-80.5 128t-2 152t81 138.5q-36 60 -38 128t24.5 125t79.5 98.5t121 50.5q32 85 99 148t146.5 91.5t168 17t159.5 -66.5q72 21 140 17.5t128.5 -36t104.5 -80t67.5 -115t17.5 -140.5q52 -16 87 -57t45.5 -89t-5.5 -99.5t-58 -87.5z +M455 1222q14 -20 9.5 -44.5t-24.5 -38.5q-19 -14 -43.5 -9.5t-37.5 24.5q-14 20 -9.5 44.5t24.5 38.5q19 14 43.5 9.5t37.5 -24.5zM614 1503q4 -16 -5 -30.5t-26 -18.5t-31 5.5t-18 26.5q-3 17 6.5 31t25.5 18q17 4 31 -5.5t17 -26.5zM1800 555q4 -20 -6.5 -37t-30.5 -21 +q-19 -4 -36 6.5t-21 30.5t6.5 37t30.5 22q20 4 36.5 -7.5t20.5 -30.5zM1136 1448q16 -27 8.5 -58.5t-35.5 -47.5q-27 -16 -57.5 -8.5t-46.5 34.5q-16 28 -8.5 59t34.5 48t58 9t47 -36zM1882 792q4 -15 -4 -27.5t-23 -16.5q-15 -3 -27.5 5.5t-15.5 22.5q-3 15 5 28t23 16 +q14 3 26.5 -5t15.5 -23zM1691 1033q15 -22 10.5 -49t-26.5 -43q-22 -15 -49 -10t-42 27t-10 49t27 43t48.5 11t41.5 -28z" /> + <glyph glyph-name="uniF2E1" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2E2" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2E3" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2E4" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2E5" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2E6" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2E7" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="_698" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2E9" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2EA" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2EB" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2EC" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2ED" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2EE" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="lessequal" unicode="" horiz-adv-x="1792" + /> + </font> +</defs></svg> diff --git a/Documentation/html/_static/fonts/fontawesome-webfont.ttf b/Documentation/html/_static/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 Binary files /dev/null and b/Documentation/html/_static/fonts/fontawesome-webfont.ttf differ diff --git a/Documentation/html/_static/fonts/fontawesome-webfont.woff b/Documentation/html/_static/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..400014a4b06eee3d0c0d54402a47ab2601b2862b Binary files /dev/null and b/Documentation/html/_static/fonts/fontawesome-webfont.woff differ diff --git a/Documentation/html/_static/fonts/fontawesome-webfont.woff2 b/Documentation/html/_static/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586 Binary files /dev/null and b/Documentation/html/_static/fonts/fontawesome-webfont.woff2 differ diff --git a/Documentation/html/_static/guide_icon.png b/Documentation/html/_static/guide_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a2622f178f03db527fb55762da1c21fdaa8cf266 Binary files /dev/null and b/Documentation/html/_static/guide_icon.png differ diff --git a/Documentation/html/_static/help_icon.png b/Documentation/html/_static/help_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bd770a4de2a901a803e5dd68783aa03c7a2755ab Binary files /dev/null and b/Documentation/html/_static/help_icon.png differ diff --git a/Documentation/html/_static/install_icon.png b/Documentation/html/_static/install_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bd530027d114ca97959e6fc312cc8bf39b62f67f Binary files /dev/null and b/Documentation/html/_static/install_icon.png differ diff --git a/Documentation/html/_static/jquery-3.2.1.js b/Documentation/html/_static/jquery-3.2.1.js new file mode 100644 index 0000000000000000000000000000000000000000..d2d8ca4790e52b0537f3cbb7dcd766099b789583 --- /dev/null +++ b/Documentation/html/_static/jquery-3.2.1.js @@ -0,0 +1,10253 @@ +/*! + * jQuery JavaScript Library v3.2.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: 2017-03-20T18:59Z + */ +( 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 = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* 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.2.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, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +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" && !jQuery.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 ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // 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() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + 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 ) ); + }, + + 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 ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( 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; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + 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, + + // Bind a function to a context, optionally partially applying any + // arguments. + 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 ( !jQuery.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; + }, + + now: Date.now, + + // 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 = jQuery.type( obj ); + + if ( type === "function" || jQuery.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.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-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(), + 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 + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + 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" ) + }, + + 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(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { 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 && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // 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; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } 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 && + disabledAncestor( 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 ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * 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 ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ 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) {} + } + + 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 || elem.innerText || 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; + 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 ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.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; + } ); + } + + // Simple selector that can be filtered directly, removing non-Elements + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + // Complex selector, compare the two sets, removing non-Elements + qualifier = jQuery.filter( qualifier, elements ); + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; + } ); +} + +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 ( jQuery.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 ( jQuery.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 ( nodeName( elem, "iframe" ) ) { + 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 ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( 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 && jQuery.isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && jQuery.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 = jQuery.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 && jQuery.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 ( jQuery.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, + jQuery.isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.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, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].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" || + jQuery.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 ( jQuery.type( 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 ( !jQuery.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; +}; +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[ jQuery.camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ jQuery.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 ][ jQuery.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( jQuery.camelCase ); + } else { + key = jQuery.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 = jQuery.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 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. + jQuery.contains( elem.ownerDocument, 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 = 1, + 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 = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + 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 = ( /^$|\/(?: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, contains, 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 ( jQuery.type( 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; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + 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 documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +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() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || 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: jQuery.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 + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return nodeName( event.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; + } + } + } + } +}; + +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 || jQuery.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, + 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 ); + +// 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 + // 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, + rscriptTypeMasked = /^true\/(.*)/, + 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( ">tbody", elem )[ 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 ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } 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 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + 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 ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), 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 && jQuery.contains( node.ownerDocument, 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 = jQuery.contains( elem.ownerDocument, 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 rmargin = ( /^margin/ ); + +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 ); + }; + + + +( 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; + } + + div.style.cssText = + "box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + 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; + } + + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, 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"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + jQuery.extend( support, { + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + computeStyleTests(); + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + } + } ); +} )(); + + +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 === "" && !jQuery.contains( elem.ownerDocument, 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.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.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 + + // 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" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return 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 property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +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 augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i, + val = 0; + + // If we already have the right measurement, avoid augmentation + if ( extra === ( isBorderBox ? "border" : "content" ) ) { + i = 4; + + // Otherwise initialize for horizontal or vertical properties + } else { + i = name === "width" ? 1 : 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with computed style + var valueIsBorderBox, + styles = getStyles( elem ), + val = curCSS( elem, name, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Fall back to offsetWidth/Height when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + if ( val === "auto" ) { + val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; + } + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "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, + "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: { + "float": "cssFloat" + }, + + // 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 = jQuery.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) + if ( type === "number" ) { + 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 = jQuery.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, name ) { + jQuery.cssHooks[ name ] = { + 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, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + 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 ( !rmargin.test( prefix ) ) { + 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 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + 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 = jQuery.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 - 13 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY + 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 = jQuery.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 ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.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 ( jQuery.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 || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.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 ( jQuery.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 = jQuery.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://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + 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 ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + 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; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.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 ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnothtmlwhite ) || []; + + 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, isFunction, + 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; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + 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 + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = 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 && !jQuery.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() ) { + + 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 && jQuery.isFunction( elem[ type ] ) && !jQuery.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; + elem[ type ](); + 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 ); + } + } +} ); + + +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 ); + } +} ); + + + + +support.focusin = "onfocusin" in window; + + +// 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 = jQuery.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 && jQuery.type( 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 = jQuery.isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // 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 ( jQuery.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() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // 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 - 13 + // 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, append data to url + if ( s.data ) { + 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 ( jQuery.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 ) { + 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, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( jQuery.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 ( jQuery.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 isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? 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.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 = 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 requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "<script>" ).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 = jQuery.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 && jQuery.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 ( jQuery.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 ( jQuery.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: function( options ) { + + // Preserve chaining for setter + if ( arguments.length ) { + return options === undefined ? + this : + this.each( function( i ) { + jQuery.offset.setOffset( this, options, i ); + } ); + } + + var doc, docElem, 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 }; + } + + rect = elem.getBoundingClientRect(); + + doc = elem.ownerDocument; + docElem = doc.documentElement; + win = doc.defaultView; + + return { + top: rect.top + win.pageYOffset - docElem.clientTop, + left: rect.left + win.pageXOffset - docElem.clientLeft + }; + }, + + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, + elem = this[ 0 ], + parentOffset = { top: 0, left: 0 }; + + // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, + // because it is its only offset parent + if ( jQuery.css( elem, "position" ) === "fixed" ) { + + // Assume getBoundingClientRect is there when computed position is fixed + offset = elem.getBoundingClientRect(); + + } else { + + // Get *real* offsetParent + offsetParent = this.offsetParent(); + + // Get correct offsets + offset = this.offset(); + if ( !nodeName( offsetParent[ 0 ], "html" ) ) { + parentOffset = offsetParent.offset(); + } + + // Add offsetParent borders + parentOffset = { + top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ), + left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "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 ( jQuery.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 ( jQuery.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.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 ); + } +} ); + +jQuery.holdReady = function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } +}; +jQuery.isArray = Array.isArray; +jQuery.parseJSON = JSON.parse; +jQuery.nodeName = nodeName; + + + + +// 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 new file mode 100644 index 0000000000000000000000000000000000000000..644d35e274fd64ddaf6d12af813e820c424176a9 --- /dev/null +++ b/Documentation/html/_static/jquery.js @@ -0,0 +1,4 @@ +/*! 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}); diff --git a/Documentation/html/_static/js/modernizr.min.js b/Documentation/html/_static/js/modernizr.min.js new file mode 100644 index 0000000000000000000000000000000000000000..f65d47974786ee51c258f680bd9be621629244f5 --- /dev/null +++ b/Documentation/html/_static/js/modernizr.min.js @@ -0,0 +1,4 @@ +/* Modernizr 2.6.2 (Custom Build) | MIT & BSD + * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load + */ +;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)u[c[d]]=c[d]in k;return u.list&&(u.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),u}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)k.setAttribute("type",f=a[d]),e=k.type!=="text",e&&(k.value=l,k.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&k.style.WebkitAppearance!==c?(g.appendChild(k),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(k,null).WebkitAppearance!=="textfield"&&k.offsetHeight!==0,g.removeChild(k)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=k.checkValidity&&k.checkValidity()===!1:e=k.value!=l)),t[a[d]]=!!e;return t}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k=b.createElement("input"),l=":)",m={}.toString,n=" -webkit- -moz- -o- -ms- ".split(" "),o="Webkit Moz O ms",p=o.split(" "),q=o.toLowerCase().split(" "),r={svg:"http://www.w3.org/2000/svg"},s={},t={},u={},v=[],w=v.slice,x,y=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="<svg/>",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function p(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return r.shivMethods?n(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+l().join().replace(/\w+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(r,b.frag)}function q(a){a||(a=b);var c=m(a);return r.shivCSS&&!f&&!c.hasCSS&&(c.hasCSS=!!k(a,"article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}")),j||p(a,c),a}var c=a.html5||{},d=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,f,g="_html5shiv",h=0,i={},j;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))}; diff --git a/Documentation/html/_static/js/theme.js b/Documentation/html/_static/js/theme.js new file mode 100644 index 0000000000000000000000000000000000000000..8555d79b71a1a347857e06b8a6223df1ccdd7859 --- /dev/null +++ b/Documentation/html/_static/js/theme.js @@ -0,0 +1,3 @@ +/* sphinx_rtd_theme version 0.4.3 | MIT license */ +/* Built 20190212 16:02 */ +require=function r(s,a,l){function c(e,n){if(!a[e]){if(!s[e]){var i="function"==typeof require&&require;if(!n&&i)return i(e,!0);if(u)return u(e,!0);var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}var o=a[e]={exports:{}};s[e][0].call(o.exports,function(n){return c(s[e][1][n]||n)},o,o.exports,r,s,a,l)}return a[e].exports}for(var u="function"==typeof require&&require,n=0;n<l.length;n++)c(l[n]);return c}({"sphinx-rtd-theme":[function(n,e,i){var jQuery="undefined"!=typeof window?window.jQuery:n("jquery");e.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(e){var i=this;void 0===e&&(e=!0),i.isRunning||(i.isRunning=!0,jQuery(function(n){i.init(n),i.reset(),i.win.on("hashchange",i.reset),e&&i.win.on("scroll",function(){i.linkScroll||i.winScroll||(i.winScroll=!0,requestAnimationFrame(function(){i.onScroll()}))}),i.win.on("resize",function(){i.winResize||(i.winResize=!0,requestAnimationFrame(function(){i.onResize()}))}),i.onResize()}))},enableSticky:function(){this.enable(!0)},init:function(i){i(document);var t=this;this.navBar=i("div.wy-side-scroll:first"),this.win=i(window),i(document).on("click","[data-toggle='wy-nav-top']",function(){i("[data-toggle='wy-nav-shift']").toggleClass("shift"),i("[data-toggle='rst-versions']").toggleClass("shift")}).on("click",".wy-menu-vertical .current ul li a",function(){var n=i(this);i("[data-toggle='wy-nav-shift']").removeClass("shift"),i("[data-toggle='rst-versions']").toggleClass("shift"),t.toggleCurrent(n),t.hashChange()}).on("click","[data-toggle='rst-current-version']",function(){i("[data-toggle='rst-versions']").toggleClass("shift-up")}),i("table.docutils:not(.field-list,.footnote,.citation)").wrap("<div class='wy-table-responsive'></div>"),i("table.docutils.footnote").wrap("<div class='wy-table-responsive footnote'></div>"),i("table.docutils.citation").wrap("<div class='wy-table-responsive citation'></div>"),i(".wy-menu-vertical ul").not(".simple").siblings("a").each(function(){var e=i(this);expand=i('<span class="toctree-expand"></span>'),expand.on("click",function(n){return t.toggleCurrent(e),n.stopPropagation(),!1}),e.prepend(expand)})},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),i=e.find('[href="'+n+'"]');if(0===i.length){var t=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(i=e.find('[href="#'+t.attr("id")+'"]')).length&&(i=e.find('[href="#"]'))}0<i.length&&($(".wy-menu-vertical .current").removeClass("current"),i.addClass("current"),i.closest("li.toctree-l1").addClass("current"),i.closest("li.toctree-l1").parent().addClass("current"),i.closest("li.toctree-l1").addClass("current"),i.closest("li.toctree-l2").addClass("current"),i.closest("li.toctree-l3").addClass("current"),i.closest("li.toctree-l4").addClass("current"),i[0].scrollIntoView())}catch(o){console.log("Error expanding nav for anchor",o)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,i=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(i),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",function(){this.linkScroll=!1})},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current"),e.siblings().find("li.current").removeClass("current"),e.find("> ul li.current").removeClass("current"),e.toggleClass("current")}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:e.exports.ThemeNav,StickyNav:e.exports.ThemeNav}),function(){for(var r=0,n=["ms","moz","webkit","o"],e=0;e<n.length&&!window.requestAnimationFrame;++e)window.requestAnimationFrame=window[n[e]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[n[e]+"CancelAnimationFrame"]||window[n[e]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(n,e){var i=(new Date).getTime(),t=Math.max(0,16-(i-r)),o=window.setTimeout(function(){n(i+t)},t);return r=i+t,o}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(n){clearTimeout(n)})}()},{jquery:"jquery"}]},{},["sphinx-rtd-theme"]); \ No newline at end of file diff --git a/Documentation/html/_static/language_data.js b/Documentation/html/_static/language_data.js new file mode 100644 index 0000000000000000000000000000000000000000..5266fb19ecb24d085a338bdace79a063326b1cff --- /dev/null +++ b/Documentation/html/_static/language_data.js @@ -0,0 +1,297 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * 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. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"]; + + +/* Non-minified version JS is _stemmer.js if file is provided */ +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + + + + + +var splitChars = (function() { + var result = {}; + var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, + 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, + 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, + 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, + 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, + 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, + 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, + 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, + 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, + 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; + var i, j, start, end; + for (i = 0; i < singles.length; i++) { + result[singles[i]] = true; + } + var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], + [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], + [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], + [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], + [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], + [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], + [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], + [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], + [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], + [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], + [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], + [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], + [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], + [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], + [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], + [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], + [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], + [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], + [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], + [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], + [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], + [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], + [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], + [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], + [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], + [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], + [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], + [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], + [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], + [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], + [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], + [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], + [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], + [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], + [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], + [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], + [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], + [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], + [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], + [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], + [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], + [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], + [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], + [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], + [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], + [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], + [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], + [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], + [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; + for (i = 0; i < ranges.length; i++) { + start = ranges[i][0]; + end = ranges[i][1]; + for (j = start; j <= end; j++) { + result[j] = true; + } + } + return result; +})(); + +function splitQuery(query) { + var result = []; + var start = -1; + for (var i = 0; i < query.length; i++) { + if (splitChars[query.charCodeAt(i)]) { + if (start !== -1) { + result.push(query.slice(start, i)); + start = -1; + } + } else if (start === -1) { + start = i; + } + } + if (start !== -1) { + result.push(query.slice(start)); + } + return result; +} + + diff --git a/Documentation/html/_static/minus.png b/Documentation/html/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d Binary files /dev/null and b/Documentation/html/_static/minus.png differ diff --git a/Documentation/html/_static/plus.png b/Documentation/html/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d Binary files /dev/null and b/Documentation/html/_static/plus.png differ diff --git a/Documentation/html/_static/prog_icon.png b/Documentation/html/_static/prog_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d618f34543a4b9a7bc692faf0e27d2855857ba32 Binary files /dev/null and b/Documentation/html/_static/prog_icon.png differ diff --git a/Documentation/html/_static/pygments.css b/Documentation/html/_static/pygments.css new file mode 100644 index 0000000000000000000000000000000000000000..20c4814dcf0d3f437ee9a46f5957e3165aa5fb17 --- /dev/null +++ b/Documentation/html/_static/pygments.css @@ -0,0 +1,69 @@ +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #333333 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #208050 } /* Literal.Number.Bin */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06287e } /* Name.Function.Magic */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/Documentation/html/_static/python/hidden_code_block.py b/Documentation/html/_static/python/hidden_code_block.py new file mode 100644 index 0000000000000000000000000000000000000000..2d3600eeaa7c9c45707d953527de0b04b445b4d7 --- /dev/null +++ b/Documentation/html/_static/python/hidden_code_block.py @@ -0,0 +1,127 @@ +"""Simple, inelegant Sphinx extension which adds a directive for a +highlighted code-block that may be toggled hidden and shown in HTML. +This is possibly useful for teaching courses. + +The directive, like the standard code-block directive, takes +a language argument and an optional linenos parameter. The +hidden-code-block adds starthidden and label as optional +parameters. + +Examples: + +.. hidden-code-block:: python + :starthidden: False + + a = 10 + b = a + 5 + +.. hidden-code-block:: python + :label: --- SHOW/HIDE --- + + x = 10 + y = x + 5 + +Thanks to http://www.javascriptkit.com/javatutors/dom3.shtml for +inspiration on the javascript. + +Thanks to Milad 'animal' Fatenejad for suggesting this extension +in the first place. + +Written by Anthony 'el Scopz' Scopatz, January 2012. + +Released under the WTFPL (http://sam.zoy.org/wtfpl/). +""" + +from docutils import nodes +from docutils.parsers.rst import directives +from sphinx.directives.code import CodeBlock + +HCB_COUNTER = 0 + +js_showhide = """\ +<script type="text/javascript"> + function showhide(element){ + if (!document.getElementById) + return + + if (element.style.display == "block") + element.style.display = "none" + else + element.style.display = "block" + }; +</script> +""" + +def nice_bool(arg): + tvalues = ('true', 't', 'yes', 'y') + fvalues = ('false', 'f', 'no', 'n') + arg = directives.choice(arg, tvalues + fvalues) + return arg in tvalues + + +class hidden_code_block(nodes.General, nodes.FixedTextElement): + pass + + +class HiddenCodeBlock(CodeBlock): + """Hidden code block is Hidden""" + + option_spec = dict(starthidden=nice_bool, + label=str, + **CodeBlock.option_spec) + + def run(self): + # Body of the method is more or less copied from CodeBlock + code = u'\n'.join(self.content) + hcb = hidden_code_block(code, code) + hcb['language'] = self.arguments[0] + hcb['linenos'] = 'linenos' in self.options + hcb['starthidden'] = self.options.get('starthidden', True) + hcb['label'] = self.options.get('label', '+ show/hide code') + hcb.line = self.lineno + return [hcb] + + +def visit_hcb_html(self, node): + """Visit hidden code block""" + global HCB_COUNTER + HCB_COUNTER += 1 + + # We want to use the original highlighter so that we don't + # have to reimplement it. However it raises a SkipNode + # error at the end of the function call. Thus we intercept + # it and raise it again later. + try: + self.visit_literal_block(node) + except nodes.SkipNode: + pass + + # The last element of the body should be the literal code + # block that was just made. + code_block = self.body[-1] + + fill_header = {'divname': 'hiddencodeblock{0}'.format(HCB_COUNTER), + 'startdisplay': 'none' if node['starthidden'] else 'block', + 'label': node.get('label'), + } + + divheader = ("""<a href="javascript:showhide(document.getElementById('{divname}'))">""" + """{label}</a><br />""" + '''<div id="{divname}" style="display: {startdisplay}">''' + ).format(**fill_header) + + code_block = js_showhide + divheader + code_block + "</div>" + + # reassign and exit + self.body[-1] = code_block + raise nodes.SkipNode + + +def depart_hcb_html(self, node): + """Depart hidden code block""" + # Stub because of SkipNode in visit + + +def setup(app): + app.add_directive('hidden-code-block', HiddenCodeBlock) + app.add_node(hidden_code_block, html=(visit_hcb_html, depart_hcb_html)) \ No newline at end of file diff --git a/Documentation/html/_static/searchtools.js b/Documentation/html/_static/searchtools.js new file mode 100644 index 0000000000000000000000000000000000000000..5ff318066d83f9da7a5a97f34f7d78e1a7696c7c --- /dev/null +++ b/Documentation/html/_static/searchtools.js @@ -0,0 +1,481 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +if (!Scorer) { + /** + * Simple result scoring code. + */ + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [filename, title, anchor, descr, score] + // and returns the new score. + /* + score: function(result) { + return result[4]; + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: {0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5}, // used to be unimportantResults + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + // query found in terms + term: 5 + }; +} + +if (!splitQuery) { + function splitQuery(query) { + return query.split(/\s+/); + } +} + +/** + * Search Module + */ +var Search = { + + _index : null, + _queued_query : null, + _pulse_status : -1, + + init : function() { + var params = $.getQueryParameters(); + if (params.q) { + var query = params.q[0]; + $('input[name="q"]')[0].value = query; + this.performSearch(query); + } + }, + + loadIndex : function(url) { + $.ajax({type: "GET", url: url, data: null, + dataType: "script", cache: true, + complete: function(jqxhr, textstatus) { + if (textstatus != "success") { + document.getElementById("searchindexloader").src = url; + } + }}); + }, + + setIndex : function(index) { + var q; + this._index = index; + if ((q = this._queued_query) !== null) { + this._queued_query = null; + Search.query(q); + } + }, + + hasIndex : function() { + return this._index !== null; + }, + + deferQuery : function(query) { + this._queued_query = query; + }, + + stopPulse : function() { + this._pulse_status = 0; + }, + + startPulse : function() { + if (this._pulse_status >= 0) + return; + function pulse() { + var i; + Search._pulse_status = (Search._pulse_status + 1) % 4; + var dotString = ''; + for (i = 0; i < Search._pulse_status; i++) + dotString += '.'; + Search.dots.text(dotString); + if (Search._pulse_status > -1) + window.setTimeout(pulse, 500); + } + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch : function(query) { + // create the required interface elements + 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.output = $('<ul class="search"/>').appendTo(this.out); + + $('#search-progress').text(_('Preparing search...')); + this.startPulse(); + + // index already loaded, the browser was quick! + if (this.hasIndex()) + this.query(query); + else + this.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query : function(query) { + var i; + + // stem the searchterms and add them to the correct list + var stemmer = new Stemmer(); + var searchterms = []; + var excluded = []; + var hlterms = []; + var tmp = splitQuery(query); + var objectterms = []; + for (i = 0; i < tmp.length; i++) { + if (tmp[i] !== "") { + objectterms.push(tmp[i].toLowerCase()); + } + + if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) || + tmp[i] === "") { + // skip this "word" + continue; + } + // stem the word + var word = stemmer.stemWord(tmp[i].toLowerCase()); + // prevent stemmer from cutting word smaller than two chars + if(word.length < 3 && tmp[i].length >= 3) { + word = tmp[i]; + } + var toAppend; + // select the correct list + if (word[0] == '-') { + toAppend = excluded; + word = word.substr(1); + } + else { + toAppend = searchterms; + hlterms.push(tmp[i].toLowerCase()); + } + // only add if not already in the list + if (!$u.contains(toAppend, word)) + toAppend.push(word); + } + var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" ")); + + // console.debug('SEARCH: searching for:'); + // console.info('required: ', searchterms); + // console.info('excluded: ', excluded); + + // prepare search + var terms = this._index.terms; + var titleterms = this._index.titleterms; + + // array of [filename, title, anchor, descr, score] + var results = []; + $('#search-progress').empty(); + + // lookup as object + for (i = 0; i < objectterms.length; i++) { + var others = [].concat(objectterms.slice(0, i), + objectterms.slice(i+1, objectterms.length)); + results = results.concat(this.performObjectSearch(objectterms[i], others)); + } + + // lookup as search terms in fulltext + results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + for (i = 0; i < results.length; i++) + results[i][4] = Scorer.score(results[i]); + } + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort(function(a, b) { + var left = a[4]; + var right = b[4]; + if (left > right) { + return 1; + } else if (left < right) { + return -1; + } else { + // same score: sort alphabetically + left = a[1].toLowerCase(); + right = b[1].toLowerCase(); + return (left > right) ? -1 : ((left < right) ? 1 : 0); + } + }); + + // for debugging + //Search.lastresults = results.slice(); // a copy + //console.info('search results:', Search.lastresults); + + // print the results + var resultCount = results.length; + function displayNextItem() { + // results left, load the summary and display it + if (results.length) { + var item = results.pop(); + var listItem = $('<li style="display:none"></li>'); + if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') { + // dirhtml builder + var dirname = item[0] + '/'; + if (dirname.match(/\/index\/$/)) { + dirname = dirname.substring(0, dirname.length-6); + } else if (dirname == 'index/') { + dirname = ''; + } + listItem.append($('<a/>').attr('href', + DOCUMENTATION_OPTIONS.URL_ROOT + dirname + + highlightstring + item[2]).html(item[1])); + } else { + // normal html builders + listItem.append($('<a/>').attr('href', + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX + + highlightstring + item[2]).html(item[1])); + } + if (item[3]) { + listItem.append($('<span> (' + item[3] + ')</span>')); + Search.output.append(listItem); + listItem.slideDown(5, function() { + 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), + dataType: "text", + complete: function(jqxhr, textstatus) { + var data = jqxhr.responseText; + if (data !== '' && data !== undefined) { + listItem.append(Search.makeSearchSummary(data, searchterms, hlterms)); + } + Search.output.append(listItem); + listItem.slideDown(5, function() { + displayNextItem(); + }); + }}); + } else { + // no source available, just display title + Search.output.append(listItem); + listItem.slideDown(5, function() { + displayNextItem(); + }); + } + } + // search finished, update title and status message + else { + Search.stopPulse(); + Search.title.text(_('Search Results')); + if (!resultCount) + Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.')); + else + Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount)); + Search.status.fadeIn(500); + } + } + displayNextItem(); + }, + + /** + * search for object names + */ + performObjectSearch : function(object, otherterms) { + var filenames = this._index.filenames; + var docnames = this._index.docnames; + var objects = this._index.objects; + var objnames = this._index.objnames; + var titles = this._index.titles; + + var i; + var results = []; + + for (var prefix in objects) { + for (var name in objects[prefix]) { + var fullname = (prefix ? prefix + '.' : '') + name; + if (fullname.toLowerCase().indexOf(object) > -1) { + var score = 0; + var parts = fullname.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) { + score += Scorer.objNameMatch; + // matches in last name + } else if (parts[parts.length - 1].indexOf(object) > -1) { + score += Scorer.objPartialMatch; + } + var match = objects[prefix][name]; + var objname = objnames[match[1]][2]; + var title = titles[match[0]]; + // If more than one term searched for, we require other words to be + // found in the name/title/description + if (otherterms.length > 0) { + var haystack = (prefix + ' ' + name + ' ' + + objname + ' ' + title).toLowerCase(); + var allfound = true; + for (i = 0; i < otherterms.length; i++) { + if (haystack.indexOf(otherterms[i]) == -1) { + allfound = false; + break; + } + } + if (!allfound) { + continue; + } + } + var descr = objname + _(', in ') + title; + + var anchor = match[3]; + if (anchor === '') + anchor = fullname; + else if (anchor == '-') + anchor = objnames[match[1]][1] + '-' + fullname; + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) { + score += Scorer.objPrio[match[2]]; + } else { + score += Scorer.objPrioDefault; + } + results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]); + } + } + } + + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch : function(searchterms, excluded, terms, titleterms) { + var docnames = this._index.docnames; + var filenames = this._index.filenames; + var titles = this._index.titles; + + var i, j, file; + var fileMap = {}; + var scoreMap = {}; + var results = []; + + // perform the search on the required terms + for (i = 0; i < searchterms.length; i++) { + var word = searchterms[i]; + var files = []; + var _o = [ + {files: terms[word], score: Scorer.term}, + {files: titleterms[word], score: Scorer.title} + ]; + + // no match but word was a required one + if ($u.every(_o, function(o){return o.files === undefined;})) { + break; + } + // found search word in contents + $u.each(_o, function(o) { + var _files = o.files; + if (_files === undefined) + return + + if (_files.length === undefined) + _files = [_files]; + files = files.concat(_files); + + // set score for the word in each file to Scorer.term + for (j = 0; j < _files.length; j++) { + file = _files[j]; + if (!(file in scoreMap)) + scoreMap[file] = {} + scoreMap[file][word] = o.score; + } + }); + + // create the mapping + for (j = 0; j < files.length; j++) { + file = files[j]; + if (file in fileMap) + fileMap[file].push(word); + else + fileMap[file] = [word]; + } + } + + // now check if the files don't contain excluded terms + for (file in fileMap) { + var valid = true; + + // check if all requirements are matched + if (fileMap[file].length != searchterms.length) + continue; + + // ensure that none of the excluded terms is in the search result + for (i = 0; i < excluded.length; i++) { + if (terms[excluded[i]] == file || + titleterms[excluded[i]] == file || + $u.contains(terms[excluded[i]] || [], file) || + $u.contains(titleterms[excluded[i]] || [], file)) { + valid = false; + break; + } + } + + // if we have still a valid result we can add it to the result list + if (valid) { + // select one (max) score for the file. + // for better ranking, we should calculate ranking by using words statistics like basic tf-idf... + var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]})); + results.push([docnames[file], titles[file], '', null, score, filenames[file]]); + } + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words, hlwords is the list of normal, unstemmed + * words. the first one is used to find the occurrence, the + * latter for highlighting it. + */ + makeSearchSummary : function(text, keywords, hlwords) { + var textLower = text.toLowerCase(); + var start = 0; + $.each(keywords, function() { + var i = textLower.indexOf(this.toLowerCase()); + if (i > -1) + start = i; + }); + start = Math.max(start - 120, 0); + var excerpt = ((start > 0) ? '...' : '') + + $.trim(text.substr(start, 240)) + + ((start + 240 - text.length) ? '...' : ''); + var rv = $('<div class="context"></div>').text(excerpt); + $.each(hlwords, function() { + rv = rv.highlightText(this, 'highlighted'); + }); + return rv; + } +}; + +$(document).ready(function() { + Search.init(); +}); diff --git a/Documentation/html/_static/source_icon.png b/Documentation/html/_static/source_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..98d5780c92e36b315393f1b931a8c1321139796b Binary files /dev/null and b/Documentation/html/_static/source_icon.png differ diff --git a/Documentation/html/_static/underscore-1.3.1.js b/Documentation/html/_static/underscore-1.3.1.js new file mode 100644 index 0000000000000000000000000000000000000000..208d4cd890c3183d946092ebe982738ade565061 --- /dev/null +++ b/Documentation/html/_static/underscore-1.3.1.js @@ -0,0 +1,999 @@ +// Underscore.js 1.3.1 +// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. +// Underscore is freely distributable under the MIT license. +// Portions of Underscore are inspired or borrowed from Prototype, +// Oliver Steele's Functional, and John Resig's Micro-Templating. +// For all details and documentation: +// http://documentcloud.github.com/underscore + +(function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` in the browser, or `global` on the server. + var root = this; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Establish the object that gets returned to break out of a loop iteration. + var breaker = {}; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; + + // Create quick reference variables for speed access to core prototypes. + var slice = ArrayProto.slice, + unshift = ArrayProto.unshift, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var + nativeForEach = ArrayProto.forEach, + nativeMap = ArrayProto.map, + nativeReduce = ArrayProto.reduce, + nativeReduceRight = ArrayProto.reduceRight, + nativeFilter = ArrayProto.filter, + nativeEvery = ArrayProto.every, + nativeSome = ArrayProto.some, + nativeIndexOf = ArrayProto.indexOf, + nativeLastIndexOf = ArrayProto.lastIndexOf, + nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeBind = FuncProto.bind; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { return new wrapper(obj); }; + + // Export the Underscore object for **Node.js**, with + // backwards-compatibility for the old `require()` API. If we're in + // the browser, add `_` as a global object via a string identifier, + // for Closure Compiler "advanced" mode. + if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = _; + } + exports._ = _; + } else { + root['_'] = _; + } + + // Current version. + _.VERSION = '1.3.1'; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles objects with the built-in `forEach`, arrays, and raw objects. + // Delegates to **ECMAScript 5**'s native `forEach` if available. + var each = _.each = _.forEach = function(obj, iterator, context) { + if (obj == null) return; + if (nativeForEach && obj.forEach === nativeForEach) { + obj.forEach(iterator, context); + } else if (obj.length === +obj.length) { + for (var i = 0, l = obj.length; i < l; i++) { + if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return; + } + } else { + for (var key in obj) { + if (_.has(obj, key)) { + if (iterator.call(context, obj[key], key, obj) === breaker) return; + } + } + } + }; + + // Return the results of applying the iterator to each element. + // Delegates to **ECMAScript 5**'s native `map` if available. + _.map = _.collect = function(obj, iterator, context) { + var results = []; + if (obj == null) return results; + if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context); + each(obj, function(value, index, list) { + results[results.length] = iterator.call(context, value, index, list); + }); + if (obj.length === +obj.length) results.length = obj.length; + return results; + }; + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available. + _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) { + var initial = arguments.length > 2; + if (obj == null) obj = []; + if (nativeReduce && obj.reduce === nativeReduce) { + if (context) iterator = _.bind(iterator, context); + return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator); + } + each(obj, function(value, index, list) { + if (!initial) { + memo = value; + initial = true; + } else { + memo = iterator.call(context, memo, value, index, list); + } + }); + if (!initial) throw new TypeError('Reduce of empty array with no initial value'); + return memo; + }; + + // The right-associative version of reduce, also known as `foldr`. + // Delegates to **ECMAScript 5**'s native `reduceRight` if available. + _.reduceRight = _.foldr = function(obj, iterator, memo, context) { + var initial = arguments.length > 2; + if (obj == null) obj = []; + if (nativeReduceRight && obj.reduceRight === nativeReduceRight) { + if (context) iterator = _.bind(iterator, context); + return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator); + } + var reversed = _.toArray(obj).reverse(); + if (context && !initial) iterator = _.bind(iterator, context); + return initial ? _.reduce(reversed, iterator, memo, context) : _.reduce(reversed, iterator); + }; + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, iterator, context) { + var result; + any(obj, function(value, index, list) { + if (iterator.call(context, value, index, list)) { + result = value; + return true; + } + }); + return result; + }; + + // Return all the elements that pass a truth test. + // Delegates to **ECMAScript 5**'s native `filter` if available. + // Aliased as `select`. + _.filter = _.select = function(obj, iterator, context) { + var results = []; + if (obj == null) return results; + if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context); + each(obj, function(value, index, list) { + if (iterator.call(context, value, index, list)) results[results.length] = value; + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, iterator, context) { + var results = []; + if (obj == null) return results; + each(obj, function(value, index, list) { + if (!iterator.call(context, value, index, list)) results[results.length] = value; + }); + return results; + }; + + // Determine whether all of the elements match a truth test. + // Delegates to **ECMAScript 5**'s native `every` if available. + // Aliased as `all`. + _.every = _.all = function(obj, iterator, context) { + var result = true; + if (obj == null) return result; + if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context); + each(obj, function(value, index, list) { + if (!(result = result && iterator.call(context, value, index, list))) return breaker; + }); + return result; + }; + + // Determine if at least one element in the object matches a truth test. + // Delegates to **ECMAScript 5**'s native `some` if available. + // Aliased as `any`. + var any = _.some = _.any = function(obj, iterator, context) { + iterator || (iterator = _.identity); + var result = false; + if (obj == null) return result; + if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context); + each(obj, function(value, index, list) { + if (result || (result = iterator.call(context, value, index, list))) return breaker; + }); + return !!result; + }; + + // Determine if a given value is included in the array or object using `===`. + // Aliased as `contains`. + _.include = _.contains = function(obj, target) { + var found = false; + if (obj == null) return found; + if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1; + found = any(obj, function(value) { + return value === target; + }); + return found; + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = function(obj, method) { + var args = slice.call(arguments, 2); + return _.map(obj, function(value) { + return (_.isFunction(method) ? method || value : value[method]).apply(value, args); + }); + }; + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, function(value){ return value[key]; }); + }; + + // Return the maximum element or (element-based computation). + _.max = function(obj, iterator, context) { + if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj); + if (!iterator && _.isEmpty(obj)) return -Infinity; + var result = {computed : -Infinity}; + each(obj, function(value, index, list) { + var computed = iterator ? iterator.call(context, value, index, list) : value; + computed >= result.computed && (result = {value : value, computed : computed}); + }); + return result.value; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iterator, context) { + if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj); + if (!iterator && _.isEmpty(obj)) return Infinity; + var result = {computed : Infinity}; + each(obj, function(value, index, list) { + var computed = iterator ? iterator.call(context, value, index, list) : value; + computed < result.computed && (result = {value : value, computed : computed}); + }); + return result.value; + }; + + // Shuffle an array. + _.shuffle = function(obj) { + var shuffled = [], rand; + each(obj, function(value, index, list) { + if (index == 0) { + shuffled[0] = value; + } else { + rand = Math.floor(Math.random() * (index + 1)); + shuffled[index] = shuffled[rand]; + shuffled[rand] = value; + } + }); + return shuffled; + }; + + // Sort the object's values by a criterion produced by an iterator. + _.sortBy = function(obj, iterator, context) { + return _.pluck(_.map(obj, function(value, index, list) { + return { + value : value, + criteria : iterator.call(context, value, index, list) + }; + }).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }), 'value'); + }; + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + _.groupBy = function(obj, val) { + var result = {}; + var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; }; + each(obj, function(value, index) { + var key = iterator(value, index); + (result[key] || (result[key] = [])).push(value); + }); + return result; + }; + + // Use a comparator function to figure out at what index an object should + // be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iterator) { + iterator || (iterator = _.identity); + var low = 0, high = array.length; + while (low < high) { + var mid = (low + high) >> 1; + iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid; + } + return low; + }; + + // Safely convert anything iterable into a real, live array. + _.toArray = function(iterable) { + if (!iterable) return []; + if (iterable.toArray) return iterable.toArray(); + if (_.isArray(iterable)) return slice.call(iterable); + if (_.isArguments(iterable)) return slice.call(iterable); + return _.values(iterable); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + return _.toArray(obj).length; + }; + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head`. The **guard** check allows it to work + // with `_.map`. + _.first = _.head = function(array, n, guard) { + return (n != null) && !guard ? slice.call(array, 0, n) : array[0]; + }; + + // Returns everything but the last entry of the array. Especcialy useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. The **guard** check allows it to work with + // `_.map`. + _.initial = function(array, n, guard) { + return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n)); + }; + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. The **guard** check allows it to work with `_.map`. + _.last = function(array, n, guard) { + if ((n != null) && !guard) { + return slice.call(array, Math.max(array.length - n, 0)); + } else { + return array[array.length - 1]; + } + }; + + // Returns everything but the first entry of the array. Aliased as `tail`. + // Especially useful on the arguments object. Passing an **index** will return + // the rest of the values in the array from that index onward. The **guard** + // check allows it to work with `_.map`. + _.rest = _.tail = function(array, index, guard) { + return slice.call(array, (index == null) || guard ? 1 : index); + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, function(value){ return !!value; }); + }; + + // Return a completely flattened version of an array. + _.flatten = function(array, shallow) { + return _.reduce(array, function(memo, value) { + if (_.isArray(value)) return memo.concat(shallow ? value : _.flatten(value)); + memo[memo.length] = value; + return memo; + }, []); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = function(array) { + return _.difference(array, slice.call(arguments, 1)); + }; + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted, iterator) { + var initial = iterator ? _.map(array, iterator) : array; + var result = []; + _.reduce(initial, function(memo, el, i) { + if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) { + memo[memo.length] = el; + result[result.length] = array[i]; + } + return memo; + }, []); + return result; + }; + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + _.union = function() { + return _.uniq(_.flatten(arguments, true)); + }; + + // Produce an array that contains every item shared between all the + // passed-in arrays. (Aliased as "intersect" for back-compat.) + _.intersection = _.intersect = function(array) { + var rest = slice.call(arguments, 1); + return _.filter(_.uniq(array), function(item) { + return _.every(rest, function(other) { + return _.indexOf(other, item) >= 0; + }); + }); + }; + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + _.difference = function(array) { + var rest = _.flatten(slice.call(arguments, 1)); + return _.filter(array, function(value){ return !_.include(rest, value); }); + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = function() { + var args = slice.call(arguments); + var length = _.max(_.pluck(args, 'length')); + var results = new Array(length); + for (var i = 0; i < length; i++) results[i] = _.pluck(args, "" + i); + return results; + }; + + // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**), + // we need this function. Return the position of the first occurrence of an + // item in an array, or -1 if the item is not included in the array. + // Delegates to **ECMAScript 5**'s native `indexOf` if available. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = function(array, item, isSorted) { + if (array == null) return -1; + var i, l; + if (isSorted) { + i = _.sortedIndex(array, item); + return array[i] === item ? i : -1; + } + if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item); + for (i = 0, l = array.length; i < l; i++) if (i in array && array[i] === item) return i; + return -1; + }; + + // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available. + _.lastIndexOf = function(array, item) { + if (array == null) return -1; + if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item); + var i = array.length; + while (i--) if (i in array && array[i] === item) return i; + return -1; + }; + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (arguments.length <= 1) { + stop = start || 0; + start = 0; + } + step = arguments[2] || 1; + + var len = Math.max(Math.ceil((stop - start) / step), 0); + var idx = 0; + var range = new Array(len); + + while(idx < len) { + range[idx++] = start; + start += step; + } + + return range; + }; + + // Function (ahem) Functions + // ------------------ + + // Reusable constructor function for prototype setting. + var ctor = function(){}; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Binding with arguments is also known as `curry`. + // Delegates to **ECMAScript 5**'s native `Function.bind` if available. + // We check for `func.bind` first, to fail fast when `func` is undefined. + _.bind = function bind(func, context) { + var bound, args; + if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); + if (!_.isFunction(func)) throw new TypeError; + args = slice.call(arguments, 2); + return bound = function() { + if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments))); + ctor.prototype = func.prototype; + var self = new ctor; + var result = func.apply(self, args.concat(slice.call(arguments))); + if (Object(result) === result) return result; + return self; + }; + }; + + // Bind all of an object's methods to that object. Useful for ensuring that + // all callbacks defined on an object belong to it. + _.bindAll = function(obj) { + var funcs = slice.call(arguments, 1); + if (funcs.length == 0) funcs = _.functions(obj); + each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); }); + return obj; + }; + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memo = {}; + hasher || (hasher = _.identity); + return function() { + var key = hasher.apply(this, arguments); + return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments)); + }; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = function(func, wait) { + var args = slice.call(arguments, 2); + return setTimeout(function(){ return func.apply(func, args); }, wait); + }; + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = function(func) { + return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1))); + }; + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. + _.throttle = function(func, wait) { + var context, args, timeout, throttling, more; + var whenDone = _.debounce(function(){ more = throttling = false; }, wait); + return function() { + context = this; args = arguments; + var later = function() { + timeout = null; + if (more) func.apply(context, args); + whenDone(); + }; + if (!timeout) timeout = setTimeout(later, wait); + if (throttling) { + more = true; + } else { + func.apply(context, args); + } + whenDone(); + throttling = true; + }; + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. + _.debounce = function(func, wait) { + var timeout; + return function() { + var context = this, args = arguments; + var later = function() { + timeout = null; + func.apply(context, args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = function(func) { + var ran = false, memo; + return function() { + if (ran) return memo; + ran = true; + return memo = func.apply(this, arguments); + }; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return function() { + var args = [func].concat(slice.call(arguments, 0)); + return wrapper.apply(this, args); + }; + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var funcs = arguments; + return function() { + var args = arguments; + for (var i = funcs.length - 1; i >= 0; i--) { + args = [funcs[i].apply(this, args)]; + } + return args[0]; + }; + }; + + // Returns a function that will only be executed after being called N times. + _.after = function(times, func) { + if (times <= 0) return func(); + return function() { + if (--times < 1) { return func.apply(this, arguments); } + }; + }; + + // Object Functions + // ---------------- + + // Retrieve the names of an object's properties. + // Delegates to **ECMAScript 5**'s native `Object.keys` + _.keys = nativeKeys || function(obj) { + if (obj !== Object(obj)) throw new TypeError('Invalid object'); + var keys = []; + for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key; + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + return _.map(obj, _.identity); + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods` + _.functions = _.methods = function(obj) { + var names = []; + for (var key in obj) { + if (_.isFunction(obj[key])) names.push(key); + } + return names.sort(); + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = function(obj) { + each(slice.call(arguments, 1), function(source) { + for (var prop in source) { + obj[prop] = source[prop]; + } + }); + return obj; + }; + + // Fill in a given object with default properties. + _.defaults = function(obj) { + each(slice.call(arguments, 1), function(source) { + for (var prop in source) { + if (obj[prop] == null) obj[prop] = source[prop]; + } + }); + return obj; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + if (!_.isObject(obj)) return obj; + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Internal recursive comparison function. + function eq(a, b, stack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal. + if (a === b) return a !== 0 || 1 / a == 1 / b; + // A strict comparison is necessary because `null == undefined`. + if (a == null || b == null) return a === b; + // Unwrap any wrapped objects. + if (a._chain) a = a._wrapped; + if (b._chain) b = b._wrapped; + // Invoke a custom `isEqual` method if one is provided. + if (a.isEqual && _.isFunction(a.isEqual)) return a.isEqual(b); + if (b.isEqual && _.isFunction(b.isEqual)) return b.isEqual(a); + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className != toString.call(b)) return false; + switch (className) { + // Strings, numbers, dates, and booleans are compared by value. + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return a == String(b); + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for + // other numeric values. + return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b); + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a == +b; + // RegExps are compared by their source patterns and flags. + case '[object RegExp]': + return a.source == b.source && + a.global == b.global && + a.multiline == b.multiline && + a.ignoreCase == b.ignoreCase; + } + if (typeof a != 'object' || typeof b != 'object') return false; + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + var length = stack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (stack[length] == a) return true; + } + // Add the first object to the stack of traversed objects. + stack.push(a); + var size = 0, result = true; + // Recursively compare objects and arrays. + if (className == '[object Array]') { + // Compare array lengths to determine if a deep comparison is necessary. + size = a.length; + result = size == b.length; + if (result) { + // Deep compare the contents, ignoring non-numeric properties. + while (size--) { + // Ensure commutative equality for sparse arrays. + if (!(result = size in a == size in b && eq(a[size], b[size], stack))) break; + } + } + } else { + // Objects with different constructors are not equivalent. + if ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) return false; + // Deep compare objects. + for (var key in a) { + if (_.has(a, key)) { + // Count the expected number of properties. + size++; + // Deep compare each member. + if (!(result = _.has(b, key) && eq(a[key], b[key], stack))) break; + } + } + // Ensure that both objects contain the same number of properties. + if (result) { + for (key in b) { + if (_.has(b, key) && !(size--)) break; + } + result = !size; + } + } + // Remove the first object from the stack of traversed objects. + stack.pop(); + return result; + } + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + return eq(a, b, []); + }; + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + _.isEmpty = function(obj) { + if (_.isArray(obj) || _.isString(obj)) return obj.length === 0; + for (var key in obj) if (_.has(obj, key)) return false; + return true; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType == 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) == '[object Array]'; + }; + + // Is a given variable an object? + _.isObject = function(obj) { + return obj === Object(obj); + }; + + // Is a given variable an arguments object? + _.isArguments = function(obj) { + return toString.call(obj) == '[object Arguments]'; + }; + if (!_.isArguments(arguments)) { + _.isArguments = function(obj) { + return !!(obj && _.has(obj, 'callee')); + }; + } + + // Is a given value a function? + _.isFunction = function(obj) { + return toString.call(obj) == '[object Function]'; + }; + + // Is a given value a string? + _.isString = function(obj) { + return toString.call(obj) == '[object String]'; + }; + + // Is a given value a number? + _.isNumber = function(obj) { + return toString.call(obj) == '[object Number]'; + }; + + // Is the given value `NaN`? + _.isNaN = function(obj) { + // `NaN` is the only value for which `===` is not reflexive. + return obj !== obj; + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false || toString.call(obj) == '[object Boolean]'; + }; + + // Is a given value a date? + _.isDate = function(obj) { + return toString.call(obj) == '[object Date]'; + }; + + // Is the given value a regular expression? + _.isRegExp = function(obj) { + return toString.call(obj) == '[object RegExp]'; + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Has own property? + _.has = function(obj, key) { + return hasOwnProperty.call(obj, key); + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iterators. + _.identity = function(value) { + return value; + }; + + // Run a function **n** times. + _.times = function (n, iterator, context) { + for (var i = 0; i < n; i++) iterator.call(context, i); + }; + + // Escape a string for HTML interpolation. + _.escape = function(string) { + return (''+string).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''').replace(/\//g,'/'); + }; + + // Add your own custom functions to the Underscore object, ensuring that + // they're correctly added to the OOP wrapper as well. + _.mixin = function(obj) { + each(_.functions(obj), function(name){ + addToWrapper(name, _[name] = obj[name]); + }); + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = idCounter++; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate : /<%([\s\S]+?)%>/g, + interpolate : /<%=([\s\S]+?)%>/g, + escape : /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /.^/; + + // Within an interpolation, evaluation, or escaping, remove HTML escaping + // that had been previously added. + var unescape = function(code) { + return code.replace(/\\\\/g, '\\').replace(/\\'/g, "'"); + }; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + _.template = function(str, data) { + var c = _.templateSettings; + var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' + + 'with(obj||{}){__p.push(\'' + + str.replace(/\\/g, '\\\\') + .replace(/'/g, "\\'") + .replace(c.escape || noMatch, function(match, code) { + return "',_.escape(" + unescape(code) + "),'"; + }) + .replace(c.interpolate || noMatch, function(match, code) { + return "'," + unescape(code) + ",'"; + }) + .replace(c.evaluate || noMatch, function(match, code) { + return "');" + unescape(code).replace(/[\r\n\t]/g, ' ') + ";__p.push('"; + }) + .replace(/\r/g, '\\r') + .replace(/\n/g, '\\n') + .replace(/\t/g, '\\t') + + "');}return __p.join('');"; + var func = new Function('obj', '_', tmpl); + if (data) return func(data, _); + return function(data) { + return func.call(this, data, _); + }; + }; + + // Add a "chain" function, which will delegate to the wrapper. + _.chain = function(obj) { + return _(obj).chain(); + }; + + // The OOP Wrapper + // --------------- + + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + var wrapper = function(obj) { this._wrapped = obj; }; + + // Expose `wrapper.prototype` as `_.prototype` + _.prototype = wrapper.prototype; + + // Helper function to continue chaining intermediate results. + var result = function(obj, chain) { + return chain ? _(obj).chain() : obj; + }; + + // A method to easily add functions to the OOP wrapper. + var addToWrapper = function(name, func) { + wrapper.prototype[name] = function() { + var args = slice.call(arguments); + unshift.call(args, this._wrapped); + return result(func.apply(_, args), this._chain); + }; + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + wrapper.prototype[name] = function() { + var wrapped = this._wrapped; + method.apply(wrapped, arguments); + var length = wrapped.length; + if ((name == 'shift' || name == 'splice') && length === 0) delete wrapped[0]; + return result(wrapped, this._chain); + }; + }); + + // Add all accessor Array functions to the wrapper. + each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + wrapper.prototype[name] = function() { + return result(method.apply(this._wrapped, arguments), this._chain); + }; + }); + + // Start chaining a wrapped Underscore object. + wrapper.prototype.chain = function() { + this._chain = true; + return this; + }; + + // Extracts the result from a wrapped and chained object. + wrapper.prototype.value = function() { + return this._wrapped; + }; + +}).call(this); diff --git a/Documentation/html/_static/underscore.js b/Documentation/html/_static/underscore.js new file mode 100644 index 0000000000000000000000000000000000000000..5b55f32beaca186f84cca115514f02cddbd1bbd5 --- /dev/null +++ b/Documentation/html/_static/underscore.js @@ -0,0 +1,31 @@ +// Underscore.js 1.3.1 +// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. +// Underscore is freely distributable under the MIT license. +// Portions of Underscore are inspired or borrowed from Prototype, +// Oliver Steele's Functional, and John Resig's Micro-Templating. +// For all details and documentation: +// http://documentcloud.github.com/underscore +(function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source== +c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c, +h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each= +b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===n)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===n)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(x&&a.map===x)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a== +null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect= +function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e= +e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck= +function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,computed:b})}); +return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){f==0?b[0]=a:(d=Math.floor(Math.random()*(f+1)),b[f]=b[d],b[d]=a)});return b};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a, +c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest= +b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},[]); +return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c, +d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(p&&a.indexOf===p)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(D&&a.lastIndexOf===D)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g}; +var F=function(){};b.bind=function(a,c){var d,e;if(a.bind===s&&s)return s.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));F.prototype=a.prototype;var b=new F,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a, +c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true: +a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}}; +b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments, +1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)}; +b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"}; +b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a), +function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+ +u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]= +function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain= +true;return this};m.prototype.value=function(){return this._wrapped}}).call(this); diff --git a/Documentation/html/_static/up-pressed.png b/Documentation/html/_static/up-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..acee3b68efbbfb9de3bfa73fce2531380f4bd820 Binary files /dev/null and b/Documentation/html/_static/up-pressed.png differ diff --git a/Documentation/html/_static/up.png b/Documentation/html/_static/up.png new file mode 100644 index 0000000000000000000000000000000000000000..2a940a7da7c14e6a36901e83306849ba7efad4d4 Binary files /dev/null and b/Documentation/html/_static/up.png differ diff --git a/Documentation/html/_static/websupport.js b/Documentation/html/_static/websupport.js new file mode 100644 index 0000000000000000000000000000000000000000..3b4999ebf2ee4d35d8bbe05dc6636c3f64b2dfa8 --- /dev/null +++ b/Documentation/html/_static/websupport.js @@ -0,0 +1,808 @@ +/* + * websupport.js + * ~~~~~~~~~~~~~ + * + * sphinx.websupport utilities for all documentation. + * + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +(function($) { + $.fn.autogrow = function() { + return this.each(function() { + var textarea = this; + + $.fn.autogrow.resize(textarea); + + $(textarea) + .focus(function() { + textarea.interval = setInterval(function() { + $.fn.autogrow.resize(textarea); + }, 500); + }) + .blur(function() { + clearInterval(textarea.interval); + }); + }); + }; + + $.fn.autogrow.resize = function(textarea) { + var lineHeight = parseInt($(textarea).css('line-height'), 10); + var lines = textarea.value.split('\n'); + var columns = textarea.cols; + var lineCount = 0; + $.each(lines, function() { + lineCount += Math.ceil(this.length / columns) || 1; + }); + var height = lineHeight * (lineCount + 1); + $(textarea).css('height', height); + }; +})(jQuery); + +(function($) { + var comp, by; + + function init() { + initEvents(); + initComparator(); + } + + function initEvents() { + $(document).on("click", 'a.comment-close', function(event) { + event.preventDefault(); + hide($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.vote', function(event) { + event.preventDefault(); + handleVote($(this)); + }); + $(document).on("click", 'a.reply', function(event) { + event.preventDefault(); + openReply($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.close-reply', function(event) { + event.preventDefault(); + closeReply($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.sort-option', function(event) { + event.preventDefault(); + handleReSort($(this)); + }); + $(document).on("click", 'a.show-proposal', function(event) { + event.preventDefault(); + showProposal($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.hide-proposal', function(event) { + event.preventDefault(); + hideProposal($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.show-propose-change', function(event) { + event.preventDefault(); + showProposeChange($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.hide-propose-change', function(event) { + event.preventDefault(); + hideProposeChange($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.accept-comment', function(event) { + event.preventDefault(); + acceptComment($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.delete-comment', function(event) { + event.preventDefault(); + deleteComment($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.comment-markup', function(event) { + event.preventDefault(); + toggleCommentMarkupBox($(this).attr('id').substring(2)); + }); + } + + /** + * Set comp, which is a comparator function used for sorting and + * inserting comments into the list. + */ + function setComparator() { + // If the first three letters are "asc", sort in ascending order + // and remove the prefix. + if (by.substring(0,3) == 'asc') { + var i = by.substring(3); + comp = function(a, b) { return a[i] - b[i]; }; + } else { + // Otherwise sort in descending order. + comp = function(a, b) { return b[by] - a[by]; }; + } + + // Reset link styles and format the selected sort option. + $('a.sel').attr('href', '#').removeClass('sel'); + $('a.by' + by).removeAttr('href').addClass('sel'); + } + + /** + * Create a comp function. If the user has preferences stored in + * the sortBy cookie, use those, otherwise use the default. + */ + function initComparator() { + by = 'rating'; // Default to sort by rating. + // If the sortBy cookie is set, use that instead. + if (document.cookie.length > 0) { + var start = document.cookie.indexOf('sortBy='); + if (start != -1) { + start = start + 7; + var end = document.cookie.indexOf(";", start); + if (end == -1) { + end = document.cookie.length; + by = unescape(document.cookie.substring(start, end)); + } + } + } + setComparator(); + } + + /** + * Show a comment div. + */ + function show(id) { + $('#ao' + id).hide(); + $('#ah' + id).show(); + var context = $.extend({id: id}, opts); + var popup = $(renderTemplate(popupTemplate, context)).hide(); + popup.find('textarea[name="proposal"]').hide(); + popup.find('a.by' + by).addClass('sel'); + var form = popup.find('#cf' + id); + form.submit(function(event) { + event.preventDefault(); + addComment(form); + }); + $('#s' + id).after(popup); + popup.slideDown('fast', function() { + getComments(id); + }); + } + + /** + * Hide a comment div. + */ + function hide(id) { + $('#ah' + id).hide(); + $('#ao' + id).show(); + var div = $('#sc' + id); + div.slideUp('fast', function() { + div.remove(); + }); + } + + /** + * Perform an ajax request to get comments for a node + * and insert the comments into the comments tree. + */ + function getComments(id) { + $.ajax({ + type: 'GET', + url: opts.getCommentsURL, + data: {node: id}, + success: function(data, textStatus, request) { + var ul = $('#cl' + id); + var speed = 100; + $('#cf' + id) + .find('textarea[name="proposal"]') + .data('source', data.source); + + if (data.comments.length === 0) { + ul.html('<li>No comments yet.</li>'); + ul.data('empty', true); + } else { + // If there are comments, sort them and put them in the list. + var comments = sortComments(data.comments); + speed = data.comments.length * 100; + appendComments(comments, ul); + ul.data('empty', false); + } + $('#cn' + id).slideUp(speed + 200); + ul.slideDown(speed); + }, + error: function(request, textStatus, error) { + showError('Oops, there was a problem retrieving the comments.'); + }, + dataType: 'json' + }); + } + + /** + * Add a comment via ajax and insert the comment into the comment tree. + */ + function addComment(form) { + var node_id = form.find('input[name="node"]').val(); + var parent_id = form.find('input[name="parent"]').val(); + var text = form.find('textarea[name="comment"]').val(); + var proposal = form.find('textarea[name="proposal"]').val(); + + if (text == '') { + showError('Please enter a comment.'); + return; + } + + // Disable the form that is being submitted. + form.find('textarea,input').attr('disabled', 'disabled'); + + // Send the comment to the server. + $.ajax({ + type: "POST", + url: opts.addCommentURL, + dataType: 'json', + data: { + node: node_id, + parent: parent_id, + text: text, + proposal: proposal + }, + success: function(data, textStatus, error) { + // Reset the form. + if (node_id) { + hideProposeChange(node_id); + } + form.find('textarea') + .val('') + .add(form.find('input')) + .removeAttr('disabled'); + var ul = $('#cl' + (node_id || parent_id)); + if (ul.data('empty')) { + $(ul).empty(); + ul.data('empty', false); + } + insertComment(data.comment); + var ao = $('#ao' + node_id); + ao.find('img').attr({'src': opts.commentBrightImage}); + if (node_id) { + // if this was a "root" comment, remove the commenting box + // (the user can get it back by reopening the comment popup) + $('#ca' + node_id).slideUp(); + } + }, + error: function(request, textStatus, error) { + form.find('textarea,input').removeAttr('disabled'); + showError('Oops, there was a problem adding the comment.'); + } + }); + } + + /** + * Recursively append comments to the main comment list and children + * lists, creating the comment tree. + */ + function appendComments(comments, ul) { + $.each(comments, function() { + var div = createCommentDiv(this); + ul.append($(document.createElement('li')).html(div)); + appendComments(this.children, div.find('ul.comment-children')); + // To avoid stagnating data, don't store the comments children in data. + this.children = null; + div.data('comment', this); + }); + } + + /** + * After adding a new comment, it must be inserted in the correct + * location in the comment tree. + */ + function insertComment(comment) { + var div = createCommentDiv(comment); + + // To avoid stagnating data, don't store the comments children in data. + comment.children = null; + div.data('comment', comment); + + var ul = $('#cl' + (comment.node || comment.parent)); + var siblings = getChildren(ul); + + var li = $(document.createElement('li')); + li.hide(); + + // Determine where in the parents children list to insert this comment. + for(var i=0; i < siblings.length; i++) { + if (comp(comment, siblings[i]) <= 0) { + $('#cd' + siblings[i].id) + .parent() + .before(li.html(div)); + li.slideDown('fast'); + return; + } + } + + // If we get here, this comment rates lower than all the others, + // or it is the only comment in the list. + ul.append(li.html(div)); + li.slideDown('fast'); + } + + function acceptComment(id) { + $.ajax({ + type: 'POST', + url: opts.acceptCommentURL, + data: {id: id}, + success: function(data, textStatus, request) { + $('#cm' + id).fadeOut('fast'); + $('#cd' + id).removeClass('moderate'); + }, + error: function(request, textStatus, error) { + showError('Oops, there was a problem accepting the comment.'); + } + }); + } + + function deleteComment(id) { + $.ajax({ + type: 'POST', + url: opts.deleteCommentURL, + data: {id: id}, + success: function(data, textStatus, request) { + var div = $('#cd' + id); + if (data == 'delete') { + // Moderator mode: remove the comment and all children immediately + div.slideUp('fast', function() { + div.remove(); + }); + return; + } + // User mode: only mark the comment as deleted + div + .find('span.user-id:first') + .text('[deleted]').end() + .find('div.comment-text:first') + .text('[deleted]').end() + .find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id + + ', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id) + .remove(); + var comment = div.data('comment'); + comment.username = '[deleted]'; + comment.text = '[deleted]'; + div.data('comment', comment); + }, + error: function(request, textStatus, error) { + showError('Oops, there was a problem deleting the comment.'); + } + }); + } + + function showProposal(id) { + $('#sp' + id).hide(); + $('#hp' + id).show(); + $('#pr' + id).slideDown('fast'); + } + + function hideProposal(id) { + $('#hp' + id).hide(); + $('#sp' + id).show(); + $('#pr' + id).slideUp('fast'); + } + + function showProposeChange(id) { + $('#pc' + id).hide(); + $('#hc' + id).show(); + var textarea = $('#pt' + id); + textarea.val(textarea.data('source')); + $.fn.autogrow.resize(textarea[0]); + textarea.slideDown('fast'); + } + + function hideProposeChange(id) { + $('#hc' + id).hide(); + $('#pc' + id).show(); + var textarea = $('#pt' + id); + textarea.val('').removeAttr('disabled'); + textarea.slideUp('fast'); + } + + function toggleCommentMarkupBox(id) { + $('#mb' + id).toggle(); + } + + /** Handle when the user clicks on a sort by link. */ + function handleReSort(link) { + var classes = link.attr('class').split(/\s+/); + for (var i=0; i<classes.length; i++) { + if (classes[i] != 'sort-option') { + by = classes[i].substring(2); + } + } + setComparator(); + // Save/update the sortBy cookie. + var expiration = new Date(); + expiration.setDate(expiration.getDate() + 365); + document.cookie= 'sortBy=' + escape(by) + + ';expires=' + expiration.toUTCString(); + $('ul.comment-ul').each(function(index, ul) { + var comments = getChildren($(ul), true); + comments = sortComments(comments); + appendComments(comments, $(ul).empty()); + }); + } + + /** + * Function to process a vote when a user clicks an arrow. + */ + function handleVote(link) { + if (!opts.voting) { + showError("You'll need to login to vote."); + return; + } + + var id = link.attr('id'); + if (!id) { + // Didn't click on one of the voting arrows. + return; + } + // If it is an unvote, the new vote value is 0, + // Otherwise it's 1 for an upvote, or -1 for a downvote. + var value = 0; + if (id.charAt(1) != 'u') { + value = id.charAt(0) == 'u' ? 1 : -1; + } + // The data to be sent to the server. + var d = { + comment_id: id.substring(2), + value: value + }; + + // Swap the vote and unvote links. + link.hide(); + $('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id) + .show(); + + // The div the comment is displayed in. + var div = $('div#cd' + d.comment_id); + var data = div.data('comment'); + + // If this is not an unvote, and the other vote arrow has + // already been pressed, unpress it. + if ((d.value !== 0) && (data.vote === d.value * -1)) { + $('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide(); + $('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show(); + } + + // Update the comments rating in the local data. + data.rating += (data.vote === 0) ? d.value : (d.value - data.vote); + data.vote = d.value; + div.data('comment', data); + + // Change the rating text. + div.find('.rating:first') + .text(data.rating + ' point' + (data.rating == 1 ? '' : 's')); + + // Send the vote information to the server. + $.ajax({ + type: "POST", + url: opts.processVoteURL, + data: d, + error: function(request, textStatus, error) { + showError('Oops, there was a problem casting that vote.'); + } + }); + } + + /** + * Open a reply form used to reply to an existing comment. + */ + function openReply(id) { + // Swap out the reply link for the hide link + $('#rl' + id).hide(); + $('#cr' + id).show(); + + // Add the reply li to the children ul. + var div = $(renderTemplate(replyTemplate, {id: id})).hide(); + $('#cl' + id) + .prepend(div) + // Setup the submit handler for the reply form. + .find('#rf' + id) + .submit(function(event) { + event.preventDefault(); + addComment($('#rf' + id)); + closeReply(id); + }) + .find('input[type=button]') + .click(function() { + closeReply(id); + }); + div.slideDown('fast', function() { + $('#rf' + id).find('textarea').focus(); + }); + } + + /** + * Close the reply form opened with openReply. + */ + function closeReply(id) { + // Remove the reply div from the DOM. + $('#rd' + id).slideUp('fast', function() { + $(this).remove(); + }); + + // Swap out the hide link for the reply link + $('#cr' + id).hide(); + $('#rl' + id).show(); + } + + /** + * Recursively sort a tree of comments using the comp comparator. + */ + function sortComments(comments) { + comments.sort(comp); + $.each(comments, function() { + this.children = sortComments(this.children); + }); + return comments; + } + + /** + * Get the children comments from a ul. If recursive is true, + * recursively include childrens' children. + */ + function getChildren(ul, recursive) { + var children = []; + ul.children().children("[id^='cd']") + .each(function() { + var comment = $(this).data('comment'); + if (recursive) + comment.children = getChildren($(this).find('#cl' + comment.id), true); + children.push(comment); + }); + return children; + } + + /** Create a div to display a comment in. */ + function createCommentDiv(comment) { + if (!comment.displayed && !opts.moderator) { + return $('<div class="moderate">Thank you! Your comment will show up ' + + 'once it is has been approved by a moderator.</div>'); + } + // Prettify the comment rating. + comment.pretty_rating = comment.rating + ' point' + + (comment.rating == 1 ? '' : 's'); + // Make a class (for displaying not yet moderated comments differently) + comment.css_class = comment.displayed ? '' : ' moderate'; + // Create a div for this comment. + var context = $.extend({}, opts, comment); + var div = $(renderTemplate(commentTemplate, context)); + + // If the user has voted on this comment, highlight the correct arrow. + if (comment.vote) { + var direction = (comment.vote == 1) ? 'u' : 'd'; + div.find('#' + direction + 'v' + comment.id).hide(); + div.find('#' + direction + 'u' + comment.id).show(); + } + + if (opts.moderator || comment.text != '[deleted]') { + div.find('a.reply').show(); + if (comment.proposal_diff) + div.find('#sp' + comment.id).show(); + if (opts.moderator && !comment.displayed) + div.find('#cm' + comment.id).show(); + if (opts.moderator || (opts.username == comment.username)) + div.find('#dc' + comment.id).show(); + } + return div; + } + + /** + * A simple template renderer. Placeholders such as <%id%> are replaced + * by context['id'] with items being escaped. Placeholders such as <#id#> + * are not escaped. + */ + function renderTemplate(template, context) { + var esc = $(document.createElement('div')); + + function handle(ph, escape) { + var cur = context; + $.each(ph.split('.'), function() { + cur = cur[this]; + }); + return escape ? esc.text(cur || "").html() : cur; + } + + return template.replace(/<([%#])([\w\.]*)\1>/g, function() { + return handle(arguments[2], arguments[1] == '%' ? true : false); + }); + } + + /** Flash an error message briefly. */ + function showError(message) { + $(document.createElement('div')).attr({'class': 'popup-error'}) + .append($(document.createElement('div')) + .attr({'class': 'error-message'}).text(message)) + .appendTo('body') + .fadeIn("slow") + .delay(2000) + .fadeOut("slow"); + } + + /** Add a link the user uses to open the comments popup. */ + $.fn.comment = function() { + return this.each(function() { + var id = $(this).attr('id').substring(1); + var count = COMMENT_METADATA[id]; + var title = count + ' comment' + (count == 1 ? '' : 's'); + var image = count > 0 ? opts.commentBrightImage : opts.commentImage; + var addcls = count == 0 ? ' nocomment' : ''; + $(this) + .append( + $(document.createElement('a')).attr({ + href: '#', + 'class': 'sphinx-comment-open' + addcls, + id: 'ao' + id + }) + .append($(document.createElement('img')).attr({ + src: image, + alt: 'comment', + title: title + })) + .click(function(event) { + event.preventDefault(); + show($(this).attr('id').substring(2)); + }) + ) + .append( + $(document.createElement('a')).attr({ + href: '#', + 'class': 'sphinx-comment-close hidden', + id: 'ah' + id + }) + .append($(document.createElement('img')).attr({ + src: opts.closeCommentImage, + alt: 'close', + title: 'close' + })) + .click(function(event) { + event.preventDefault(); + hide($(this).attr('id').substring(2)); + }) + ); + }); + }; + + var opts = { + processVoteURL: '/_process_vote', + addCommentURL: '/_add_comment', + getCommentsURL: '/_get_comments', + acceptCommentURL: '/_accept_comment', + deleteCommentURL: '/_delete_comment', + commentImage: '/static/_static/comment.png', + closeCommentImage: '/static/_static/comment-close.png', + loadingImage: '/static/_static/ajax-loader.gif', + commentBrightImage: '/static/_static/comment-bright.png', + upArrow: '/static/_static/up.png', + downArrow: '/static/_static/down.png', + upArrowPressed: '/static/_static/up-pressed.png', + downArrowPressed: '/static/_static/down-pressed.png', + voting: false, + moderator: false + }; + + if (typeof COMMENT_OPTIONS != "undefined") { + opts = jQuery.extend(opts, COMMENT_OPTIONS); + } + + var popupTemplate = '\ + <div class="sphinx-comments" id="sc<%id%>">\ + <p class="sort-options">\ + Sort by:\ + <a href="#" class="sort-option byrating">best rated</a>\ + <a href="#" class="sort-option byascage">newest</a>\ + <a href="#" class="sort-option byage">oldest</a>\ + </p>\ + <div class="comment-header">Comments</div>\ + <div class="comment-loading" id="cn<%id%>">\ + loading comments... <img src="<%loadingImage%>" alt="" /></div>\ + <ul id="cl<%id%>" class="comment-ul"></ul>\ + <div id="ca<%id%>">\ + <p class="add-a-comment">Add a comment\ + (<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\ + <div class="comment-markup-box" id="mb<%id%>">\ + reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \ + <code>``code``</code>, \ + code blocks: <code>::</code> and an indented block after blank line</div>\ + <form method="post" id="cf<%id%>" class="comment-form" action="">\ + <textarea name="comment" cols="80"></textarea>\ + <p class="propose-button">\ + <a href="#" id="pc<%id%>" class="show-propose-change">\ + Propose a change ▹\ + </a>\ + <a href="#" id="hc<%id%>" class="hide-propose-change">\ + Propose a change ▿\ + </a>\ + </p>\ + <textarea name="proposal" id="pt<%id%>" cols="80"\ + spellcheck="false"></textarea>\ + <input type="submit" value="Add comment" />\ + <input type="hidden" name="node" value="<%id%>" />\ + <input type="hidden" name="parent" value="" />\ + </form>\ + </div>\ + </div>'; + + var commentTemplate = '\ + <div id="cd<%id%>" class="sphinx-comment<%css_class%>">\ + <div class="vote">\ + <div class="arrow">\ + <a href="#" id="uv<%id%>" class="vote" title="vote up">\ + <img src="<%upArrow%>" />\ + </a>\ + <a href="#" id="uu<%id%>" class="un vote" title="vote up">\ + <img src="<%upArrowPressed%>" />\ + </a>\ + </div>\ + <div class="arrow">\ + <a href="#" id="dv<%id%>" class="vote" title="vote down">\ + <img src="<%downArrow%>" id="da<%id%>" />\ + </a>\ + <a href="#" id="du<%id%>" class="un vote" title="vote down">\ + <img src="<%downArrowPressed%>" />\ + </a>\ + </div>\ + </div>\ + <div class="comment-content">\ + <p class="tagline comment">\ + <span class="user-id"><%username%></span>\ + <span class="rating"><%pretty_rating%></span>\ + <span class="delta"><%time.delta%></span>\ + </p>\ + <div class="comment-text comment"><#text#></div>\ + <p class="comment-opts comment">\ + <a href="#" class="reply hidden" id="rl<%id%>">reply ▹</a>\ + <a href="#" class="close-reply" id="cr<%id%>">reply ▿</a>\ + <a href="#" id="sp<%id%>" class="show-proposal">proposal ▹</a>\ + <a href="#" id="hp<%id%>" class="hide-proposal">proposal ▿</a>\ + <a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\ + <span id="cm<%id%>" class="moderation hidden">\ + <a href="#" id="ac<%id%>" class="accept-comment">accept</a>\ + </span>\ + </p>\ + <pre class="proposal" id="pr<%id%>">\ +<#proposal_diff#>\ + </pre>\ + <ul class="comment-children" id="cl<%id%>"></ul>\ + </div>\ + <div class="clearleft"></div>\ + </div>\ + </div>'; + + var replyTemplate = '\ + <li>\ + <div class="reply-div" id="rd<%id%>">\ + <form id="rf<%id%>">\ + <textarea name="comment" cols="80"></textarea>\ + <input type="submit" value="Add reply" />\ + <input type="button" value="Cancel" />\ + <input type="hidden" name="parent" value="<%id%>" />\ + <input type="hidden" name="node" value="" />\ + </form>\ + </div>\ + </li>'; + + $(document).ready(function() { + init(); + }); +})(jQuery); + +$(document).ready(function() { + // add comment anchors for all paragraphs that are commentable + $('.sphinx-has-comment').comment(); + + // highlight search words in search results + $("div.context").each(function() { + var params = $.getQueryParameters(); + var terms = (params.q) ? params.q[0].split(/\s+/) : []; + var result = $(this); + $.each(terms, function() { + result.highlightText(this.toLowerCase(), 'highlighted'); + }); + }); + + // directly open comment window if requested + var anchor = document.location.hash; + if (anchor.substring(0, 9) == '#comment-') { + $('#ao' + anchor.substring(9)).click(); + document.location.hash = '#s' + anchor.substring(9); + } +}); diff --git a/Documentation/html/authors.html b/Documentation/html/authors.html new file mode 100644 index 0000000000000000000000000000000000000000..fbd0d8640aaf3c70ddfc18861a374ab2ffd7efd5 --- /dev/null +++ b/Documentation/html/authors.html @@ -0,0 +1,237 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Developer Team — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/css/custom.css" type="text/css" /> + <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="prev" title="FAQ - Frequently asked questions" href="Support/faq.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1 current"><a class="current reference internal" href="#">Developer Team</a><ul class="simple"> +</ul> +</li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html">Docs</a> »</li> + + <li>Developer Team</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="_sources/authors.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="developer-team"> +<h1>Developer Team<a class="headerlink" href="#developer-team" title="Permalink to this headline">¶</a></h1> +<div class="line-block"> +<div class="line">Anne Philipp</div> +<div class="line">Department of Meteorology and Geophysics /</div> +<div class="line">Aerosol Physics and Environmental physics</div> +<div class="line">University of Vienna</div> +<div class="line">Althanstraße 14 / UZA II</div> +<div class="line">1090 Vienna, Austria</div> +<div class="line">mail: anne.philipp [at] univie.ac.at</div> +</div> +<div class="line-block"> +<div class="line">Leopold Haimberger</div> +<div class="line">Department of Meteorology and Geophysics</div> +<div class="line">University of Vienna</div> +<div class="line">Althanstraße 14 / UZA II</div> +<div class="line">1090 Vienna, Austria</div> +<div class="line">mail: leopold.haimberger [at] univie.ac.at</div> +</div> +<div class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + + <a href="Support/faq.html" class="btn btn-neutral float-left" title="FAQ - Frequently asked questions" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/changelog.html b/Documentation/html/changelog.html new file mode 100644 index 0000000000000000000000000000000000000000..58099ffd2b0838a0707b554918cfae57ba2bb605 --- /dev/null +++ b/Documentation/html/changelog.html @@ -0,0 +1,339 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Changelog — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/css/custom.css" type="text/css" /> + <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="Support" href="support.html" /> + <link rel="prev" title="Update Documentation" href="Developers/gen_docu.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="documentation.html">Documentation</a></li> +<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">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> +</ul> +</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> +</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> +</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> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="#release-v0-1-v6-0">Release v0.1 - v6.0</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html">Docs</a> »</li> + + <li>Changelog</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="_sources/changelog.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="changelog"> +<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"> +<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> +</ul> +</div></blockquote> +</div> +<div class="section" id="changes"> +<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> +</ul> +</div></blockquote> +</div> +</div> +<div class="section" id="release-v7-0-4"> +<span id="ref-v704"></span><h2>Release v7.0.4<a class="headerlink" href="#release-v7-0-4" title="Permalink to this headline">¶</a></h2> +<div class="section" id="id1"> +<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> +</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> +<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. +(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> +</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> +<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> +</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> +<blockquote> +<div><ul class="simple"> +<li>Python based version</li> +</ul> +</div></blockquote> +</div> +<div class="section" id="id4"> +<h3>Changes<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3> +<blockquote> +<div><ul class="simple"> +<li>korn shell scripts were substituted by python scripts</li> +</ul> +</div></blockquote> +</div> +</div> +<div class="section" id="release-v0-1-v6-0"> +<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> +</ul> +</div></blockquote> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="support.html" class="btn btn-neutral float-right" title="Support" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="Developers/gen_docu.html" class="btn btn-neutral float-left" title="Update Documentation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/dev_guide.html b/Documentation/html/dev_guide.html new file mode 100644 index 0000000000000000000000000000000000000000..a42ba492c9d5bf05be80802cab725c92a4abc15c --- /dev/null +++ b/Documentation/html/dev_guide.html @@ -0,0 +1,226 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Developer Guide — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/css/custom.css" type="text/css" /> + <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="Update Documentation" href="Developers/gen_docu.html" /> + <link rel="prev" title="Metrics" href="Evaluation/metrics.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="documentation.html">Documentation</a></li> +<li class="toctree-l1"><a class="reference internal" href="evaluation.html">Evaluation</a></li> +<li class="toctree-l1 current"><a class="current reference internal" href="#">Developer Guide</a><ul> +<li class="toctree-l2"><a class="reference internal" href="Developers/gen_docu.html">Update Documentation</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a></li> +<li class="toctree-l1"><a class="reference internal" href="support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html">Docs</a> »</li> + + <li>Developer Guide</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="_sources/dev_guide.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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 class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="Developers/gen_docu.html" class="btn btn-neutral float-right" title="Update Documentation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="Evaluation/metrics.html" class="btn btn-neutral float-left" title="Metrics" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/documentation.html b/Documentation/html/documentation.html new file mode 100644 index 0000000000000000000000000000000000000000..e7361cba35b5837508f24484ed8812111acc1742 --- /dev/null +++ b/Documentation/html/documentation.html @@ -0,0 +1,249 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Documentation — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/css/custom.css" type="text/css" /> + <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="Overview" href="Documentation/overview.html" /> + <link rel="prev" title="Link Collection for Quick finder" href="Ecmwf/ec-links.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1 current"><a class="current reference internal" href="#">Documentation</a><ul> +<li class="toctree-l2"><a class="reference internal" href="Documentation/overview.html">Overview</a></li> +<li class="toctree-l2"><a class="reference internal" href="Documentation/input.html">Control & Input Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="Documentation/output.html">Output Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="Documentation/disagg.html">Disaggregation of Flux Data</a></li> +<li class="toctree-l2"><a class="reference internal" href="Documentation/vertco.html">Vertical Coordinate</a></li> +<li class="toctree-l2"><a class="reference internal" href="Documentation/api.html">Auto Generated Documentation</a></li> +</ul> +</li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html">Docs</a> »</li> + + <li>Documentation</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="_sources/documentation.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="documentation"> +<h1>Documentation<a class="headerlink" href="#documentation" title="Permalink to this headline">¶</a></h1> +<blockquote> +<div><p>Overview (Under construction)</p> +<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> +</ul> +</dd> +<dt>Auto Generated Documentation</dt> +<dd><ul class="first last simple"> +<li>Python</li> +<li>Fortran (Under construction)</li> +</ul> +</dd> +</dl> +</div></blockquote> +<div class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="Documentation/overview.html" class="btn btn-neutral float-right" title="Overview" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="Ecmwf/ec-links.html" class="btn btn-neutral float-left" title="Link Collection for Quick finder" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/ecmwf_data.html b/Documentation/html/ecmwf_data.html new file mode 100644 index 0000000000000000000000000000000000000000..81700eb026b18bc45caba2cd53f4d4ffdc7cf886 --- /dev/null +++ b/Documentation/html/ecmwf_data.html @@ -0,0 +1,245 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ECMWF Data — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/css/custom.css" type="text/css" /> + <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="Access Modes" href="Ecmwf/access.html" /> + <link rel="prev" title="Quick Start" href="quick_start.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="quick_start.html">Quick Start</a></li> +<li class="toctree-l1 current"><a class="current reference internal" href="#">ECMWF Data</a><ul> +<li class="toctree-l2"><a class="reference internal" href="Ecmwf/access.html">Access Modes</a></li> +<li class="toctree-l2"><a class="reference internal" href="Ecmwf/msdata.html">Available Datasets for Member State users</a></li> +<li class="toctree-l2"><a class="reference internal" href="Ecmwf/pubdata.html">Available Datasets for Public users</a></li> +<li class="toctree-l2"><a class="reference internal" href="Ecmwf/hintsecmwf.html">Hints to specify dataset retrieval</a></li> +<li class="toctree-l2"><a class="reference internal" href="Ecmwf/ec-links.html">Link Collection for Quick finder</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html">Docs</a> »</li> + + <li>ECMWF Data</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="_sources/ecmwf_data.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="ecmwf-data"> +<h1>ECMWF Data<a class="headerlink" href="#ecmwf-data" title="Permalink to this headline">¶</a></h1> +<p>The European Centre for Medium-Range Weather Forecasts (<a class="reference external" href="http://www.ecmwf.int">ECMWF</a>), based in Reading, UK, is an independent intergovernmental organisation supported by 34 states. It is both a research institute and a full time operational service. It produces global numerical weather predictions and some other data which is fully available to the national meteorological services in the <a class="reference external" href="https://www.ecmwf.int/en/about/who-we-are/member-states">Member States</a>, Co-operating States and the broader community. Especially, the published re-analysis datasets are made available to the public with some limits in specific datasets.</p> +<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> +<div class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="Ecmwf/access.html" class="btn btn-neutral float-right" title="Access Modes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="quick_start.html" class="btn btn-neutral float-left" title="Quick Start" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/evaluation.html b/Documentation/html/evaluation.html new file mode 100644 index 0000000000000000000000000000000000000000..7924c0b2c1087a772691f7afa9004031b9756c79 --- /dev/null +++ b/Documentation/html/evaluation.html @@ -0,0 +1,228 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Evaluation — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/css/custom.css" type="text/css" /> + <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="Static Code Analysis" href="Evaluation/staticcode.html" /> + <link rel="prev" title="Fortran’s Auto Generated Documentation" href="Documentation/Api/api_fortran.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="documentation.html">Documentation</a></li> +<li class="toctree-l1 current"><a class="current reference internal" href="#">Evaluation</a><ul> +<li class="toctree-l2"><a class="reference internal" href="Evaluation/staticcode.html">Static Code Analysis</a></li> +<li class="toctree-l2"><a class="reference internal" href="Evaluation/testcases.html">Testcases</a></li> +<li class="toctree-l2"><a class="reference internal" href="Evaluation/metrics.html">Metrics</a></li> +</ul> +</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></li> +<li class="toctree-l1"><a class="reference internal" href="support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html">Docs</a> »</li> + + <li>Evaluation</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="_sources/evaluation.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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 class="toctree-wrapper compound"> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="Evaluation/staticcode.html" class="btn btn-neutral float-right" title="Static Code Analysis" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="Documentation/Api/api_fortran.html" class="btn btn-neutral float-left" title="Fortran’s Auto Generated Documentation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/fontconfig/0251a5afa6ac727a1e32b7d4d4aa7cf0-le64.cache-3 b/Documentation/html/fontconfig/0251a5afa6ac727a1e32b7d4d4aa7cf0-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..aaf4c251654007dc50e2b6655c6c7e1969a54c92 Binary files /dev/null and b/Documentation/html/fontconfig/0251a5afa6ac727a1e32b7d4d4aa7cf0-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/0b1bcc92b4d25cc154d77dafe3bceaa0-le64.cache-3 b/Documentation/html/fontconfig/0b1bcc92b4d25cc154d77dafe3bceaa0-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..0e4ecb15bdc9e8ac4cd23b4815046c743ee4a416 Binary files /dev/null and b/Documentation/html/fontconfig/0b1bcc92b4d25cc154d77dafe3bceaa0-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/1248881498ac025e45c3042f6afe9284-le64.cache-3 b/Documentation/html/fontconfig/1248881498ac025e45c3042f6afe9284-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..85aa2ff1ca59709bbcc6dc9530796114d1aa85ff Binary files /dev/null and b/Documentation/html/fontconfig/1248881498ac025e45c3042f6afe9284-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/12b26b760a24f8b4feb03ad48a333a72-le64.cache-3 b/Documentation/html/fontconfig/12b26b760a24f8b4feb03ad48a333a72-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..d9b00b9de3f62b6367600ad8f828268088e1c6b7 Binary files /dev/null and b/Documentation/html/fontconfig/12b26b760a24f8b4feb03ad48a333a72-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/211368abcb0ff835c229ff05c9ec01dc-le64.cache-3 b/Documentation/html/fontconfig/211368abcb0ff835c229ff05c9ec01dc-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..77985f1dc4f6d8bbb17e8a5c930ad1c7e4d2e8b7 Binary files /dev/null and b/Documentation/html/fontconfig/211368abcb0ff835c229ff05c9ec01dc-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/2881ed3fd21ca306ddad6f9b0dd3189f-le64.cache-3 b/Documentation/html/fontconfig/2881ed3fd21ca306ddad6f9b0dd3189f-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..c6380951f702cfc0f5702076585bfc319667a7dd Binary files /dev/null and b/Documentation/html/fontconfig/2881ed3fd21ca306ddad6f9b0dd3189f-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/2e1514a9fdd499050989183bb65136db-le64.cache-3 b/Documentation/html/fontconfig/2e1514a9fdd499050989183bb65136db-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..b012578bfe941e2f0afca5ba5c6dcb4397522134 Binary files /dev/null and b/Documentation/html/fontconfig/2e1514a9fdd499050989183bb65136db-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/3830d5c3ddfd5cd38a049b759396e72e-le64.cache-3 b/Documentation/html/fontconfig/3830d5c3ddfd5cd38a049b759396e72e-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..933e3d8262d98adf4e431247f3694dafb1d3fc12 Binary files /dev/null and b/Documentation/html/fontconfig/3830d5c3ddfd5cd38a049b759396e72e-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/3c3fb04d32a5211b073874b125d29701-le64.cache-3 b/Documentation/html/fontconfig/3c3fb04d32a5211b073874b125d29701-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..6ee9d85cd95c55ebd6f1136739301b11cfc1c686 Binary files /dev/null and b/Documentation/html/fontconfig/3c3fb04d32a5211b073874b125d29701-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/3f821257dd33660ba7bbb45c32deb84c-le64.cache-3 b/Documentation/html/fontconfig/3f821257dd33660ba7bbb45c32deb84c-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..c092867b02dd2fc707cca4e425129a507b60b85f Binary files /dev/null and b/Documentation/html/fontconfig/3f821257dd33660ba7bbb45c32deb84c-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/46d51d90fe9d963f6f4186edb936a931-le64.cache-3 b/Documentation/html/fontconfig/46d51d90fe9d963f6f4186edb936a931-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..cdd5d28b4f1f358f1865cccfaaea5aaef32a06e3 Binary files /dev/null and b/Documentation/html/fontconfig/46d51d90fe9d963f6f4186edb936a931-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/47f48679023f44a4d1e44699a69464f6-le64.cache-3 b/Documentation/html/fontconfig/47f48679023f44a4d1e44699a69464f6-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..23910bda6693b0d61cbd5bf6d2f9bd192ff915e5 Binary files /dev/null and b/Documentation/html/fontconfig/47f48679023f44a4d1e44699a69464f6-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/5c755b2f27115486aa6359c84dd3cbda-le64.cache-3 b/Documentation/html/fontconfig/5c755b2f27115486aa6359c84dd3cbda-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..4a45bc86b6c7de32ebd495d6bf4866d6469cbe02 Binary files /dev/null and b/Documentation/html/fontconfig/5c755b2f27115486aa6359c84dd3cbda-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/6cfc7d49b27ba7d3eb71ab86e04def2c-le64.cache-3 b/Documentation/html/fontconfig/6cfc7d49b27ba7d3eb71ab86e04def2c-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..a69babba39cddbaf7cf2590639c9531d859b4fed Binary files /dev/null and b/Documentation/html/fontconfig/6cfc7d49b27ba7d3eb71ab86e04def2c-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/74717c444f6fd72454fa9c9c0ee01ca7-le64.cache-3 b/Documentation/html/fontconfig/74717c444f6fd72454fa9c9c0ee01ca7-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..2ca0e98a5f79761309997a7ad17be946a5819307 Binary files /dev/null and b/Documentation/html/fontconfig/74717c444f6fd72454fa9c9c0ee01ca7-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/81a173283b451552b599cfaafd6236bd-le64.cache-3 b/Documentation/html/fontconfig/81a173283b451552b599cfaafd6236bd-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..ee405e36806c3e0a7a8560f159c7651bce477061 Binary files /dev/null and b/Documentation/html/fontconfig/81a173283b451552b599cfaafd6236bd-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/830f035fa84a65ce80e050178dbb630d-le64.cache-3 b/Documentation/html/fontconfig/830f035fa84a65ce80e050178dbb630d-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..684cb4542f1ae531a8e011fb1aaffdd1b3540807 Binary files /dev/null and b/Documentation/html/fontconfig/830f035fa84a65ce80e050178dbb630d-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/860639f272b8b4b3094f9e399e41bccd-le64.cache-3 b/Documentation/html/fontconfig/860639f272b8b4b3094f9e399e41bccd-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..46cfc4b834437150b7d8b123cd772aa0aa631cc1 Binary files /dev/null and b/Documentation/html/fontconfig/860639f272b8b4b3094f9e399e41bccd-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/87f5e051180a7a75f16eb6fe7dbd3749-le64.cache-3 b/Documentation/html/fontconfig/87f5e051180a7a75f16eb6fe7dbd3749-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..b8ec464b7214fa16928f4b42456e834e7145ade6 Binary files /dev/null and b/Documentation/html/fontconfig/87f5e051180a7a75f16eb6fe7dbd3749-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/900402270e15d763a6e008bb2d4c7686-le64.cache-3 b/Documentation/html/fontconfig/900402270e15d763a6e008bb2d4c7686-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..8114d8a84a1c429eb9ad13bd8dea3575146b03b2 Binary files /dev/null and b/Documentation/html/fontconfig/900402270e15d763a6e008bb2d4c7686-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/928306c3ad40271d946e41014a49fc28-le64.cache-3 b/Documentation/html/fontconfig/928306c3ad40271d946e41014a49fc28-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..8b30a2e2300bbd55747f7d12e9a1da513fa93e57 Binary files /dev/null and b/Documentation/html/fontconfig/928306c3ad40271d946e41014a49fc28-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/991510d2da7f7b2bf8468002aae90060-le64.cache-3 b/Documentation/html/fontconfig/991510d2da7f7b2bf8468002aae90060-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..8d6f4fbcb8cef5eba9c96dc44cbdee5217627df6 Binary files /dev/null and b/Documentation/html/fontconfig/991510d2da7f7b2bf8468002aae90060-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/99a1ce9f8b6a0434aadb01d3779b0780-le64.cache-3 b/Documentation/html/fontconfig/99a1ce9f8b6a0434aadb01d3779b0780-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..db9e3b57a69e0433b8f154dd2cdadd68ac5ead09 Binary files /dev/null and b/Documentation/html/fontconfig/99a1ce9f8b6a0434aadb01d3779b0780-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/ac68f755438cc3dc5a526084839fc7ca-le64.cache-3 b/Documentation/html/fontconfig/ac68f755438cc3dc5a526084839fc7ca-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..00914570300bd418c085dbc072afc3042c7c9c8e Binary files /dev/null and b/Documentation/html/fontconfig/ac68f755438cc3dc5a526084839fc7ca-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/b4d0b56f766d89640448751fcd18ec1e-le64.cache-3 b/Documentation/html/fontconfig/b4d0b56f766d89640448751fcd18ec1e-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..0bf1c7891f7252da2bafc66846b27235f6a83745 Binary files /dev/null and b/Documentation/html/fontconfig/b4d0b56f766d89640448751fcd18ec1e-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/b67b32625a2bb51b023d3814a918f351-le64.cache-3 b/Documentation/html/fontconfig/b67b32625a2bb51b023d3814a918f351-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..c42a79db9a2331f4d15cbd7330528321afdedb10 Binary files /dev/null and b/Documentation/html/fontconfig/b67b32625a2bb51b023d3814a918f351-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/b79f3aaa7d385a141ab53ec885cc22a8-le64.cache-3 b/Documentation/html/fontconfig/b79f3aaa7d385a141ab53ec885cc22a8-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..937a198973aa2adbc4b8ec9ab5ef8acc8953fcd2 Binary files /dev/null and b/Documentation/html/fontconfig/b79f3aaa7d385a141ab53ec885cc22a8-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/b887eea8f1b96e1d899b44ed6681fc27-le64.cache-3 b/Documentation/html/fontconfig/b887eea8f1b96e1d899b44ed6681fc27-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..e5d387ab549f856f39f6165c3b15ba62628ddc0e Binary files /dev/null and b/Documentation/html/fontconfig/b887eea8f1b96e1d899b44ed6681fc27-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/b966c23d19cce9e9a98d55765cf2a0c7-le64.cache-3 b/Documentation/html/fontconfig/b966c23d19cce9e9a98d55765cf2a0c7-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..c0c5f90ab967b2eb08856ba916b5434b113f0649 Binary files /dev/null and b/Documentation/html/fontconfig/b966c23d19cce9e9a98d55765cf2a0c7-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/beeeeb3dfe132a8a0633a017c99ce0c0-le64.cache-3 b/Documentation/html/fontconfig/beeeeb3dfe132a8a0633a017c99ce0c0-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..be95f3738b6cfa75be7c12852e372bbcf6400b74 Binary files /dev/null and b/Documentation/html/fontconfig/beeeeb3dfe132a8a0633a017c99ce0c0-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/c46020d7221988a13df853d2b46304fc-le64.cache-3 b/Documentation/html/fontconfig/c46020d7221988a13df853d2b46304fc-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..0f77ac650fcf00fe6f9445e975fdeb5ef7491d85 Binary files /dev/null and b/Documentation/html/fontconfig/c46020d7221988a13df853d2b46304fc-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/d3379abda271c4acd2ad0c01f565d0b0-le64.cache-3 b/Documentation/html/fontconfig/d3379abda271c4acd2ad0c01f565d0b0-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..94ade77f4d0ed0d7945e118f2ccd165d063ddb3f Binary files /dev/null and b/Documentation/html/fontconfig/d3379abda271c4acd2ad0c01f565d0b0-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/db585f192c85c4760e6cb9f4ea0f6cc1-le64.cache-3 b/Documentation/html/fontconfig/db585f192c85c4760e6cb9f4ea0f6cc1-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..b564ee1318de5402ba2b674293545ed5380fff81 Binary files /dev/null and b/Documentation/html/fontconfig/db585f192c85c4760e6cb9f4ea0f6cc1-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/df893b4576ad6107f9397134092c4059-le64.cache-3 b/Documentation/html/fontconfig/df893b4576ad6107f9397134092c4059-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..358967249b8f0eaf22b1acce519aa2bfae2d5ed7 Binary files /dev/null and b/Documentation/html/fontconfig/df893b4576ad6107f9397134092c4059-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/e61abf8156cc476151baa07d67337cae-le64.cache-3 b/Documentation/html/fontconfig/e61abf8156cc476151baa07d67337cae-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..e7ebd13a98caa04ad50fb090fa86c5693c4b80d6 Binary files /dev/null and b/Documentation/html/fontconfig/e61abf8156cc476151baa07d67337cae-le64.cache-3 differ diff --git a/Documentation/html/fontconfig/f9d379b867d7c69c85310a4f24e5228f-le64.cache-3 b/Documentation/html/fontconfig/f9d379b867d7c69c85310a4f24e5228f-le64.cache-3 new file mode 100644 index 0000000000000000000000000000000000000000..2d6db98b43fca2e61cb1dd896b5ca34e71880263 Binary files /dev/null and b/Documentation/html/fontconfig/f9d379b867d7c69c85310a4f24e5228f-le64.cache-3 differ diff --git a/Documentation/html/genindex.html b/Documentation/html/genindex.html new file mode 100644 index 0000000000000000000000000000000000000000..f9cdf0f9c9c6a3b275bcb641c9ad444f8568b8ce --- /dev/null +++ b/Documentation/html/genindex.html @@ -0,0 +1,888 @@ + + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Index — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/css/custom.css" type="text/css" /> + <link rel="stylesheet" href="_static/css/theme_overrides.css" type="text/css" /> + <link rel="index" title="Index" href="#" /> + <link rel="search" title="Search" href="search.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html">Docs</a> »</li> + + <li>Index</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + +<h1 id="index">Index</h1> + +<div class="genindex-jumpbox"> + <a href="#A"><strong>A</strong></a> + | <a href="#B"><strong>B</strong></a> + | <a href="#C"><strong>C</strong></a> + | <a href="#D"><strong>D</strong></a> + | <a href="#E"><strong>E</strong></a> + | <a href="#F"><strong>F</strong></a> + | <a href="#G"><strong>G</strong></a> + | <a href="#I"><strong>I</strong></a> + | <a href="#L"><strong>L</strong></a> + | <a href="#M"><strong>M</strong></a> + | <a href="#N"><strong>N</strong></a> + | <a href="#O"><strong>O</strong></a> + | <a href="#P"><strong>P</strong></a> + | <a href="#R"><strong>R</strong></a> + | <a href="#S"><strong>S</strong></a> + | <a href="#T"><strong>T</strong></a> + | <a href="#U"><strong>U</strong></a> + | <a href="#W"><strong>W</strong></a> + +</div> +<h2 id="A">A</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.accmaxstep">accmaxstep (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.accmaxstep">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.acctime">acctime (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.acctime">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.acctype">acctype (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.acctype">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.accuracy">accuracy (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.accuracy">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.accuracy">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.addpar">addpar (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.addpar">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.area">area (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.area">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.area">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.assign_args_to_control">assign_args_to_control() (ControlFile.ControlFile method)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.assign_envs_to_control">assign_envs_to_control() (ControlFile.ControlFile method)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="B">B</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.basetime">basetime (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.basetime">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + </ul></td> +</tr></table> + +<h2 id="C">C</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.calc_extra_elda">calc_extra_elda() (EcFlexpart.EcFlexpart method)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.cds_api">cds_api (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_accmaxstep">check_accmaxstep() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_acctime">check_acctime() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_acctype">check_acctype() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_addpar">check_addpar() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_area">check_area() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_basetime">check_basetime() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.check_conditions">check_conditions() (ControlFile.ControlFile method)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_dates">check_dates() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#get_mars_data.check_dates_for_nonflux_fc_times">check_dates_for_nonflux_fc_times() (in module get_mars_data)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_grid">check_grid() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#install.check_install_conditions">check_install_conditions() (in module install)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_job_chunk">check_job_chunk() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_len_type_time_step">check_len_type_time_step() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_levels">check_levels() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_logicals_type">check_logicals_type() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_mail">check_mail() (in module checks)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#checks.check_maxstep">check_maxstep() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_number">check_number() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_pathes">check_pathes() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_ppid">check_ppid() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_public">check_public() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_purefc">check_purefc() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_queue">check_queue() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_request">check_request() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_step">check_step() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_time">check_time() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#checks.check_type">check_type() (in module checks)</a> +</li> + <li><a href="Documentation/Api/api_python.html#module-checks">checks (module)</a> +</li> + <li><a href="Documentation/Api/api_python.html#tools.clean_up">clean_up() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile">ControlFile (class in ControlFile)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.controlfile">controlfile (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#module-ControlFile">ControlFile (module)</a> +</li> + <li><a href="Documentation/Api/api_python.html#GribUtil.GribUtil.copy_dummy_msg">copy_dummy_msg() (GribUtil.GribUtil method)</a> +</li> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.create">create() (EcFlexpart.EcFlexpart method)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.cwc">cwc (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="D">D</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#disaggregation.dapoly">dapoly() (in module disaggregation)</a> +</li> + <li><a href="Documentation/Api/api_python.html#disaggregation.darain">darain() (in module disaggregation)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.data_retrieve">data_retrieve() (MarsRetrieval.MarsRetrieval method)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.dataset">dataset (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.dataset">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.dataset">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.date">date (MarsRetrieval.MarsRetrieval attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.date_chunk">date_chunk (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.dates">dates (EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.deacc_fluxes">deacc_fluxes() (EcFlexpart.EcFlexpart method)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.debug">debug (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#install.del_convert_build">del_convert_build() (in module install)</a> +</li> + <li><a href="Documentation/Api/api_python.html#UioFiles.UioFiles.delete_files">delete_files() (UioFiles.UioFiles method)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.destination">destination (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#module-disaggregation">disaggregation (module)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.display_info">display_info() (MarsRetrieval.MarsRetrieval method)</a> +</li> + <li><a href="Documentation/Api/api_python.html#get_mars_data.do_retrievement">do_retrievement() (in module get_mars_data)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.doubleelda">doubleelda (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.dpdeta">dpdeta (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.dtime">dtime (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.dtime">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + </ul></td> +</tr></table> + +<h2 id="E">E</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.ec_api">ec_api (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart">EcFlexpart (class in EcFlexpart)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#module-EcFlexpart">(module)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.ecfsdir">ecfsdir (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.ecgid">ecgid (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.ecstorage">ecstorage (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.ectrans">ectrans (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.ecuid">ecuid (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.end_date">end_date (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.eta">eta (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.etadiff">etadiff (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.etapar">etapar (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#tools.execute_subprocess">execute_subprocess() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.exedir">exedir (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.expver">expver (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.expver">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.expver">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + </ul></td> +</tr></table> + +<h2 id="F">F</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#UioFiles.UioFiles.files">files (UioFiles.UioFiles attribute)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.flexextractdir">flexextractdir (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.format">format (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="G">G</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.gateway">gateway (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.gauss">gauss (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.gaussian">gaussian (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.gaussian">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.gaussian">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#tools.generate_retrieval_period_boundary">generate_retrieval_period_boundary() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#tools.get_cmdline_args">get_cmdline_args() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#tools.get_dimensions">get_dimensions() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#tools.get_informations">get_informations() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#install.get_install_cmdline_args">get_install_cmdline_args() (in module install)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#GribUtil.GribUtil.get_keys">get_keys() (GribUtil.GribUtil method)</a> +</li> + <li><a href="Documentation/Api/api_python.html#tools.get_list_as_string">get_list_as_string() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#module-get_mars_data">get_mars_data (module)</a> +</li> + <li><a href="Documentation/Api/api_python.html#get_mars_data.get_mars_data">get_mars_data() (in module get_mars_data)</a> +</li> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.glevelist">glevelist (EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#GribUtil.GribUtil">GribUtil (class in GribUtil)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#module-GribUtil">(module)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.grid">grid (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.grid">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.grid">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + </ul></td> +</tr></table> + +<h2 id="I">I</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#disaggregation.IA3">IA3() (in module disaggregation)</a> +</li> + <li><a href="Documentation/Api/api_python.html#GribUtil.GribUtil.index">index() (GribUtil.GribUtil method)</a> +</li> + <li><a href="Documentation/Api/api_python.html#tools.init128">init128() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.inputdir">inputdir (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.inputdir">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#module-install">install (module)</a> +</li> + <li><a href="Documentation/Api/api_python.html#install.install_local">install_local() (in module install)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.install_target">install_target (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#install.install_via_gateway">install_via_gateway() (in module install)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.installdir">installdir (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="L">L</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.left">left (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.level">level (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.level">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.levelist">levelist (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.levelist">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.levelist">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.levtype">levtype (MarsRetrieval.MarsRetrieval attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.logicals">logicals (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.lower">lower (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="M">M</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.mailfail">mailfail (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.mailops">mailops (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#get_mars_data.main">main() (in module get_mars_data)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#install.main">(in module install)</a> +</li> + <li><a href="Documentation/Api/api_python.html#prepare_flexpart.main">(in module prepare_flexpart)</a> +</li> + <li><a href="Documentation/Api/api_python.html#submit.main">(in module submit)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#tools.make_dir">make_dir() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.makefile">makefile (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.marsclass">marsclass (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.marsclass">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.marsclass">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval">MarsRetrieval (class in MarsRetrieval)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#module-MarsRetrieval">(module)</a> +</li> + </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.maxstep">maxstep (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#install.mk_compilejob">mk_compilejob() (in module install)</a> +</li> + <li><a href="Documentation/Api/api_python.html#install.mk_convert_build">mk_convert_build() (in module install)</a> +</li> + <li><a href="Documentation/Api/api_python.html#get_mars_data.mk_dates">mk_dates() (in module get_mars_data)</a> +</li> + <li><a href="Documentation/Api/api_python.html#install.mk_env_vars">mk_env_vars() (in module install)</a> +</li> + <li><a href="Documentation/Api/api_python.html#install.mk_job_template">mk_job_template() (in module install)</a> +</li> + <li><a href="Documentation/Api/api_python.html#submit.mk_jobscript">mk_jobscript() (in module submit)</a> +</li> + <li><a href="Documentation/Api/api_python.html#get_mars_data.mk_server">mk_server() (in module get_mars_data)</a> +</li> + <li><a href="Documentation/Api/api_python.html#install.mk_tarball">mk_tarball() (in module install)</a> +</li> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.mreq_count">mreq_count (EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#tools.my_error">my_error() (in module tools)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="N">N</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#tools.none_or_int">none_or_int() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#tools.none_or_str">none_or_str() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#tools.normal_exit">normal_exit() (in module tools)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.number">number (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.number">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.number">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + </ul></td> +</tr></table> + +<h2 id="O">O</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.omega">omega (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.omegadiff">omegadiff (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.oper">oper (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.outputdir">outputdir (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.outputfilelist">outputfilelist (EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="P">P</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.param">param (MarsRetrieval.MarsRetrieval attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.params">params (EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#UioFiles.UioFiles.path">path (UioFiles.UioFiles attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#UioFiles.UioFiles.pattern">pattern (UioFiles.UioFiles attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.prefix">prefix (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#module-prepare_flexpart">prepare_flexpart (module)</a> +</li> + <li><a href="Documentation/Api/api_python.html#prepare_flexpart.prepare_flexpart">prepare_flexpart() (in module prepare_flexpart)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.print_infodata_csv">print_infodata_csv() (MarsRetrieval.MarsRetrieval method)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.process_output">process_output() (EcFlexpart.EcFlexpart method)</a> +</li> + <li><a href="Documentation/Api/api_python.html#tools.product">product() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.public">public (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.public">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.public">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.purefc">purefc (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.purefc">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#tools.put_file_to_ecserver">put_file_to_ecserver() (in module tools)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="R">R</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#tools.read_ecenv">read_ecenv() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#get_mars_data.remove_old">remove_old() (in module get_mars_data)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.repres">repres (MarsRetrieval.MarsRetrieval attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.request">request (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.resol">resol (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.resol">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.resol">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.retrieve">retrieve() (EcFlexpart.EcFlexpart method)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.right">right (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.rrint">rrint (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="S">S</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#tools.send_mail">send_mail() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.server">server (EcFlexpart.EcFlexpart attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.server">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#GribUtil.GribUtil.set_keys">set_keys() (GribUtil.GribUtil method)</a> +</li> + <li><a href="Documentation/Api/api_python.html#tools.setup_controldata">setup_controldata() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#tools.silent_remove">silent_remove() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.smooth">smooth (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.start_date">start_date (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.step">step (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.step">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.stream">stream (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.stream">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.stream">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#module-submit">submit (module)</a> +</li> + <li><a href="Documentation/Api/api_python.html#submit.submit">submit() (in module submit)</a> +</li> + <li><a href="Documentation/Api/api_python.html#tools.submit_job_to_ecserver">submit_job_to_ecserver() (in module tools)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="T">T</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.target">target (MarsRetrieval.MarsRetrieval attribute)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.time">time (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.time">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.to_list">to_list() (ControlFile.ControlFile method)</a> +</li> + <li><a href="Documentation/Api/api_python.html#tools.to_param_id">to_param_id() (in module tools)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#tools.to_param_id_with_tablenumber">to_param_id_with_tablenumber() (in module tools)</a> +</li> + <li><a href="Documentation/Api/api_python.html#module-tools">tools (module)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.type">type (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#MarsRetrieval.MarsRetrieval.type">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.types">types (EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="U">U</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#UioFiles.UioFiles">UioFiles (class in UioFiles)</a> + + <ul> + <li><a href="Documentation/Api/api_python.html#module-UioFiles">(module)</a> +</li> + </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#install.un_tarball">un_tarball() (in module install)</a> +</li> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.upper">upper (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="W">W</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#ControlFile.ControlFile.wrf">wrf (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="Documentation/Api/api_python.html#EcFlexpart.EcFlexpart.write_namelist">write_namelist() (EcFlexpart.EcFlexpart method)</a> +</li> + <li><a href="Documentation/Api/api_python.html#get_mars_data.write_reqheader">write_reqheader() (in module get_mars_data)</a> +</li> + </ul></td> +</tr></table> + + + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/index.html b/Documentation/html/index.html new file mode 100644 index 0000000000000000000000000000000000000000..2e66024a844acf4f7f2d59a0b6386798f241774a --- /dev/null +++ b/Documentation/html/index.html @@ -0,0 +1,408 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Welcome to flex_extract’s user documentation! — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/css/custom.css" type="text/css" /> + <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="Installation" href="installation.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="#" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="#">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="#">Docs</a> »</li> + + <li>Welcome to <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>’s user documentation!</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="_sources/index.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="welcome-to-flex-extract-s-user-documentation"> +<h1>Welcome to <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>’s user documentation!<a class="headerlink" href="#welcome-to-flex-extract-s-user-documentation" title="Permalink to this headline">¶</a></h1> +<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 FLEXTRA/FLEXPART Atmospheric Transport Modelling system.</p> +<table style="width:100%;"> + <tr> + <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/install_icon.png"> + </div> + <h2><a href="installation.html">Installation</a></h2> + <ul> + <li><a href="installation.html#ref-requirements">Environment requirements</a></li> + <li><a href="installation.html#ref-download">Download flex_extract</a></li> + <li><a href="installation.html#ref-install-fe">Install flex_extract</a></li> + </ul> + </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=""> + </div> + <h2><a href="ecmwf_data.html">ECMWF data</a></h2> + <ul> + <li><a href="ecmwf_data.html">Overview</a></li> + <li><a href="Ecmwf/access.html">Access Modes</a></li> + <li><a href="Ecmwf/ec-links.html">Link Collection</a></li> + </ul> + </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/prog_icon.png"> + </div> + <h2><a href="documentation.html">Documentation</a></h2> + <ul> + <li><a href="Documentation/overview.html">Overview</a></li> + <li><a href="Documentation/input.html">Control & Input Data</a></li> + <li><a href="Documentation/output.html">Output Data</a></li> + </ul> + </td> + </tr> + <tr> + <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"> + </div> + <h2><a href="quick_start.html">Quick Start</a></h2> + <ul> + <li><a href="quick_start.html#job-preparation">Job preparation</a></li> + <li><a href="quick_start.html#selection-and-adjustment-of-control-files">Handling CONTROL files</a></li> + <li><a href="quick_start.html#hints-for-definition-of-some-parameter-combinations">Hints on parameter combinations</a></li> + </ul> + </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=""> + </div> + <h2><a href="evaluation.html">Evaluation</a></h2> + <ul> + <li><a href="Evaluation/staticcode.html">Code</a></li> + <li><a href="Evaluation/testcases.html">Functionality</a></li> + <li><a href="Evaluation/metrics.html">Regression</a></li> + </ul> + </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"> + </div> + <h2><a href="dev_guide.html">Developer</a></h2> + <ul> + <li><a href="Developers/gen_docu.html">Update Documentation</a></li> + <li><a href=""></a><Placeholder></li> + <li><a href=""></a><Placeholder></li> + </ul> + </td> + </tr> + </table> + <table style="width:100%;"> + <tr> + <td style="width:15%"> + </td> + <td style="width:30%;height:150px;"> + <div style="width:100%;height:60px;margin-left:10%;position:relative;"> + <img style="position:absolute;height:90%;vertical-align:bottom;" src="_static/change_icon.png"> + </div> + <h2><a href="changelog.html">Changelog</a></h2> + <ul> + <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;"> + <div style="width:100%;height:60px;margin-left:10%;position:relative;"> + <img style="position:absolute;height:100%;vertical-align:bottom;" src="_static/help_icon.png"> + </div> + <h2><a href="support.html">Support</a></h2> + <ul> + <li><a href="support.html#ref-ticket-system">Ticket system</a></li> + <li><a href="support.html#ref-mailing-list">Mailing list</a></li> + <li><a href="Support/known_bugs_issues.html">Known bugs or issues</a></li> + <li><a href="Support/faq.html">FAQ</a></li> + </ul> + </td> + <td style="width:10%"> + </td> + </tr> +</table> +<p></p><div class="admonition note"> +<p class="first admonition-title">Note</p> +<div class="figure"> +<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 +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> +<div class="toctree-wrapper compound"> +<p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a><ul> +<li class="toctree-l2"><a class="reference internal" href="installation.html#registration-at-ecmwf">Registration at ECMWF</a></li> +<li class="toctree-l2"><a class="reference internal" href="installation.html#licence-agreement-for-public-datasets">Licence agreement for public datasets</a></li> +<li class="toctree-l2"><a class="reference internal" href="installation.html#download-flex-extract">Download <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code></a></li> +<li class="toctree-l2"><a class="reference internal" href="installation.html#dependencies">Dependencies</a></li> +<li class="toctree-l2"><a class="reference internal" href="installation.html#installation-of-flex-extract">Installation of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code></a></li> +<li class="toctree-l2"><a class="reference internal" href="installation.html#flex-extract-in-combination-with-flexpart"><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> in combination with <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code></a></li> +<li class="toctree-l2"><a class="reference internal" href="installation.html#test-installation">Test installation</a><ul> +<li class="toctree-l3"><a class="reference internal" href="installation.html#fortran-program-test">Fortran program test</a></li> +<li class="toctree-l3"><a class="reference internal" href="installation.html#full-test">Full test</a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="quick_start.html">Quick Start</a><ul> +<li class="toctree-l2"><a class="reference internal" href="quick_start.html#job-preparation">Job preparation</a><ul> +<li class="toctree-l3"><a class="reference internal" href="quick_start.html#remote-and-gateway-modes">Remote and gateway modes</a></li> +<li class="toctree-l3"><a class="reference internal" href="quick_start.html#local-mode">Local mode</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="quick_start.html#selection-and-adjustment-of-control-files">Selection and adjustment of <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files</a><ul> +<li class="toctree-l3"><a class="reference internal" href="quick_start.html#public-datasets">Public datasets</a></li> +<li class="toctree-l3"><a class="reference internal" href="quick_start.html#cera">CERA</a></li> +<li class="toctree-l3"><a class="reference internal" href="quick_start.html#era-5">ERA 5</a></li> +<li class="toctree-l3"><a class="reference internal" href="quick_start.html#era-interim">ERA-Interim</a></li> +<li class="toctree-l3"><a class="reference internal" href="quick_start.html#operational-data">Operational data</a></li> +<li class="toctree-l3"><a class="reference internal" href="quick_start.html#specific-features">Specific features</a></li> +<li class="toctree-l3"><a class="reference internal" href="quick_start.html#hints-for-definition-of-some-parameter-combinations">Hints for definition of some parameter combinations</a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="documentation.html">Documentation</a></li> +<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">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> +</ul> +</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> +</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> +</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> +</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> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="support.html">Support</a><ul> +<li class="toctree-l2"><a class="reference internal" href="support.html#ticket-system">Ticket system</a></li> +<li class="toctree-l2"><a class="reference internal" href="support.html#mailing-list">Mailing list</a></li> +<li class="toctree-l2"><a class="reference internal" href="support.html#reporting-an-issue">Reporting an issue</a></li> +<li class="toctree-l2"><a class="reference internal" href="support.html#known-bugs-and-issues">Known bugs and issues</a></li> +<li class="toctree-l2"><a class="reference internal" href="support.html#faq">FAQ</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="Support/faq.html">FAQ - Frequently asked questions</a><ul> +<li class="toctree-l2"><a class="reference internal" href="Support/faq.html#what-can-i-do-if-i-can-t-install-the-third-party-libraries-from-distribution-packages">What can I do if I can’t install the third party libraries from distribution packages?</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="authors.html">Developer Team</a></li> +</ul> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="installation.html" class="btn btn-neutral float-right" title="Installation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/installation.html b/Documentation/html/installation.html new file mode 100644 index 0000000000000000000000000000000000000000..5793d5885495c8ca5b8c99276c6202eafe2672da --- /dev/null +++ b/Documentation/html/installation.html @@ -0,0 +1,404 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Installation — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/css/custom.css" type="text/css" /> + <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="Remote mode installation" href="Installation/remote.html" /> + <link rel="prev" title="Welcome to flex_extract’s user documentation!" href="index.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1 current"><a class="current reference internal" href="#">Installation</a><ul> +<li class="toctree-l2"><a class="reference internal" href="#registration-at-ecmwf">Registration at ECMWF</a></li> +<li class="toctree-l2"><a class="reference internal" href="#licence-agreement-for-public-datasets">Licence agreement for public datasets</a></li> +<li class="toctree-l2"><a class="reference internal" href="#download-flex-extract">Download <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code></a></li> +<li class="toctree-l2"><a class="reference internal" href="#dependencies">Dependencies</a></li> +<li class="toctree-l2"><a class="reference internal" href="#installation-of-flex-extract">Installation of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code></a><ul> +<li class="toctree-l3"><a class="reference internal" href="Installation/remote.html">Remote mode installation</a></li> +<li class="toctree-l3"><a class="reference internal" href="Installation/gateway.html">Gateway mode installation</a></li> +<li class="toctree-l3"><a class="reference internal" href="Installation/local.html">Local mode installation</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="#flex-extract-in-combination-with-flexpart"><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> in combination with <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code></a></li> +<li class="toctree-l2"><a class="reference internal" href="#test-installation">Test installation</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#fortran-program-test">Fortran program test</a></li> +<li class="toctree-l3"><a class="reference internal" href="#full-test">Full test</a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html">Docs</a> »</li> + + <li>Installation</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="_sources/installation.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="installation"> +<h1>Installation<a class="headerlink" href="#installation" title="Permalink to this headline">¶</a></h1> +<div class="toctree-wrapper compound"> +</div> +<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> +</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> +</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"> +<colgroup> +<col width="23%" /> +<col width="15%" /> +<col width="16%" /> +<col width="24%" /> +<col 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> +</tr> +<tr class="row-even"><td>Remote</td> +<td>Gateway</td> +<td>Local</td> +<td>Local</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"> +<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> +<tr class="row-odd"><td>CERA-20C</td> +<td>1</td> +<td>1</td> +<td>1,2</td> +<td>2</td> +</tr> +<tr class="row-even"><td>ERA5</td> +<td>1</td> +<td>1</td> +<td>3</td> +<td><ul class="first last simple"> +<li></li> +</ul> +</td> +</tr> +</tbody> +</table> +<p>Registration options:</p> +<blockquote> +<div><p>1.) Access through a member-state user account granted by the <a class="reference external" href="https://www.ecmwf.int/en/about/contact-us/computing-representatives">Computing Representative</a>. The credentials have to be provided during installation.</p> +<p>2.) Access through the ECMWF Web API. Need to sign in at <a class="reference external" href="https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home">ECMWF Web API</a> and configure the ECMWF key as described. Member-state users can sign in with their credentials from the <a class="reference external" href="https://www.ecmwf.int/en/about/contact-us/computing-representatives">Computing Representative</a> and public users have to fill out the <a class="reference external" href="https://apps.ecmwf.int/registration/">registration form</a> to get an account.</p> +<p>3.) Access through the <a class="reference external" href="https://cds.climate.copernicus.eu/api-how-to">CDS API</a>. Extra registration for member-state users is required at <a class="reference external" href="https://cds.climate.copernicus.eu/user/register">Copernicus Climate Data Store</a> including the configurations of the CDS key as described. This mode is currently not available for public users. See the note at <a class="reference external" href="Ecmwf/access.html">user group</a> for information.</p> +</div></blockquote> +</div> +<div class="section" id="licence-agreement-for-public-datasets"> +<span id="ref-licence"></span><h2>Licence agreement for public datasets<a class="headerlink" href="#licence-agreement-for-public-datasets" title="Permalink to this headline">¶</a></h2> +<p>Each ECMWF public dataset has its own licence which has to be accepted, regardless of the user group.</p> +<p>For the <em>ERA-Interim</em> and <em>CERA-20C</em> datasets this can be done at the ECMWF website <a class="reference external" href="https://confluence.ecmwf.int/display/WEBAPI/Available+ECMWF+Public+Datasets">Available ECMWF Public Datasets</a>. Log in and follow the licence links on the right side for each dataset and accept it.</p> +<p>For the <em>ERA5</em> dataset this has to be done at the <a class="reference external" href="https://cds.climate.copernicus.eu/cdsapp#!/search?type=dataset">Climate Data Store (CDS) website</a>. Log in and select, on the left panel, product type “Reanalysis” for finding <em>ERA5</em> datasets. Then follow any link with <em>ERA5</em> to the full dataset record, click on tab “Download data” and scroll down. There is a section “Terms of use” where you have to click the <span class="underline">Accept terms</span> button.</p> +</div> +<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> +</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 +</pre></div> +</div> +</dd> +</dl> +</div> +<div class="section" id="dependencies"> +<span id="ref-requirements"></span><h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this headline">¶</a></h2> +<p>The software required for running <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> depends on the <a class="reference internal" href="Documentation/Overview/app_modes.html"><span class="doc">Application Modes</span></a> and therefore is described in the respective specific installation sections.</p> +<p>Generally speaking, <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> requires <a class="reference external" href="https://docs.python.org/3/">Python 3</a> and Fortran together with certain modules / libraries. +We tested <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> with the python3 package from the the GNU/Linux distribution and Anaconda Python. The required python3 modules should prefarably be installed as distribution packages, or alternatively using Python’s own package manager <code class="docutils literal notranslate"><span class="pre">pip</span></code> (this may mess up some aspects of your python installation, especially if you use <code class="docutils literal notranslate"><span class="pre">pip</span></code> as root. Think about using virtual environments.).</p> +<p>Before installing the system packages check the availability with <code class="docutils literal notranslate"><span class="pre">dpkg</span> <span class="pre">-s</span> <span class="pre"><package-name></span> <span class="pre">|</span>  <span class="pre">grep</span> <span class="pre">Status</span></code> or <code class="docutils literal notranslate"><span class="pre">rpm</span> <span class="pre">-q</span> <span class="pre"><package_name></span></code>, depending on your system. For example:</p> +<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ dpkg -s libeccodes-dev <span class="p">|</span> grep Status +<span class="c1"># or</span> +$ rpm -q libeccodes-dev +</pre></div> +</div> +</div> +<div class="section" id="installation-of-flex-extract"> +<span id="ref-install-fe"></span><h2>Installation of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code><a class="headerlink" href="#installation-of-flex-extract" title="Permalink to this headline">¶</a></h2> +<p>The actual installation of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> is done by executing a shell script called <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code>. +It defines some parameters and calls a Python script passing the parameters as command line arguments. For details, see <a class="reference internal" href="Documentation/Input/setup.html"><span class="doc">The Installation Script - setup.sh</span></a>.</p> +<p>For each application mode installation section we describe the requirements for the explicit +environment and how it is installed, test if it works and how the actual <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> +installation has to be done. At the users local side not all software has to be present for <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>.</p> +<p>Select one of the following modes to install:</p> +<blockquote> +<div><p><a class="reference internal" href="Installation/remote.html"><span class="doc">Remote mode installation</span></a></p> +<p><a class="reference internal" href="Installation/gateway.html"><span class="doc">Gateway mode installation</span></a></p> +<p><a class="reference internal" href="Installation/local.html"><span class="doc">Local mode installation</span></a></p> +</div></blockquote> +<div class="toctree-wrapper compound"> +</div> +</div> +<div class="section" id="flex-extract-in-combination-with-flexpart"> +<h2><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> in combination with <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code><a class="headerlink" href="#flex-extract-in-combination-with-flexpart" title="Permalink to this headline">¶</a></h2> +<p>Some users might wish to incorporate <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> directly into the <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> distribution. Then the installation path has to be changed by setting the parameter <cite>installdir</cite> in the <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code> file to the <code class="docutils literal notranslate"><span class="pre">script</span></code> directory in the <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> root directoy.</p> +</div> +<div class="section" id="test-installation"> +<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>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> +</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 +</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 +</pre></div> +</div> +<p>Now go back to the root directory:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ <span class="nb">cd</span> ../../../ +</pre></div> +</div> +</div> +<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> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="Installation/remote.html" class="btn btn-neutral float-right" title="Remote mode installation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="index.html" class="btn btn-neutral float-left" title="Welcome to flex_extract’s user documentation!" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/objects.inv b/Documentation/html/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..938e417d63cf7c59359d2df83485773f42a30a76 Binary files /dev/null and b/Documentation/html/objects.inv differ diff --git a/Documentation/html/py-modindex.html b/Documentation/html/py-modindex.html new file mode 100644 index 0000000000000000000000000000000000000000..cb3f0e96c75f5d024d6680b9ec7c3f96f7cb0d1b --- /dev/null +++ b/Documentation/html/py-modindex.html @@ -0,0 +1,316 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Python Module Index — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/css/custom.css" type="text/css" /> + <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" /> + + + <script type="text/javascript"> + DOCUMENTATION_OPTIONS.COLLAPSE_INDEX = true; + </script> + + +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html">Docs</a> »</li> + + <li>Python Module Index</li> + + + <li class="wy-breadcrumbs-aside"> + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + + <h1>Python Module Index</h1> + + <div class="modindex-jumpbox"> + <a href="#cap-c"><strong>c</strong></a> | + <a href="#cap-d"><strong>d</strong></a> | + <a href="#cap-e"><strong>e</strong></a> | + <a href="#cap-g"><strong>g</strong></a> | + <a href="#cap-i"><strong>i</strong></a> | + <a href="#cap-m"><strong>m</strong></a> | + <a href="#cap-p"><strong>p</strong></a> | + <a href="#cap-s"><strong>s</strong></a> | + <a href="#cap-t"><strong>t</strong></a> | + <a href="#cap-u"><strong>u</strong></a> + </div> + + <table class="indextable modindextable"> + <tr class="pcap"><td></td><td> </td><td></td></tr> + <tr class="cap" id="cap-c"><td></td><td> + <strong>c</strong></td><td></td></tr> + <tr> + <td></td> + <td> + <a href="Documentation/Api/api_python.html#module-checks"><code class="xref">checks</code></a></td><td> + <em></em></td></tr> + <tr> + <td></td> + <td> + <a href="Documentation/Api/api_python.html#module-ControlFile"><code class="xref">ControlFile</code></a></td><td> + <em></em></td></tr> + <tr class="pcap"><td></td><td> </td><td></td></tr> + <tr class="cap" id="cap-d"><td></td><td> + <strong>d</strong></td><td></td></tr> + <tr> + <td></td> + <td> + <a href="Documentation/Api/api_python.html#module-disaggregation"><code class="xref">disaggregation</code></a></td><td> + <em></em></td></tr> + <tr class="pcap"><td></td><td> </td><td></td></tr> + <tr class="cap" id="cap-e"><td></td><td> + <strong>e</strong></td><td></td></tr> + <tr> + <td></td> + <td> + <a href="Documentation/Api/api_python.html#module-EcFlexpart"><code class="xref">EcFlexpart</code></a></td><td> + <em></em></td></tr> + <tr class="pcap"><td></td><td> </td><td></td></tr> + <tr class="cap" id="cap-g"><td></td><td> + <strong>g</strong></td><td></td></tr> + <tr> + <td></td> + <td> + <a href="Documentation/Api/api_python.html#module-get_mars_data"><code class="xref">get_mars_data</code></a></td><td> + <em></em></td></tr> + <tr> + <td></td> + <td> + <a href="Documentation/Api/api_python.html#module-GribUtil"><code class="xref">GribUtil</code></a></td><td> + <em></em></td></tr> + <tr class="pcap"><td></td><td> </td><td></td></tr> + <tr class="cap" id="cap-i"><td></td><td> + <strong>i</strong></td><td></td></tr> + <tr> + <td></td> + <td> + <a href="Documentation/Api/api_python.html#module-install"><code class="xref">install</code></a></td><td> + <em></em></td></tr> + <tr class="pcap"><td></td><td> </td><td></td></tr> + <tr class="cap" id="cap-m"><td></td><td> + <strong>m</strong></td><td></td></tr> + <tr> + <td></td> + <td> + <a href="Documentation/Api/api_python.html#module-MarsRetrieval"><code class="xref">MarsRetrieval</code></a></td><td> + <em></em></td></tr> + <tr class="pcap"><td></td><td> </td><td></td></tr> + <tr class="cap" id="cap-p"><td></td><td> + <strong>p</strong></td><td></td></tr> + <tr> + <td></td> + <td> + <a href="Documentation/Api/api_python.html#module-prepare_flexpart"><code class="xref">prepare_flexpart</code></a></td><td> + <em></em></td></tr> + <tr class="pcap"><td></td><td> </td><td></td></tr> + <tr class="cap" id="cap-s"><td></td><td> + <strong>s</strong></td><td></td></tr> + <tr> + <td></td> + <td> + <a href="Documentation/Api/api_python.html#module-submit"><code class="xref">submit</code></a></td><td> + <em></em></td></tr> + <tr class="pcap"><td></td><td> </td><td></td></tr> + <tr class="cap" id="cap-t"><td></td><td> + <strong>t</strong></td><td></td></tr> + <tr> + <td></td> + <td> + <a href="Documentation/Api/api_python.html#module-tools"><code class="xref">tools</code></a></td><td> + <em></em></td></tr> + <tr class="pcap"><td></td><td> </td><td></td></tr> + <tr class="cap" id="cap-u"><td></td><td> + <strong>u</strong></td><td></td></tr> + <tr> + <td></td> + <td> + <a href="Documentation/Api/api_python.html#module-UioFiles"><code class="xref">UioFiles</code></a></td><td> + <em></em></td></tr> + </table> + + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/quick_start.html b/Documentation/html/quick_start.html new file mode 100644 index 0000000000000000000000000000000000000000..58e68ac5697190566304d604f4bb195952d99bae --- /dev/null +++ b/Documentation/html/quick_start.html @@ -0,0 +1,670 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Quick Start — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/css/custom.css" type="text/css" /> + <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="ECMWF Data" href="ecmwf_data.html" /> + <link rel="prev" title="Local mode installation" href="Installation/local.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> +<li class="toctree-l1 current"><a class="current reference internal" href="#">Quick Start</a><ul> +<li class="toctree-l2"><a class="reference internal" href="#job-preparation">Job preparation</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#remote-and-gateway-modes">Remote and gateway modes</a></li> +<li class="toctree-l3"><a class="reference internal" href="#local-mode">Local mode</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="#selection-and-adjustment-of-control-files">Selection and adjustment of <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#public-datasets">Public datasets</a></li> +<li class="toctree-l3"><a class="reference internal" href="#cera">CERA</a></li> +<li class="toctree-l3"><a class="reference internal" href="#era-5">ERA 5</a></li> +<li class="toctree-l3"><a class="reference internal" href="#era-interim">ERA-Interim</a></li> +<li class="toctree-l3"><a class="reference internal" href="#operational-data">Operational data</a></li> +<li class="toctree-l3"><a class="reference internal" href="#specific-features">Specific features</a></li> +<li class="toctree-l3"><a class="reference internal" href="#hints-for-definition-of-some-parameter-combinations">Hints for definition of some parameter combinations</a><ul class="simple"> +</ul> +</li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html">Docs</a> »</li> + + <li>Quick Start</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="_sources/quick_start.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="quick-start"> +<h1>Quick Start<a class="headerlink" href="#quick-start" title="Permalink to this headline">¶</a></h1> +<p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> by itself is a command-line tool. With version 7.1 an upstream shell script was implemented which calls <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> with the command-line parameters.</p> +<p>To submit a job with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> change the working directory to the <code class="docutils literal notranslate"><span class="pre">Run</span></code> directory which is placed directly under the <code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X</span></code> root directory (<code class="docutils literal notranslate"><span class="pre">X.X</span></code> is the version number):</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> <path-to-flex_extract_vX.X>/Run +</pre></div> +</div> +<p>Within this directory you can find everything you need to modify and run <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>. The following tree shows a shortened list of directories and important files. The <code class="docutils literal notranslate"><span class="pre">*</span></code> serves as a wildcard. The brackets <code class="docutils literal notranslate"><span class="pre">[]</span></code> means that the file appearance depends on the mode of application and night not be present.</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>Run +├── Control +│ ├── CONTROL_* +├── Jobscripts +│ ├── compilejob.ksh +│ ├── job.ksh +│ ├── <span class="o">[</span>joboper.ksh<span class="o">]</span> +├── Workspace +│ ├── CERA_example +│ │ ├── CE000908* +├── <span class="o">[</span>ECMWF_ENV<span class="o">]</span> +├── run_local.sh +└── run.sh +</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>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> +</div> +<div class="section" id="job-preparation"> +<h2>Job preparation<a class="headerlink" href="#job-preparation" title="Permalink to this headline">¶</a></h2> +<p>To actually start a job with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> it is only necessary to submit 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 on the command-line. For the specification of dataset and the selection of the access mode it is necessary to select and modify a <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file and change the parameters in the user section of the <code class="docutils literal notranslate"><span class="pre">run</span></code> scripts. The following sections describes the differences in the application modes and where the results will be stored.</p> +<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> +<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> +<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> +ssh <user>@<gatewayserver> +<span class="nb">cd</span> <path-to-flex_extract_vX.X>/Run +</pre></div> +</div> +</dd> +</dl> +<p>From here on the working process is the same for both modes.</p> +<p>For your first submission you should 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. We recommend to extract <em>CERA-20C</em> data since they usually guarantee quick results and are best for testing reasons.</p> +<p>Therefore open the <code class="docutils literal notranslate"><span class="pre">run.sh</span></code> file and modify the parameter block marked in the file as shown below:</p> +<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> + +<span class="nv">QUEUE</span><span class="o">=</span><span class="s1">'ecgate'</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 +<span class="nv">STEP</span><span class="o">=</span>None +<span class="nv">LEVELIST</span><span class="o">=</span>None +<span class="nv">AREA</span><span class="o">=</span>None +<span class="nv">INPUTDIR</span><span class="o">=</span>None +<span class="nv">OUTPUTDIR</span><span class="o">=</span>None +<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_CERA'</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> +</pre></div> +</div> +<p>This would retrieve a one day (08.09.2000) <em>CERA-20C</em> dataset with 3 hourly temporal resolution and a small 1° domain over Europe. Since the <code class="docutils literal notranslate"><span class="pre">ectrans</span></code> parameter is set to <code class="docutils literal notranslate"><span class="pre">1</span></code> the resulting output files will be transferred to the local gateway into the path stored in the destination (SEE INSTRUCTIONS FROM INSTALLATION). The parameters listed in the <code class="docutils literal notranslate"><span class="pre">run.sh</span></code> file would overwrite existing settings in the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file.</p> +<p>To start the retrieval you only have to start the script by:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./run.sh +</pre></div> +</div> +<p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> will print some information about the job. If there is no error in the submission to the ECMWF server you will see something like this:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>---- On-demand mode! ---- +The job id is: <span class="m">10627807</span> +You should get an email per job with subject flex.hostname.pid +FLEX_EXTRACT JOB SCRIPT IS SUBMITED! +</pre></div> +</div> +<p>Once submitted you can check the progress of the submitted job using <code class="docutils literal notranslate"><span class="pre">ecaccess-job-list</span></code>. You should get an email after the job is finished with a detailed protocol of what was done.</p> +<p>In case the job fails you will receive an email with the subject <code class="docutils literal notranslate"><span class="pre">ERROR!</span></code> and the job name. You can then check for information in the email or you can check on ECMWF server in the <code class="docutils literal notranslate"><span class="pre">$SCRATCH</span></code> directory for debugging information.</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> <span class="nv">$SCRATCH</span> +ls -rthl +</pre></div> +</div> +<p>The last command lists the most recent logs and temporary retrieval directories (usually <code class="docutils literal notranslate"><span class="pre">pythonXXXXX</span></code>, where XXXXX is the process id). Under <code class="docutils literal notranslate"><span class="pre">pythonXXXXX</span></code> a copy of the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file is stored under the name <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code>, the protocol is stored in the file <code class="docutils literal notranslate"><span class="pre">prot</span></code> and the temporary files as well as the resulting files are stored in a directory <code class="docutils literal notranslate"><span class="pre">work</span></code>. The original name of the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file is stored in this new file under parameter <code class="docutils literal notranslate"><span class="pre">controlfile</span></code>.</p> +<div class="literal-block-wrapper docutils container" id="id3"> +<div class="code-block-caption"><span class="caption-text">“Example structure of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> output directory on ECMWF servers.”</span><a class="headerlink" href="#id3" title="Permalink to this code">¶</a></div> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>pythonXXXXX +├── CONTROL +├── prot +├── work +│ ├── temporary files +│ ├── CE000908* <span class="o">(</span>resulting files<span class="o">)</span> +</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>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"> +<colgroup> +<col width="50%" /> +<col 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> +</tr> +<tr class="row-even"><td><div class="first last 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> +<span class="c1">#</span> + +<span class="nv">QUEUE</span><span class="o">=</span><span class="s1">''</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>None +<span class="nv">BASETIME</span><span class="o">=</span>None +<span class="nv">STEP</span><span class="o">=</span>None +<span class="nv">LEVELIST</span><span class="o">=</span>None +<span class="nv">AREA</span><span class="o">=</span>None +<span class="hll"><span class="nv">INPUTDIR</span><span class="o">=</span><span class="s1">'./Workspace/CERA'</span> +</span><span class="nv">OUTPUTDIR</span><span class="o">=</span>None +<span class="nv">PP_ID</span><span class="o">=</span>None +<span class="nv">JOB_TEMPLATE</span><span class="o">=</span><span class="s1">''</span> +<span class="hll"><span class="nv">CONTROLFILE</span><span class="o">=</span><span class="s1">'CONTROL_CERA'</span> +</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">0</span> +<span class="hll"><span class="nv">PUBLIC</span><span class="o">=</span><span class="m">0</span> +</span></pre></div> +</div> +</td> +<td><div class="first last 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> +<span class="c1">#</span> + +<span class="nv">QUEUE</span><span class="o">=</span><span class="s1">''</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>None +<span class="nv">BASETIME</span><span class="o">=</span>None +<span class="nv">STEP</span><span class="o">=</span>None +<span class="nv">LEVELIST</span><span class="o">=</span>None +<span class="nv">AREA</span><span class="o">=</span>None +<span class="hll"><span class="nv">INPUTDIR</span><span class="o">=</span><span class="s1">'./Workspace/CERApublic'</span> +</span><span class="nv">OUTPUTDIR</span><span class="o">=</span>None +<span class="nv">PP_ID</span><span class="o">=</span>None +<span class="nv">JOB_TEMPLATE</span><span class="o">=</span><span class="s1">''</span> +<span class="hll"><span class="nv">CONTROLFILE</span><span class="o">=</span><span class="s1">'CONTROL_CERA.public'</span> +</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">0</span> +<span class="hll"><span class="nv">PUBLIC</span><span class="o">=</span><span class="m">1</span> +</span></pre></div> +</div> +</td> +</tr> +</tbody> +</table> +<p>This would retrieve a one day (08.09.2000) <em>CERA-20C</em> dataset with 3 hourly temporal resolution and a small 1° domain over Europe. The destination location for this retrieval will be within the <code class="docutils literal notranslate"><span class="pre">Workspace</span></code> directory within <code class="docutils literal notranslate"><span class="pre">Run</span></code>. This can be changed to whatever path you like. The parameters listed in <code class="docutils literal notranslate"><span class="pre">run_local.sh</span></code> would overwrite existing settings in the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file.</p> +<p>To start the retrieval you then start the script by:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./run_local.sh +</pre></div> +</div> +<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> +</ol> +</div></blockquote> +</div> +</div> +<div class="section" id="selection-and-adjustment-of-control-files"> +<h2>Selection and adjustment of <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files<a class="headerlink" href="#selection-and-adjustment-of-control-files" title="Permalink to this headline">¶</a></h2> +<p>This section describes how to work with the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files. A detailed explanation of <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file parameters and naming compositions can be found <a class="reference external" href="Documentation/Input/control.html">here</a>. The more accurately the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file describes the retrieval needed, the fewer command-line parameters are needed to be set in the <code class="docutils literal notranslate"><span class="pre">run</span></code> scripts. With version <code class="docutils literal notranslate"><span class="pre">7.1</span></code> all <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file parameters have default values. They can be found in section <a class="reference external" href="Documentation/Input/control_params.html">CONTROL parameters</a> or in the <code class="docutils literal notranslate"><span class="pre">CONTROL.documentation</span></code> file within the <code class="docutils literal notranslate"><span class="pre">Control</span></code> directory. Only those parameters which need to be changed for a dataset retrieval needs to be set in a <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file!</p> +<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> +</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"> +<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> +<div class="literal-block-wrapper docutils container" id="id4"> +<div class="code-block-caption"><span class="caption-text">“Current example <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files distributed with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>. “</span><a class="headerlink" href="#id4" title="Permalink to this code">¶</a></div> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>CONTROL_CERA +CONTROL_CERA.global +CONTROL_CERA.public +CONTROL_EA5 +CONTROL_EA5.global +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 +</pre></div> +</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> +<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> +</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"> +<h3>Public datasets<a class="headerlink" href="#public-datasets" title="Permalink to this headline">¶</a></h3> +<p>The main difference in the definition of a <code class="docutils literal notranslate"><span class="pre">CONRTOL</span></code> file for a public dataset is the setting of the parameter <code class="docutils literal notranslate"><span class="pre">DATASET</span></code>. This specification enables the selection of a public dataset in MARS. Otherwise the request would not find the dataset. +For the two public datasets <em>CERA-20C</em> and <em>ERA-Interim</em> an example file with the ending <code class="docutils literal notranslate"><span class="pre">.public</span></code> is provided and can be used straightaway.</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>CONTROL_CERA.public +CONTROL_EI.public +</pre></div> +</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> +</div> +</div> +<div class="section" id="cera"> +<h3>CERA<a class="headerlink" href="#cera" title="Permalink to this headline">¶</a></h3> +<p>For this dataset it is important to keep in mind that the dataset is available for the period 09/1901 until 12/2010 and the temporal resolution is limited to 3-hourly fields. +It is also a pure ensemble data assimilation dataset and is stored under the <code class="docutils literal notranslate"><span class="pre">enda</span></code> stream. It has <code class="docutils literal notranslate"><span class="pre">10</span></code> ensemble members. The example <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files will only select the first member (<code class="docutils literal notranslate"><span class="pre">number=0</span></code>). You may change this to another number or a list of numbers (e.g. <code class="docutils literal notranslate"><span class="pre">NUMBER</span> <span class="pre">0/to/10</span></code>). +Another important difference to all other datasets is the forecast starting time which is 18 UTC. Which means that the forecast in <em>CERA-20C</em> for flux fields is 12 hours long. Since the forecast extends over a single day we need to extract one day in advance and one day subsequently. This is automatically done in <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>.</p> +</div> +<div class="section" id="era-5"> +<h3>ERA 5<a class="headerlink" href="#era-5" title="Permalink to this headline">¶</a></h3> +<p>This is the newest re-analysis dataset and has a temporal resolution of 1-hourly analysis fields. Up to date it is available until April 2019 with regular release of new months. +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> +</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> +</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. +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> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>CONTROL_OD.OPER.4V.eta.global +CONTROL_OD.OPER.FC.eta.global +CONTROL_OD.OPER.FC.eta.highres +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> +</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>. +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 +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 +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. +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 +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> +</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. +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="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> + STEP <span class="m">00</span> <span class="m">03</span> <span class="m">06</span> <span class="m">09</span> <span class="m">00</span> <span class="m">03</span> <span class="m">06</span> <span class="m">09</span> +</pre></div> +</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> +<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> +DPDETA <span class="m">1</span> +OMEGA <span class="m">0</span> +OMEGADIFF <span class="m">0</span> +</pre></div> +</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>). +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="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> +UPPER <span class="m">90</span>. +LOWER <span class="m">0</span>. +LEFT -179.75 +RIGHT <span class="m">180</span>. +</pre></div> +</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> +<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 + ACCMAXSTEP <span class="m">36</span> +</pre></div> +</div> +</div> +</dd> +</dl> +<div class="toctree-wrapper compound"> +</div> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="ecmwf_data.html" class="btn btn-neutral float-right" title="ECMWF Data" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="Installation/local.html" class="btn btn-neutral float-left" title="Local mode installation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/search.html b/Documentation/html/search.html new file mode 100644 index 0000000000000000000000000000000000000000..d831fe99233904bade7a2aa97c8be56a95025740 --- /dev/null +++ b/Documentation/html/search.html @@ -0,0 +1,223 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Search — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="_static/js/modernizr.min.js"></script> + + + <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 type="text/javascript" src="_static/js/theme.js"></script> + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/css/custom.css" type="text/css" /> + <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="#" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="#" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html">Docs</a> »</li> + + <li>Search</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <noscript> + <div id="fallback" class="admonition warning"> + <p class="last"> + Please activate JavaScript to enable the search + functionality. + </p> + </div> + </noscript> + + + <div id="search-results"> + + </div> + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + <script type="text/javascript"> + jQuery(function() { Search.loadIndex("searchindex.js"); }); + </script> + + <script type="text/javascript" id="searchindexloader"></script> + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/searchindex.js b/Documentation/html/searchindex.js new file mode 100644 index 0000000000000000000000000000000000000000..38fe168d6bb8d333fef8bef601b082b2f0a3b6dc --- /dev/null +++ b/Documentation/html/searchindex.js @@ -0,0 +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 diff --git a/Documentation/html/support.html b/Documentation/html/support.html new file mode 100644 index 0000000000000000000000000000000000000000..6652ca95be03e42230ff00b024ee7917c6ddfc13 --- /dev/null +++ b/Documentation/html/support.html @@ -0,0 +1,269 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Support — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/css/custom.css" type="text/css" /> + <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="FAQ - Frequently asked questions" href="Support/faq.html" /> + <link rel="prev" title="Changelog" href="changelog.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1 current"><a class="current reference internal" href="#">Support</a><ul> +<li class="toctree-l2"><a class="reference internal" href="#ticket-system">Ticket system</a></li> +<li class="toctree-l2"><a class="reference internal" href="#mailing-list">Mailing list</a></li> +<li class="toctree-l2"><a class="reference internal" href="#reporting-an-issue">Reporting an issue</a></li> +<li class="toctree-l2"><a class="reference internal" href="#known-bugs-and-issues">Known bugs and issues</a></li> +<li class="toctree-l2"><a class="reference internal" href="#faq">FAQ</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html">Docs</a> »</li> + + <li>Support</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="_sources/support.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="support"> +<h1>Support<a class="headerlink" href="#support" title="Permalink to this headline">¶</a></h1> +<div class="toctree-wrapper compound"> +</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> +</ul> +</div> +<div class="section" id="ticket-system"> +<span id="ref-ticket-system"></span><h2><a class="toc-backref" href="#id2">Ticket system</a><a class="headerlink" href="#ticket-system" title="Permalink to this headline">¶</a></h2> +<p>The community website <a class="reference external" href="http://flexpart.eu">http://flexpart.eu</a> contains a +<a class="reference external" href="https://www.flexpart.eu/report/1">ticket system</a> which can be used to report any issue or a proposition for a new feature.</p> +<p>The tickets can be viewed by anyone, to create a ticket a registration is necessary. Since the automatic registration is unavailable, please send an email to the <code class="docutils literal notranslate"><span class="pre">flexpart.eu[at]zamg.ac.at</span></code> and you will receive your credentials (with some delay).</p> +</div> +<div class="section" id="mailing-list"> +<span id="ref-mailing-list"></span><h2><a class="toc-backref" href="#id3">Mailing list</a><a class="headerlink" href="#mailing-list" title="Permalink to this headline">¶</a></h2> +<p>The mailing list is mainly for the <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> users to ask questions or share experiences regarding the whole <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> process with the community. This can be a lot faster than asking only the developers for help. Since <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> is a preprocessor to <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> this is the right place to ask for help.</p> +<p>Additionally, from time to time, there will be announcements for all FLEXPART users, such as new release versions of <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> or <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>.</p> +<p>Just write a mail to: <code class="docutils literal notranslate"><span class="pre">flexpart[at]lists.univie.ac.at</span></code></p> +</div> +<div class="section" id="reporting-an-issue"> +<span id="ref-reporting"></span><h2><a class="toc-backref" href="#id4">Reporting an issue</a><a class="headerlink" href="#reporting-an-issue" title="Permalink to this headline">¶</a></h2> +<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> +</ul> +</div> +<div class="section" id="known-bugs-and-issues"> +<span id="ref-known-issues"></span><h2><a class="toc-backref" href="#id5">Known bugs and issues</a><a class="headerlink" href="#known-bugs-and-issues" title="Permalink to this headline">¶</a></h2> +<p>A collection of reported and detected bugs and issues with solutions can be found <a class="reference internal" href="Support/known_bugs_issues.html"><span class="doc">here</span></a>.</p> +</div> +<div class="section" id="faq"> +<span id="ref-faq"></span><h2><a class="toc-backref" href="#id6">FAQ</a><a class="headerlink" href="#faq" title="Permalink to this headline">¶</a></h2> +<p>A list of frequently asked questions and hints for the application of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> can be found <a class="reference internal" href="Support/faq.html"><span class="doc">here</span></a>.</p> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="Support/faq.html" class="btn btn-neutral float-right" title="FAQ - Frequently asked questions" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="changelog.html" class="btn btn-neutral float-left" title="Changelog" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/html/todo.html b/Documentation/html/todo.html new file mode 100644 index 0000000000000000000000000000000000000000..075ca43f265d4750a1404bab0ded2f3705fb8123 --- /dev/null +++ b/Documentation/html/todo.html @@ -0,0 +1,223 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ToDos — flex_extract 7.1 alpha documentation</title> + + + + + + + + + <script type="text/javascript" src="_static/js/modernizr.min.js"></script> + + + <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/js/theme.js"></script> + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/css/custom.css" type="text/css" /> + <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" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="quick_start.html">Quick Start</a></li> +<li class="toctree-l1"><a class="reference internal" href="ecmwf_data.html">ECMWF Data</a></li> +<li class="toctree-l1"><a class="reference internal" href="documentation.html">Documentation</a></li> +<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></li> +<li class="toctree-l1"><a class="reference internal" href="support.html">Support</a></li> +<li class="toctree-l1"><a class="reference internal" href="Support/faq.html">FAQ - Frequently asked questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="authors.html">Developer Team</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html">Docs</a> »</li> + + <li>ToDos</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="_sources/todo.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <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> + + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2019, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/Documentation/poster_DACH2019.pdf b/Documentation/poster_DACH2019.pdf new file mode 100644 index 0000000000000000000000000000000000000000..990319936475052ba6d0f9a101070c1a7773b2ab Binary files /dev/null and b/Documentation/poster_DACH2019.pdf differ diff --git a/Documentation/poster_EGU2019.pdf b/Documentation/poster_EGU2019.pdf new file mode 100644 index 0000000000000000000000000000000000000000..854da33a42955646960f2c93cc8dc9e63296a413 Binary files /dev/null and b/Documentation/poster_EGU2019.pdf differ diff --git a/Documentation/poster_SnT2019.pdf b/Documentation/poster_SnT2019.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d0fee415e3f96c6d0ba06de26e871184c442cd8b Binary files /dev/null and b/Documentation/poster_SnT2019.pdf differ diff --git a/For_developers/CONTROLparameter.xls b/For_developers/CONTROLparameter.xls new file mode 100644 index 0000000000000000000000000000000000000000..25203e3e6246ab550a37f3da7b44c07b3e44cbd4 Binary files /dev/null and b/For_developers/CONTROLparameter.xls differ diff --git a/For_developers/ECMWF_FPparameter.xls b/For_developers/ECMWF_FPparameter.xls new file mode 100644 index 0000000000000000000000000000000000000000..a6400bf5f07d973b159bd48ea52dc0e7d19c5614 Binary files /dev/null and b/For_developers/ECMWF_FPparameter.xls differ diff --git a/For_developers/FORD/flexpart_logo_90x90.png b/For_developers/FORD/flexpart_logo_90x90.png new file mode 100644 index 0000000000000000000000000000000000000000..6b908d7d4c613960844591ef842a1aacf07a4aa4 Binary files /dev/null and b/For_developers/FORD/flexpart_logo_90x90.png differ diff --git a/For_developers/FORD/fmw.md b/For_developers/FORD/fmw.md new file mode 100644 index 0000000000000000000000000000000000000000..b94ac6e59ad8d1f942735450d21fa2be4aa894f5 --- /dev/null +++ b/For_developers/FORD/fmw.md @@ -0,0 +1,31 @@ +project: Flex_extract: Calculation of etadot +project_website: https://flexpart.eu/ +project_download: https://www.flexpart.eu/downloads +favicon: ./fp_favicon.png +src_dir: ../../Source/Fortran/ +output_dir: ../../Documentation/html/Documentation/Api/Fortran +summary: Calculation of vertical velocity for FLEXPART +author: Leopold Haimberger<sup>1</sup> +author_description: <sup>1</sup>Univ. of Vienna, Dept. of Meteorology & Geophysics +author_pic: ./fplogo.jpg +docmark: ! +predocmark: > +media_dir: ../../Documentation/html/Documentation/Api/Fortran +docmark_alt: * +predocmark_alt: < +creation_date: +coloured_edges: +display: public + protected + private +source: public + protected + private +graph: true +warn: false +license: by +version: 7.1 +@Note for this version: +All code transferred to free form. +Some code cosmetics, should not have any effects +Rename some source files diff --git a/For_developers/FORD/fp_favicon.png b/For_developers/FORD/fp_favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..d697f4d7acd14cae987bdb7f715a764060025739 Binary files /dev/null and b/For_developers/FORD/fp_favicon.png differ diff --git a/For_developers/FORD/fplogo.jpg b/For_developers/FORD/fplogo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f57b0b3ad46dddea75d729fb3d054239ef929936 Binary files /dev/null and b/For_developers/FORD/fplogo.jpg differ diff --git a/For_developers/FORD/readme.txt b/For_developers/FORD/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..761adfab06ad7335632ceae07dce946332e79aaa --- /dev/null +++ b/For_developers/FORD/readme.txt @@ -0,0 +1,8 @@ +HOW TO UPDATE THE AUTOMATED DOCUMENTATION OF THE FORTRAN CODE + +1. Install the FORtran Documenter from https://github.com/cmacmackin/ford + Maybe read the documentation http://fortranwiki.org/fortran/show/FORD +2. Adapt the files in this directory if needed. fmw.md controls the the operation of FORD +3. Run Ford: ford fmw.md + +Note 1: Use --exclude_dir ../../Source/Fortran/<yourdir> if you have any subdir in the Fortran source directory containing Fortran source files (can be repeated) diff --git a/For_developers/Flowcharts/mk_jobscript2.dia b/For_developers/Flowcharts/mk_jobscript2.dia new file mode 100644 index 0000000000000000000000000000000000000000..e0767358cdc0f80ce649ccf42f73b074144a03d9 Binary files /dev/null and b/For_developers/Flowcharts/mk_jobscript2.dia differ diff --git a/For_developers/Flowcharts/mk_jobscript2.pdf b/For_developers/Flowcharts/mk_jobscript2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ede501bdcf66d3009e761afd248e98aec91940e0 Binary files /dev/null and b/For_developers/Flowcharts/mk_jobscript2.pdf differ diff --git a/For_developers/Flowcharts/submit2.dia b/For_developers/Flowcharts/submit2.dia new file mode 100644 index 0000000000000000000000000000000000000000..bf7da9b190827682a820fbba3d986174497c4fc3 Binary files /dev/null and b/For_developers/Flowcharts/submit2.dia differ diff --git a/For_developers/Flowcharts/submit2.pdf b/For_developers/Flowcharts/submit2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..55cbb47773939fd9f21f8dbabcfbe793adbb4cd8 Binary files /dev/null and b/For_developers/Flowcharts/submit2.pdf differ diff --git a/For_developers/InstallationParameter.xls b/For_developers/InstallationParameter.xls new file mode 100644 index 0000000000000000000000000000000000000000..8a22817ff6c997da9670f3e58ca60e22b32fe13b Binary files /dev/null and b/For_developers/InstallationParameter.xls differ diff --git a/For_developers/Sphinx/Makefile b/For_developers/Sphinx/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..47066bbf300cfcceb1bbbd678c676f38fcba92f8 --- /dev/null +++ b/For_developers/Sphinx/Makefile @@ -0,0 +1,20 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = -d build_temp +SPHINXBUILD = sphinx-build +SPHINXPROJ = flex_extract +SOURCEDIR = source +BUILDDIR = ../../Documentation + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/For_developers/Sphinx/source/.idea/encodings.xml b/For_developers/Sphinx/source/.idea/encodings.xml new file mode 100644 index 0000000000000000000000000000000000000000..15a15b218a29e09c9190992732698d646e4d659a --- /dev/null +++ b/For_developers/Sphinx/source/.idea/encodings.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Encoding" addBOMForNewFiles="with NO BOM" /> +</project> \ No newline at end of file diff --git a/For_developers/Sphinx/source/.idea/libraries/R_User_Library.xml b/For_developers/Sphinx/source/.idea/libraries/R_User_Library.xml new file mode 100644 index 0000000000000000000000000000000000000000..71f5ff7491c8adc14863f731dc3da7f5ed771285 --- /dev/null +++ b/For_developers/Sphinx/source/.idea/libraries/R_User_Library.xml @@ -0,0 +1,6 @@ +<component name="libraryTable"> + <library name="R User Library"> + <CLASSES /> + <SOURCES /> + </library> +</component> \ No newline at end of file diff --git a/For_developers/Sphinx/source/.idea/misc.xml b/For_developers/Sphinx/source/.idea/misc.xml new file mode 100644 index 0000000000000000000000000000000000000000..a2e120dcc86d18fdcb6ccfbe56c5d0b0dcd7c04a --- /dev/null +++ b/For_developers/Sphinx/source/.idea/misc.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7" project-jdk-type="Python SDK" /> +</project> \ No newline at end of file diff --git a/For_developers/Sphinx/source/.idea/modules.xml b/For_developers/Sphinx/source/.idea/modules.xml new file mode 100644 index 0000000000000000000000000000000000000000..66f3350852f70fbfb98aa5e634317f8bf4b7bfaf --- /dev/null +++ b/For_developers/Sphinx/source/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/.idea/source.iml" filepath="$PROJECT_DIR$/.idea/source.iml" /> + </modules> + </component> +</project> \ No newline at end of file diff --git a/For_developers/Sphinx/source/.idea/source.iml b/For_developers/Sphinx/source/.idea/source.iml new file mode 100644 index 0000000000000000000000000000000000000000..bf708e32be3534bcf6543a36dce20e65b253dd24 --- /dev/null +++ b/For_developers/Sphinx/source/.idea/source.iml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="PYTHON_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$" /> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="library" name="R User Library" level="project" /> + <orderEntry type="library" name="R Skeletons" level="application" /> + </component> + <component name="TestRunnerService"> + <option name="PROJECT_TEST_RUNNER" value="Unittests" /> + </component> +</module> \ No newline at end of file diff --git a/For_developers/Sphinx/source/.idea/vcs.xml b/For_developers/Sphinx/source/.idea/vcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..c2365ab11f9ba6b763735c8fd976420234bb3521 --- /dev/null +++ b/For_developers/Sphinx/source/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$/../../.." vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/For_developers/Sphinx/source/.idea/workspace.xml b/For_developers/Sphinx/source/.idea/workspace.xml new file mode 100644 index 0000000000000000000000000000000000000000..8357804bea5dfefcaaef067d3d42aee604790467 --- /dev/null +++ b/For_developers/Sphinx/source/.idea/workspace.xml @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ChangeListManager"> + <list default="true" id="2a15728f-bfbe-476a-b119-bc85c479ce08" name="Default Changelist" comment=""> + <change beforePath="$PROJECT_DIR$/../../../README.md" beforeDir="false" afterPath="$PROJECT_DIR$/../../../README.md" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/conf.py" beforeDir="false" afterPath="$PROJECT_DIR$/conf.py" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/index.rst" beforeDir="false" afterPath="$PROJECT_DIR$/index.rst" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/program_structure/prog_overview.rst" beforeDir="false" afterPath="$PROJECT_DIR$/program_structure/prog_overview.rst" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../../for_developers/CONTROLparameter.xlsx" beforeDir="false" afterPath="$PROJECT_DIR$/../../../for_developers/CONTROLparameter.xlsx" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../../run/control/CONTROL_CERA.testgrid" beforeDir="false" afterPath="$PROJECT_DIR$/../../../run/control/CONTROL_CERA.testgrid" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../../run/control/CONTROL_EA5.newgrid" beforeDir="false" afterPath="$PROJECT_DIR$/../../../run/control/CONTROL_EA5.newgrid" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../../run/control/CONTROL_EA5.testgrid" beforeDir="false" afterPath="$PROJECT_DIR$/../../../run/control/CONTROL_EA5.testgrid" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../../run/control/CONTROL_FC.pure.36hours.testgrid" beforeDir="false" afterPath="$PROJECT_DIR$/../../../run/control/CONTROL_FC.pure.36hours.testgrid" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../../run/run.sh" beforeDir="false" afterPath="$PROJECT_DIR$/../../../run/run.sh" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../../run/run_local.sh" beforeDir="false" afterPath="$PROJECT_DIR$/../../../run/run_local.sh" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../../source/fortran/Makefile.gfortran" beforeDir="false" afterPath="$PROJECT_DIR$/../../../source/fortran/Makefile.gfortran" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../../source/fortran/Makefile.local.gfortran" beforeDir="false" afterPath="$PROJECT_DIR$/../../../source/fortran/Makefile.local.gfortran" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../../source/fortran/Makefile.local.ifort" beforeDir="false" afterPath="$PROJECT_DIR$/../../../source/fortran/Makefile.local.ifort" afterDir="false" /> + </list> + <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> + <option name="SHOW_DIALOG" value="false" /> + <option name="HIGHLIGHT_CONFLICTS" value="true" /> + <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> + <option name="LAST_RESOLUTION" value="IGNORE" /> + </component> + <component name="FileEditorManager"> + <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> + <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/index.rst"> + <provider selected="true" editor-type-id="restructured-text-editor" /> + </entry> + </file> + <file pinned="false" current-in-tab="true"> + <entry file="file://$PROJECT_DIR$/../../../README.md"> + <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]"> + <state split_layout="SPLIT"> + <first_editor relative-caret-position="631"> + <caret line="492" column="177" selection-start-line="492" selection-start-column="132" selection-end-line="492" selection-end-column="181" /> + <folding> + <element signature="e#11390#11416#0" /> + <element signature="e#18917#18937#0" /> + <element signature="e#19186#19204#0" /> + </folding> + </first_editor> + <second_editor /> + </state> + </provider> + </entry> + </file> + </leaf> + </component> + <component name="Git.Settings"> + <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../../.." /> + </component> + <component name="IdeDocumentHistory"> + <option name="CHANGED_PATHS"> + <list> + <option value="$PROJECT_DIR$/../../../README.md" /> + </list> + </option> + </component> + <component name="ProjectFrameBounds" extendedState="1"> + <option name="x" value="1680" /> + <option name="y" value="60" /> + <option name="width" value="1920" /> + <option name="height" value="1113" /> + </component> + <component name="ProjectLevelVcsManager" settingsEditedManually="true" /> + <component name="ProjectView"> + <navigator proportions="" version="1"> + <foldersAlwaysOnTop value="true" /> + </navigator> + <panes> + <pane id="ProjectPane"> + <subPane> + <expand> + <path> + <item name="source" type="b2602c69:ProjectViewProjectNode" /> + <item name="source" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="source" type="b2602c69:ProjectViewProjectNode" /> + <item name="source" type="462c0819:PsiDirectoryNode" /> + <item name="_static" type="462c0819:PsiDirectoryNode" /> + </path> + </expand> + <select /> + </subPane> + </pane> + <pane id="Scope" /> + </panes> + </component> + <component name="PropertiesComponent"> + <property name="last_opened_file_path" value="$PROJECT_DIR$" /> + <property name="settings.editor.selected.configurable" value="File.Encoding" /> + </component> + <component name="RunDashboard"> + <option name="ruleStates"> + <list> + <RuleState> + <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> + </RuleState> + <RuleState> + <option name="name" value="StatusDashboardGroupingRule" /> + </RuleState> + </list> + </option> + </component> + <component name="SvnConfiguration"> + <configuration /> + </component> + <component name="TaskManager"> + <task active="true" id="Default" summary="Default task"> + <changelist id="2a15728f-bfbe-476a-b119-bc85c479ce08" name="Default Changelist" comment="" /> + <created>1551958821849</created> + <option name="number" value="Default" /> + <option name="presentableId" value="Default" /> + <updated>1551958821849</updated> + </task> + <servers /> + </component> + <component name="TodoView"> + <todo-panel id="selected-file"> + <is-autoscroll-to-source value="true" /> + </todo-panel> + <todo-panel id="all"> + <are-packages-shown value="true" /> + <is-autoscroll-to-source value="true" /> + </todo-panel> + </component> + <component name="ToolWindowManager"> + <frame x="1680" y="60" width="1920" height="1113" extended-state="0" /> + <editor active="true" /> + <layout> + <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.046375267" /> + <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> + <window_info id="Favorites" order="2" side_tool="true" /> + <window_info anchor="bottom" id="Message" order="0" /> + <window_info anchor="bottom" id="Find" order="1" /> + <window_info anchor="bottom" id="Run" order="2" /> + <window_info anchor="bottom" id="Debug" order="3" weight="0.4" /> + <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> + <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> + <window_info anchor="bottom" id="TODO" order="6" weight="0.32936078" /> + <window_info anchor="bottom" id="Version Control" order="7" weight="0.32936078" /> + <window_info anchor="bottom" id="Terminal" order="8" /> + <window_info anchor="bottom" id="Event Log" order="9" side_tool="true" weight="0.030120483" /> + <window_info anchor="bottom" id="Python Console" order="10" /> + <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" /> + <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> + <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> + <window_info anchor="right" id="R Graphics" order="3" /> + <window_info anchor="right" id="R Packages" order="4" /> + </layout> + </component> + <component name="editorHistoryManager"> + <entry file="file://$PROJECT_DIR$/index.rst"> + <provider selected="true" editor-type-id="restructured-text-editor" /> + </entry> + <entry file="file://$PROJECT_DIR$/../../../README.md"> + <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]"> + <state split_layout="SPLIT"> + <first_editor relative-caret-position="631"> + <caret line="492" column="177" selection-start-line="492" selection-start-column="132" selection-end-line="492" selection-end-column="181" /> + <folding> + <element signature="e#11390#11416#0" /> + <element signature="e#18917#18937#0" /> + <element signature="e#19186#19204#0" /> + </folding> + </first_editor> + <second_editor /> + </state> + </provider> + </entry> + </component> +</project> \ No newline at end of file diff --git a/For_developers/Sphinx/source/Developers/gen_docu.rst b/For_developers/Sphinx/source/Developers/gen_docu.rst new file mode 100644 index 0000000000000000000000000000000000000000..77a2b8f769a20fff640f685ec606ef60c545236a --- /dev/null +++ b/For_developers/Sphinx/source/Developers/gen_docu.rst @@ -0,0 +1,62 @@ +******************** +Update Documentation +******************** + +UNDER CONSTRUCTION + +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 + +#- pip install sphinx-fortran + + + +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. + + +Sequence diagramms +------------------ + +You might need to adapt the fonts path for the diagrams to a true type font. Currently it is set to: + +.. code-block:: bash + + # Fontpath for seqdiag (truetype font) + seqdiag_fontpath = '/usr/share/fonts/dejavu/DejaVuSerif.ttf' + + +Block diagramms +------------------ + +You might need to adapt the fonts path for the diagrams to a true type font. Currently it is set to: + +.. code-block:: bash + + # Fontpath for blockdiag (truetype font) + blockdiag_fontpath = '/usr/share/fonts/dejavu/DejaVuSerif.ttf' + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Documentation/Api/api_fortran.rst b/For_developers/Sphinx/source/Documentation/Api/api_fortran.rst new file mode 100644 index 0000000000000000000000000000000000000000..1bb81d5baf120630908ebec4a5bac9a6f4c624e2 --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/Api/api_fortran.rst @@ -0,0 +1,26 @@ +************************************** +Fortran's Auto Generated Documentation +************************************** + +.. contents:: + :local: + + + +Link to other documentation! + + + + +.... f:autoprogram:: preconvert + + + + +.. toctree:: + :hidden: + :maxdepth: 2 + + + + diff --git a/For_developers/Sphinx/source/Documentation/Api/api_python.rst b/For_developers/Sphinx/source/Documentation/Api/api_python.rst new file mode 100644 index 0000000000000000000000000000000000000000..724892ec33987c1c962692b2f10896a6a6641cc1 --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/Api/api_python.rst @@ -0,0 +1,96 @@ +************************************* +Python's Auto Generated Documentation +************************************* + +.. contents:: + :local: + +Programs +======== + +install +------- + +.. automodule:: install + :members: + +submit +------ + +.. automodule:: submit + :members: + +Classes +======= + +ControlFile +----------- + +.. automodule:: ControlFile + :members: + +EcFlexpart +---------- + +.. automodule:: EcFlexpart + :members: + +GribUtil +-------- + +.. automodule:: GribUtil + :members: + +MarsRetrieval +------------- + +.. automodule:: MarsRetrieval + :members: + +UioFiles +-------- + +.. automodule:: UioFiles + :members: + + + +Modules +======= + +get_mars_data +------------- + +.. automodule:: get_mars_data + :members: + +prepare_flexpart +---------------- + +.. automodule:: prepare_flexpart + :members: + +tools +----- + +.. automodule:: tools + :members: + +checks +------ + +.. automodule:: checks + :members: + + +disaggregation +-------------- + +.. automodule:: disaggregation + :members: + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Documentation/Input/changes.rst b/For_developers/Sphinx/source/Documentation/Input/changes.rst new file mode 100644 index 0000000000000000000000000000000000000000..4f11b051c9cd9d394a88fc99a7e2e9dddc768a8e --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/Input/changes.rst @@ -0,0 +1,18 @@ +********************** +CONTROL file changes +********************** + +Changes from version 7.0.4 to version 7.1 + - removed ``M_`` (but is still available for downward compatibility) + - grid resolution not in 1/1000 degress anymore (but is still available for downward compatibility) + - comments available with ``#`` + - only parameters which are needed to override the default values are necessary + - number of type/step/time elements do not have to be 24 any more. Just select the interval you need. + - the ``dtime`` parameter needs to be consistent with ``type/step/time``. For example ``dtime`` can be coarser as ``time`` intervals are available, but not finer. + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Documentation/Input/compilejob.rst b/For_developers/Sphinx/source/Documentation/Input/compilejob.rst new file mode 100644 index 0000000000000000000000000000000000000000..2f5aec46671804b89d2a856c481bd4fd70cd9bad --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/Input/compilejob.rst @@ -0,0 +1,116 @@ +******************************************** +The Compilation Jobscript ``compilejob.ksh`` +******************************************** + +The compilejob is a Korn-shell script which will be created during the installation process for the application modes **remote** and **gateway** from a template called ``compilejob.template`` in the template directory. + +``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. +These individual parameters are marked by a doubled ``$`` sign in ``job.temp``. + +The jobscript has a number of settings for the batch system which are fixed and differentiates between the *ecgate* and the *cca/ccb* +server system to load the necessary modules for the environment when submitted to the batch queue. + +The submission is done by the ``ECaccess`` tool from within ``flex_extract`` with the command ``ecaccess-job-submit``. + + + +What does the compilation script do? +------------------------------------ + + #. It sets necessary batch system parameters + #. It prepares the job environment at the ECMWF servers by loading the necessary library modules + #. It sets some environment variabels for the single session + #. It creates the ``flex_extract`` root directory in the ``$HOME`` path of the user + #. It untars the tar-ball into the root directory. + #. It compiles the Fortran programs's ``Makefile``. + #. At the end it checks if the script returned an error or not and send the log file via email to the user. + + + + + +Example ``compilejob.ksh`` +-------------------------- + +.. code-block:: bash + + + #!/bin/ksh + + # ON ECGB: + # start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server + # start with sbatch NAME_OF_THIS_FILE directly on machine + + #SBATCH --workdir=/scratch/ms/at/km4a + #SBATCH --qos=normal + #SBATCH --job-name=flex_ecmwf + #SBATCH --output=flex_ecmwf.%j.out + #SBATCH --error=flex_ecmwf.%j.out + #SBATCH --mail-type=FAIL + #SBATCH --time=12:00:00 + + ## CRAY specific batch requests + ##PBS -N flex_ecmwf + ##PBS -q ns + ##PBS -S /usr/bin/ksh + ##PBS -o /scratch/ms/at/km4a/flex_ecmwf.${Jobname}.${Job_ID}.out + # job output is in .ecaccess_DO_NOT_REMOVE + ##PBS -j oe + ##PBS -V + ##PBS -l EC_threads_per_task=1 + ##PBS -l EC_memory_per_task=3200MB + + set -x + export VERSION=7.1 + case ${HOST} in + *ecg*) + module unload grib_api + module unload eccodes + module unload python + module unload emos + module load python3 + module load eccodes/2.12.0 + module load emos/455-r64 + export FLEXPART_ROOT_SCRIPTS=${HOME} + export MAKEFILE=Makefile.gfortran + ;; + *cca*) + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + module load eccodes/2.12.0 + module load emos + echo ${GROUP} + echo ${HOME} + echo ${HOME} | awk -F / '{print $1, $2, $3, $4}' + export GROUP=`echo ${HOME} | awk -F / '{print $4}'` + export SCRATCH=/scratch/ms/${GROUP}/${USER} + export FLEXPART_ROOT_SCRIPTS=${HOME} + export MAKEFILE=Makefile.gfortran + ;; + 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 + make -f ${MAKEFILE} >flexcompile 2>flexcompile + + ls -l CONVERT2 >>flexcompile + if [ $? -eq 0 ]; then + echo 'SUCCESS!' >>flexcompile + mail -s flexcompile.${HOST}.$$ ${USER} <flexcompile + else + echo Environment: >>flexcompile + env >> flexcompile + mail -s "ERROR! flexcompile.${HOST}.$$" ${USER} <flexcompile + fi + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Documentation/Input/control.rst b/For_developers/Sphinx/source/Documentation/Input/control.rst new file mode 100644 index 0000000000000000000000000000000000000000..cb9e500e744e6774e4d4a01b6d7691d3e32bf849 --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/Input/control.rst @@ -0,0 +1,62 @@ +================ +The CONTROL file +================ + + + +.. MARS user documentation https://confluence.ecmwf.int/display/UDOC/MARS+user+documentation +.. MARS keywords and explanation https://confluence.ecmwf.int/display/UDOC/MARS+keywords + + +This file is an input file for :literal:`flex_extract's` main script :literal:`submit.py`. +It contains the controlling parameters :literal:`flex_extract` needs to decide on dataset specifications, +handling of the retrieved data and general bahaviour. The naming convention is usually (but not necessary): + + :literal:`CONTROL_<Dataset>[.optionalIndications]` + +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 *public users* +and *global* domain. For the operational datasets (*OD*) the file names contain also information of +the stream, the field type for forecasts, the method for extracting the vertical coordinate and other things like time or horizontal resolution. + + +Format of CONTROL files +---------------------------------- +The first string of each line is the parameter name, the following string(s) (separated by spaces) is (are) the parameter values. +The parameters can be sorted in any order with one parameter per line. +Comments are started with a '#' - sign. Some of these parameters can be overruled by the command line +parameters given to the :literal:`submit.py` script. +All parameters have default values. Only those parameters which have to be changed +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/`. +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. + + + + +CONTROL file +------------ +The file :literal:`CONTROL.documentation` documents the available parameters +in grouped sections with their default values. In :doc:`control_params` you can find a more +detailed description with additional hints, possible values and some useful information about +the setting of these parameters. + +.. literalinclude:: ../../../../../Run/Control/CONTROL.documentation + :language: bash + :caption: CONTROL.documentation + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 + diff --git a/For_developers/Sphinx/source/Documentation/Input/control_params.rst b/For_developers/Sphinx/source/Documentation/Input/control_params.rst new file mode 100644 index 0000000000000000000000000000000000000000..a1ed5b238253b9f2be9c535d0e5b842eb400cdc4 --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/Input/control_params.rst @@ -0,0 +1,113 @@ +====================== +The CONTROL parameters +====================== + + + +.. _ref-control-user: + +User Section +************ + +.. exceltable:: User parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: UserSection + :header: 1 + +.. _ref-control-general: + +General Section +*************** + +.. exceltable:: General parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: GeneralSection + :header: 1 + +.. _ref-control-time: + +Time Section +************ + +.. exceltable:: Time parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: TimeSection + :header: 1 + + +.. _ref-control-data: + +Data Section +************ + +.. exceltable:: Data parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: DataSection + :header: 1 + + +.. _ref-control-datafield: + +Data field Section +****************** + +.. exceltable:: Data field parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: DatafieldsSection + :header: 1 + + +.. _ref-control-fluxdata: + +Flux data Section +***************** + +.. exceltable:: Flux data parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: FluxDataSection + :header: 1 + + +.. _ref-control-domain: + +Domain Section +************** + +.. exceltable:: Domain parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: DomainSection + :header: 1 + :widths: 10,10,10,5,20,20 + + + +.. _ref-control-verticalwind: + +Vertical wind Section +********************* + +.. exceltable:: Vertical wind parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: VerticalWindSection + :header: 1 + + +.. _ref-control-adddata: + +Additional data Section +*********************** + +.. exceltable:: Additional data parameter in CONTROL file + :file: ../../_files/CONTROLparameter.xls + :sheet: AddDataSection + :header: 1 + + + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Documentation/Input/ecmwf_env.rst b/For_developers/Sphinx/source/Documentation/Input/ecmwf_env.rst new file mode 100644 index 0000000000000000000000000000000000000000..a3232e2c5b7ac760975aba87152fede088e921c5 --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/Input/ecmwf_env.rst @@ -0,0 +1,31 @@ +**************************************** +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 is based on the template ``ECMWF_ENV.template`` which is located in the ``templates`` directory. + +.. note:: + + In the **local** mode it is not present. + + + +Content of ``ECMWF_ENV`` +------------------------ + +The following shows an example of the content of an ``ECMWF_ENV`` file: + +.. code-block:: bash + + ECUID user_name + ECGID user_group + GATEWAY gateway_name + DESTINATION destination_name + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Documentation/Input/examples.rst b/For_developers/Sphinx/source/Documentation/Input/examples.rst new file mode 100644 index 0000000000000000000000000000000000000000..839b648c1abb72d8f4cea83291faeba1c05a30da --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/Input/examples.rst @@ -0,0 +1,39 @@ +********************** +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``. + +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 + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Documentation/Input/fortran_makefile.rst b/For_developers/Sphinx/source/Documentation/Input/fortran_makefile.rst new file mode 100644 index 0000000000000000000000000000000000000000..894655341eca5b4430f6d3f6ac267a060aae95bc --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/Input/fortran_makefile.rst @@ -0,0 +1,41 @@ +*********************************** +The Fortran Makefile - ``CONVERT2`` +*********************************** + +.. _ref-convert: + +``Flex_extract``'s Fortran program will be compiled during +the installation process to get the executable named ``CONVERT2``. + +``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** + | For the use on ECMWF's server **ecgate**. + + | **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.local.ifort** + | For the use with ifort compiler. + + +For instructions on how to adapt the ``Makefiles`` for the local application mode +please see :ref:`ref-install-local`. + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Documentation/Input/jobscript.rst b/For_developers/Sphinx/source/Documentation/Input/jobscript.rst new file mode 100644 index 0000000000000000000000000000000000000000..275295f59ce8bce13f60b41f36dbf17b2f128746 --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/Input/jobscript.rst @@ -0,0 +1,194 @@ +************************* +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. + +``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. +These individual parameters are marked by a doubled ``$`` sign in ``job.temp``. + +The jobscript has a number of settings for the batch system which are fixed and differentiates between the *ecgate* and the *cca/ccb* +server system to load the necessary modules for the environment when submitted to the batch queue. + +The submission is done by the ``ECaccess`` tool from within ``flex_extract`` with the command ``ecaccess-job-submit``. + + + +What does the jobscript do? +--------------------------- + + #. It sets necessary batch system parameters + #. It prepares the job environment at the ECMWF servers by loading the necessary library modules + #. It sets some environment variabels for the single session + #. It creates the directory structure in the users ``$SCRATCH`` file system + #. It creates a CONTROL file on the ECMWF servers whith the parameters set before creating the ``jobscript.ksh``. ``Flex_extract`` has a set of parameters which are given to the jobscript with its default or the user defined values. It also sets the ``CONTROL`` as an environment variable. + #. ``Flex_extract`` is started from within the ``work`` directory of the new directory structure by calling the ``submit.py`` script. It sets new pathes for input and output directory and the recently generated ``CONTROL`` file. + #. At the end it checks if the script returned an error or not and send the log file via email to the user. + + + + +Example ``jobscript.ksh`` +------------------------- + +.. code-block:: bash + + #!/bin/ksh + + # ON ECGB: + # start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server + # start with sbatch NAME_OF_THIS_FILE directly on machine + + #SBATCH --workdir=/scratch/ms/at/km4a + #SBATCH --qos=normal + #SBATCH --job-name=flex_ecmwf + #SBATCH --output=flex_ecmwf.%j.out + #SBATCH --error=flex_ecmwf.%j.out + #SBATCH --mail-type=FAIL + #SBATCH --time=12:00:00 + + ## CRAY specific batch requests + ##PBS -N flex_ecmwf + ##PBS -q np + ##PBS -S /usr/bin/ksh + ## -o /scratch/ms/at/km4a/flex_ecmwf.${PBS_JOBID}.out + ## job output is in .ecaccess_DO_NOT_REMOVE + ##PBS -j oe + ##PBS -V + ##PBS -l EC_threads_per_task=24 + ##PBS -l EC_memory_per_task=32000MB + + set -x + export VERSION=7.1 + case ${HOST} in + *ecg*) + module unload grib_api + module unload eccodes + module unload python + module unload emos + module load python3 + module load eccodes/2.12.0 + module load emos/455-r64 + export PATH=${PATH}:${HOME}/flex_extract_v7.1/source/python + ;; + *cca*) + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + module load eccodes/2.12.0 + module load emos + export SCRATCH=${TMPDIR} + export PATH=${PATH}:${HOME}/flex_extract_v7.1/source/python + ;; + esac + + cd ${SCRATCH} + mkdir -p python$$ + cd python$$ + + export CONTROL=CONTROL + + cat >${CONTROL}<<EOF + accmaxstep 24 + acctime 18 + acctype FC + accuracy 24 + addpar None + area 74.0/-24.0/10.0/60.0 + basetime None + cds_api None + controlfile CONTROL_CERA + cwc 1 + dataset None + date_chunk 3 + debug 1 + destination annep@genericSftp + doubleelda 0 + dpdeta 1 + dtime 3 + ec_api None + ecfsdir ectmp:/${USER}/econdemand/ + ecgid at + ecstorage 0 + ectrans 1 + ecuid km4a + end_date 20000809 + eta 1 + etadiff 0 + etapar 77 + expver 1 + format GRIB1 + gateway srvx8.img.univie.ac.at + gauss 0 + gaussian + grib2flexpart 0 + grid 1.0/1.0 + inputdir /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/run/workspace + install_target None + job_chunk 1 + job_template job.temp + left -24. + level 91 + levelist 1/to/91 + logicals gauss omega omegadiff eta etadiff dpdeta cwc wrf grib2flexpart ecstorage ectrans debug oper request public purefc rrint doubleelda + lower 10. + mailfail ${USER} + mailops ${USER} + makefile Makefile.gfortran + marsclass EP + maxstep 0 + number 000 + omega 0 + omegadiff 0 + oper 0 + outputdir /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/run/workspace + prefix CE + public 0 + purefc 0 + queue ecgate + request 2 + resol 159 + right 60. + rrint 0 + smooth 0 + start_date 20000809 + step 00 00 00 00 00 00 00 00 + stream ENDA + time 00 03 06 09 12 15 18 21 + type AN AN AN AN AN AN AN AN + upper 74. + wrf 0 + + EOF + + + submit.py --controlfile=${CONTROL} --inputdir=./work --outputdir=./work 1> prot 2>&1 + + if [ $? -eq 0 ] ; then + l=0 + for muser in `grep -i MAILOPS ${CONTROL}`; do + if [ ${l} -gt 0 ] ; then + mail -s flex.${HOST}.$$ ${muser} <prot + fi + l=$((${l}+1)) + done + else + l=0 + for muser in `grep -i MAILFAIL ${CONTROL}`; do + if [ ${l} -gt 0 ] ; then + mail -s "ERROR! flex.${HOST}.$$" ${muser} <prot + fi + l=$((${l}+1)) + done + fi + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Documentation/Input/run.rst b/For_developers/Sphinx/source/Documentation/Input/run.rst new file mode 100644 index 0000000000000000000000000000000000000000..41d766d0a0f658ef68ae6e468d31e1939012ac4f --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/Input/run.rst @@ -0,0 +1,117 @@ +********************************** +The executable Script - ``run.sh`` +********************************** + +The execution of ``flex_extract`` is done by the ``run.sh`` Shell script, which is a wrapping script for the top-level Python script ``submit.py``. +The Python script constitutes the entry point to ECMWF data retrievals with ``flex_extract`` and controls the program flow. + +``submit.py`` has two (three) sources for input parameters with information about program flow and ECMWF data selection, the so-called ``CONTROL`` file, +the command line parameters and the so-called ``ECMWF_ENV`` file. Whereby, the command line parameters will override the ``CONTROL`` file parameters. + +Based on these input information ``flex_extract`` 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. + + + +PUT IN HERE A BLOCKDIAGRAM OF RAW PROGRAM FLOW + + + +Submission Parameter +-------------------- + + +.. exceltable:: Parameter for Submission + :file: ../../_files/SubmitParameters.xls + :header: 1 + :sheet: 0 + + + + +Content of ``run.sh`` +--------------------- + +.. literalinclude:: ../../../../../Run/run.sh + :language: bash + :caption: run.sh + + +.. _ref-install-script: + +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 +command line parameter. + +.. code-block:: bash + + submit.py --help + + usage: submit.py [-h] [--start_date START_DATE] [--end_date END_DATE] + [--date_chunk DATE_CHUNK] [--job_chunk JOB_CHUNK] + [--controlfile CONTROLFILE] [--basetime BASETIME] + [--step STEP] [--levelist LEVELIST] [--area AREA] + [--debug DEBUG] [--oper OPER] [--request REQUEST] + [--public PUBLIC] [--rrint RRINT] [--inputdir INPUTDIR] + [--outputdir OUTPUTDIR] [--ppid PPID] + [--job_template JOB_TEMPLATE] [--queue QUEUE] + + Retrieve FLEXPART input from ECMWF MARS archive + + optional arguments: + -h, --help show this help message and exit + --start_date START_DATE + start date YYYYMMDD (default: None) + --end_date END_DATE end_date YYYYMMDD (default: None) + --date_chunk DATE_CHUNK + # of days to be retrieved at once (default: None) + --job_chunk JOB_CHUNK + # of days to be retrieved within a single job + (default: None) + --controlfile CONTROLFILE + The file with all CONTROL parameters. (default: + CONTROL_EA5) + --basetime BASETIME base such as 0 or 12 (for half day retrievals) + (default: None) + --step STEP Forecast steps such as 00/to/48 (default: None) + --levelist LEVELIST Vertical levels to be retrieved, e.g. 30/to/60 + (default: None) + --area AREA area defined as north/west/south/east (default: None) + --debug DEBUG debug mode - leave temporary files intact (default: + None) + --oper OPER operational mode - prepares dates with environment + variables (default: None) + --request REQUEST list all mars requests in file mars_requests.dat + (default: None) + --public PUBLIC public mode - retrieves the public datasets (default: + None) + --rrint RRINT Selection of old or new precipitation interpolation: 0 + - old method 1 - new method (additional subgrid + points) (default: None) + --inputdir INPUTDIR Path to the temporary directory for the retrieval grib + files and other processing files. (default: None) + --outputdir OUTPUTDIR + Path to the final directory where the final FLEXPART + ready input files are stored. (default: None) + --ppid PPID 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. (default: None) + --job_template JOB_TEMPLATE + The job template file which are adapted to be + submitted to the batch system on ECMWF server. + (default: job.temp) + --queue QUEUE The ECMWF server name for submission of the job script + to the batch system (e.g. ecgate | cca | ccb) + (default: None) + + + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Documentation/Input/setup.rst b/For_developers/Sphinx/source/Documentation/Input/setup.rst new file mode 100644 index 0000000000000000000000000000000000000000..7999511d03817b2fb0b05cf4e98b7b86d8f2b84a --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/Input/setup.rst @@ -0,0 +1,202 @@ +************************************** +The Installation Script - ``setup.sh`` +************************************** + + +The installation of ``flex_extract`` is done by the Shell script ``setup.sh`` which is located in the root directory of ``flex_extract``. +It calls the top-level Python script ``install.py`` which does all necessary operations to prepare the selected application environment. This includes: + +- preparing the file ``ECMWF_ENV`` with the user credentials for member state access to ECMWF servers (in **remote** and **gateway** mode) +- preparation of a compilation Korn-shell script (in **remote** and **gateway** mode) +- preparation of a job template with user credentials (in **remote** and **gateway** mode) +- 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`` + + +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. + +After the installation process, some tests can be conducted. They are described in section :ref:`ref-testinstallfe`. + +The following diagram sketches the involved files and scripts in the installation process: + +.. _ref-install-blockdiag: + +.. blockdiag:: + + blockdiag { + + default_fontsize = 24; + + // Set node metrix + node_width = 300; // default is 128 + + // Set span metrix + span_width = 80; // default value is 64 + + ECMWF_ENV.template [shape = flowchart.input]; + compilejob.template [shape = flowchart.input]; + job.template [shape = flowchart.input]; + + compilejob.ksh [shape = roundedbox]; + // tarball + // ECMWF_ENV + // job.temp + + "CONTROL file" [shape = flowchart.input]; + + setup.sh [shape = roundedbox]; + install.py [shape = roundedbox]; + + "ECMWF server" [shape = flowchart.terminator]; + + //beginpoint [shape = beginpoint]; + + orientation = landscape; + + //beginpoint -> setup.sh; + setup.sh -> install.py; + + install.py <- "CONTROL file"; + + install.py -> ECMWF_ENV, job.temp, compilejob.ksh, tarball; + + ECMWF_ENV.template, job.template, compilejob.template -> install.py; + + tarball, compilejob.ksh -> "ECMWF server"; + + + group exec { + // set backgound color + color = "#FF6633"; + + orientation = portrait; + setup.sh; + install.py; + } + + group out { + color = "#FFFFFF"; + group output { + color = "#99FF99"; + ECMWF_ENV; + job.temp; + compilejob.ksh; + } + + group ECMWF { + color = "#006600"; + tarball; + + } + } + + group input { + + color = "#FFFFFF"; + + group temps { + color = "#66CCFF"; + + ECMWF_ENV.template; + job.template; + compilejob.template; + } + + group in { + color = "#3366FF"; + "CONTROL file"; + } + } + + } + + +.. blockdiag:: + :caption: 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. + + blockdiag { + + group{ + orientation = portrait; + label = "Legend"; + fontsize = 28; + color = "#FFFFFF"; + 'executable scripts' [shape = roundedbox]; + 'input files' [shape = flowchart.input]; + 'output files'; + server [shape = flowchart.terminator]; + } + } + +.. _ref-instparams: + +Installation Parameter +---------------------- + +.. exceltable:: Parameter for Installation + :file: ../../_files/InstallationParameter.xls + :header: 1 + + + +Content of ``setup.sh`` +----------------------- + +.. literalinclude:: ../../../../../setup.sh + :language: bash + :caption: setup.sh + + +.. _ref-install-script: + +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 +command line parameter. + +.. code-block:: bash + + install.py --help + + usage: install.py [-h] [--target INSTALL_TARGET] [--makefile MAKEFILE] + [--ecuid ECUID] [--ecgid ECGID] [--gateway GATEWAY] + [--destination DESTINATION] [--installdir INSTALLDIR] + [--job_template JOB_TEMPLATE] [--controlfile CONTROLFILE] + + Install flex_extract software locally or on ECMWF machines + + optional arguments: + -h, --help show this help message and exit + --target INSTALL_TARGET + Valid targets: local | ecgate | cca , the latter two + are at ECMWF (default: None) + --makefile MAKEFILE Name of Makefile to use for compiling the Fortran + program (default: None) + --ecuid ECUID The user id at ECMWF. (default: None) + --ecgid ECGID The group id at ECMWF. (default: None) + --gateway GATEWAY The name of the local gateway server. (default: None) + --destination DESTINATION + The ecaccess association, e.g. myUser@genericSftp + (default: None) + --installdir INSTALLDIR + Root directory where flex_extract will be installed + to. (default: None) + --job_template JOB_TEMPLATE + The rudimentary template file to create a batch job + template for submission to ECMWF servers. (default: + job.template) + --controlfile CONTROLFILE + The file with all CONTROL parameters. (default: + CONTROL_EA5) + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Documentation/Input/templates.rst b/For_developers/Sphinx/source/Documentation/Input/templates.rst new file mode 100644 index 0000000000000000000000000000000000000000..137b36ca9696fc2d0ffdabc029c194c650168cb2 --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/Input/templates.rst @@ -0,0 +1,346 @@ +********* +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. + +.. note:: + Usually it is not recommended to change anything in these files without being able to understand the effects. + +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 ``$`` sign. In case of the Kornshell job scripts, where (environment) variables are used the ``$`` sign needs to be doubled to `escape` and keep a single ``$`` sign as it is. + +The following templates are used and can be found in directory ``flex_extract_vX.X/Templates``: + +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. + + .. code-block:: fortran + + &NAMGEN + maxl = $maxl, + maxb = $maxb, + mlevel = $mlevel, + mlevelist = "$mlevelist", + mnauf = $mnauf, + metapar = $metapar, + rlo0 = $rlo0, + rlo1 = $rlo1, + rla0 = $rla0, + rla1 = $rla1, + momega = $momega, + momegadiff = $momegadiff, + mgauss = $mgauss, + msmooth = $msmooth, + meta = $meta, + metadiff = $metadiff, + mdpdeta = $mdpdeta + / + +ecmwf_env.template +------------------ + + This template is used to create the ``ECMWF_ENV`` file in the application modes **gateway** and **remote**. It contains the user credentials and gateway server settings for the file transfers. + + .. code-block:: bash + + ECUID $user_name + ECGID $user_group + GATEWAY $gateway_name + DESTINATION $destination_name + +compilejob.template +------------------- + + This template is used to create the job script file called ``compilejob.ksh`` during the installation process for the application modes **remote** and **gateway**. + + At the beginning some directives for the batch system are set. + On the **ecgate** server the ``SBATCH`` comments are the directives for the SLURM workload manager. A description of the single lines can be found at `SLURM directives <https://confluence.ecmwf.int/display/UDOC/Writing+SLURM+jobs>`_. + For the high performance computers **cca** and **ccb** the ``PBS`` comments are necessary and can be view at `PBS directives <https://confluence.ecmwf.int/display/UDOC/Batch+environment%3A++PBS>`_. + + The software environment requirements mentioned in :ref:`ref-requirements` are prepared by loading the corresponding modules depending in the ``HOST``. It should not be changed without testing. + + Afterwards the installation steps as such are done. Including the generation of the root directory, putting files in place, compiling the Fortran program and sending a log file via email. + + .. code-block:: ksh + + #!/bin/ksh + + # ON ECGB: + # start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server + # start with sbatch NAME_OF_THIS_FILE directly on machine + + #SBATCH --workdir=/scratch/ms/$usergroup/$username + #SBATCH --qos=normal + #SBATCH --job-name=flex_ecmwf + #SBATCH --output=flex_ecmwf.%j.out + #SBATCH --error=flex_ecmwf.%j.out + #SBATCH --mail-type=FAIL + #SBATCH --time=12:00:00 + + ## CRAY specific batch requests + ##PBS -N flex_ecmwf + ##PBS -q ns + ##PBS -S /usr/bin/ksh + ##PBS -o /scratch/ms/$usergroup/$username/flex_ecmwf.$${Jobname}.$${Job_ID}.out + # job output is in .ecaccess_DO_NOT_REMOVE + ##PBS -j oe + ##PBS -V + ##PBS -l EC_threads_per_task=1 + ##PBS -l EC_memory_per_task=3200MB + + set -x + export VERSION=$version_number + case $${HOST} in + *ecg*) + module unload grib_api + module unload eccodes + module unload python + module unload emos + module load python3 + module load eccodes/2.12.0 + module load emos/455-r64 + export FLEXPART_ROOT_SCRIPTS=$fp_root_scripts + export MAKEFILE=$makefile + ;; + *cca*) + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + module load eccodes/2.12.0 + module load emos + echo $${GROUP} + echo $${HOME} + echo $${HOME} | awk -F / '{print $1, $2, $3, $4}' + export GROUP=`echo $${HOME} | awk -F / '{print $4}'` + export SCRATCH=/scratch/ms/$${GROUP}/$${USER} + export FLEXPART_ROOT_SCRIPTS=$fp_root_scripts + export MAKEFILE=$makefile + ;; + 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 $fortran_program + make -f $${MAKEFILE} >flexcompile 2>flexcompile + + ls -l $fortran_program >>flexcompile + if [ $$? -eq 0 ]; then + echo 'SUCCESS!' >>flexcompile + mail -s flexcompile.$${HOST}.$$$$ $${USER} <flexcompile + else + echo Environment: >>flexcompile + env >> flexcompile + mail -s "ERROR! flexcompile.$${HOST}.$$$$" $${USER} <flexcompile + fi + + +job.temp +-------- + + This template is used to create the actual job script file called ``job.ksh`` for the execution of ``flex_extract`` in the application modes **remote** and **gateway**. + + At the beginning some directives for the batch system are set. + On the **ecgate** server the ``SBATCH`` comments are the directives for the SLURM workload manager. A description of the single lines can be found at `SLURM directives <https://confluence.ecmwf.int/display/UDOC/Writing+SLURM+jobs>`_. + For the high performance computers **cca** and **ccb** the ``PBS`` comments are necessary and can be view at `PBS directives <https://confluence.ecmwf.int/display/UDOC/Batch+environment%3A++PBS>`_. + + The software environment requirements mentioned in :ref:`ref-requirements` are prepared by loading the corresponding modules depending in the ``HOST``. It should not be changed without testing. + + Afterwards the run directory and the ``CONTROL`` file are created and ``flex_extract`` is executed. In the end a log file is send via email. + + .. code-block:: ksh + + #!/bin/ksh + + # ON ECGB: + # start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server + # start with sbatch NAME_OF_THIS_FILE directly on machine + + #SBATCH --workdir=/scratch/ms/at/km4a + #SBATCH --qos=normal + #SBATCH --job-name=flex_ecmwf + #SBATCH --output=flex_ecmwf.%j.out + #SBATCH --error=flex_ecmwf.%j.out + #SBATCH --mail-type=FAIL + #SBATCH --time=12:00:00 + + ## CRAY specific batch requests + ##PBS -N flex_ecmwf + ##PBS -q np + ##PBS -S /usr/bin/ksh + ## -o /scratch/ms/at/km4a/flex_ecmwf.$${PBS_JOBID}.out + ## job output is in .ecaccess_DO_NOT_REMOVE + ##PBS -j oe + ##PBS -V + ##PBS -l EC_threads_per_task=24 + ##PBS -l EC_memory_per_task=32000MB + + set -x + export VERSION=7.1 + case $${HOST} in + *ecg*) + module unload grib_api + module unload eccodes + module unload python + module unload emos + module load python3 + module load eccodes/2.12.0 + module load emos/455-r64 + export PATH=$${PATH}:$${HOME}/flex_extract_v7.1/source/python + ;; + *cca*) + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + module load eccodes/2.12.0 + module load emos + export SCRATCH=$${TMPDIR} + export PATH=$${PATH}:$${HOME}/flex_extract_v7.1/source/python + ;; + esac + + cd $${SCRATCH} + mkdir -p python$$$$ + cd python$$$$ + + export CONTROL=CONTROL + + cat >$${CONTROL}<<EOF + $control_content + EOF + + + submit.py --controlfile=$${CONTROL} --inputdir=./work --outputdir=./work 1> prot 2>&1 + + if [ $? -eq 0 ] ; then + l=0 + for muser in `grep -i MAILOPS $${CONTROL}`; do + if [ $${l} -gt 0 ] ; then + mail -s flex.$${HOST}.$$$$ $${muser} <prot + fi + l=$(($${l}+1)) + done + else + l=0 + for muser in `grep -i MAILFAIL $${CONTROL}`; do + if [ $${l} -gt 0 ] ; then + mail -s "ERROR! flex.$${HOST}.$$$$" $${muser} <prot + fi + l=$(($${l}+1)) + done + fi + + +job.template +------------ + + This template is used to create the template for the execution job script ``job.temp`` for ``flex_extract`` in the installation process. A description of the file can be found under ``job.temp``. A couple of parameters are set in this process, such as the user credentials and the ``flex_extract`` version number. + + .. code-block:: ksh + + #!/bin/ksh + + # ON ECGB: + # start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server + # start with sbatch NAME_OF_THIS_FILE directly on machine + + #SBATCH --workdir=/scratch/ms/$usergroup/$username + #SBATCH --qos=normal + #SBATCH --job-name=flex_ecmwf + #SBATCH --output=flex_ecmwf.%j.out + #SBATCH --error=flex_ecmwf.%j.out + #SBATCH --mail-type=FAIL + #SBATCH --time=12:00:00 + + ## CRAY specific batch requests + ##PBS -N flex_ecmwf + ##PBS -q np + ##PBS -S /usr/bin/ksh + ## -o /scratch/ms/$usergroup/$username/flex_ecmwf.$$$${PBS_JOBID}.out + ## job output is in .ecaccess_DO_NOT_REMOVE + ##PBS -j oe + ##PBS -V + ##PBS -l EC_threads_per_task=24 + ##PBS -l EC_memory_per_task=32000MB + + set -x + export VERSION=$version_number + case $$$${HOST} in + *ecg*) + module unload grib_api + module unload eccodes + module unload python + module unload emos + module load python3 + module load eccodes/2.12.0 + module load emos/455-r64 + export PATH=$$$${PATH}:$fp_root_path + ;; + *cca*) + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + module load eccodes/2.12.0 + module load emos + export SCRATCH=$$$${TMPDIR} + export PATH=$$$${PATH}:$fp_root_path + ;; + esac + + cd $$$${SCRATCH} + mkdir -p python$$$$$$$$ + cd python$$$$$$$$ + + export CONTROL=CONTROL + + cat >$$$${CONTROL}<<EOF + $$control_content + EOF + + + submit.py --controlfile=$$$${CONTROL} --inputdir=./work --outputdir=./work 1> prot 2>&1 + + if [ $? -eq 0 ] ; then + l=0 + for muser in `grep -i MAILOPS $$$${CONTROL}`; do + if [ $$$${l} -gt 0 ] ; then + mail -s flex.$$$${HOST}.$$$$$$$$ $$$${muser} <prot + fi + l=$(($$$${l}+1)) + done + else + l=0 + for muser in `grep -i MAILFAIL $$$${CONTROL}`; do + if [ $$$${l} -gt 0 ] ; then + mail -s "ERROR! flex.$$$${HOST}.$$$$$$$$" $$$${muser} <prot + fi + l=$(($$$${l}+1)) + done + fi + + + + + + + + + + + + + + + + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Documentation/Overview/app_modes.rst b/For_developers/Sphinx/source/Documentation/Overview/app_modes.rst new file mode 100644 index 0000000000000000000000000000000000000000..909cb94456e5251e6e1585831b830943926f6a22 --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/Overview/app_modes.rst @@ -0,0 +1,47 @@ +***************** +Application Modes +***************** + +.. role:: underline + :class: underline + +.. _member state: https://www.ecmwf.int/en/about/who-we-are/member-states +.. _instructions: https://apps.ecmwf.int/registration/ + + +.. _ref-app-modes: + +Arising from the two user groups described in :doc:`../../Ecmwf/access`, ``flex_extract`` has 4 different :underline:`user application modes`: + +.. _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``. + +.. _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`. + +.. _ref-local-desc: + + 3. Local member + Scripts are installed and executed on a local machine, either in the current ``flex_extract`` 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 :ref:`ref-local-mode`. + + 4. Local public + Scripts are installed and executed on a local machine, either in the current ``flex_extract`` 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 :ref:`ref-local-mode`. 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. + + +An overview is sketched in figure :ref:`ref-fig-marsaccess`. + +.. _ref-fig-marsaccess: + +.. figure:: ../../_static/Diagramm_MarsAccess2.png + + Application modes + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Documentation/Overview/prog_flow.rst b/For_developers/Sphinx/source/Documentation/Overview/prog_flow.rst new file mode 100644 index 0000000000000000000000000000000000000000..21d0bdceae9bb78b9e5585845c25190ed1726d87 --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/Overview/prog_flow.rst @@ -0,0 +1,56 @@ +************ +Program Flow +************ + + + + +General program flow +==================== + + +The following flow diagram shows the general steps performed by ``flex_extract``. + +.. _ref-fig-submit: + +.. figure:: ../../_files/submit.png + + Overview of the call of python's ``submit.py`` script and raw sequence of working steps done in ``flex_extract``. + + +The ``submit.py`` Python program is called by the Shell script ``run.sh`` or ``run_local.sh`` and accomplish the following steps: + + 1. Setup the control data: + It gets all command-line and ``CONTROL`` file parameters as well as optionally the ECMWF user credentials. Depending the :doc:`app_modes`, it might also prepare a job script which is then send to the ECMWF queue. + 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. + + + +Workflows of different application modes +======================================== + +More details on how different the program flow is for the different :doc:`app_modes` is sketched in the following diagrams: + ++-------------------------------------------------+------------------------------------------------+ +| .. figure:: ../../_files/mode_remote.png | .. figure:: ../../_files/mode_gateway.png | ++-------------------------------------------------+------------------------------------------------+ + ++-------------------------------------------------+------------------------------------------------+ +| .. figure:: ../../_files/mode_local_member.png | .. figure:: ../../_files/mode_local_public.png | ++-------------------------------------------------+------------------------------------------------+ + + +Example application setting for a local member user +=================================================== + +.. figure:: ../../_files/ex_runlocal_en.png + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Documentation/api.rst b/For_developers/Sphinx/source/Documentation/api.rst new file mode 100644 index 0000000000000000000000000000000000000000..5c0bff7d88c9354d70df4de575aa4fb853191c2c --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/api.rst @@ -0,0 +1,17 @@ +**************************** +Auto Generated Documentation +**************************** + + +:doc:`Api/api_python` + +:doc:`Api/api_fortran` + + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Api/api_python + Api/api_fortran diff --git a/For_developers/Sphinx/source/Documentation/disagg.rst b/For_developers/Sphinx/source/Documentation/disagg.rst new file mode 100644 index 0000000000000000000000000000000000000000..deb420864c82f618b2142df0a954e4816214136c --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/disagg.rst @@ -0,0 +1,187 @@ +*************************** +Disaggregation of Flux Data +*************************** + +``FLEXPART`` 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 :ref:`ref-table-fluxpar`) 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 ``FLEXPART``'s linear interpolation a pre-processing scheme has to be applied. + +.. _ref-table-fluxpar: + +.. csv-table:: flux fields + :header: "Short Name", "Name", "Units", "Interpolation Type" + :align: center + :widths: 5,15,5,10 + + LSP, "large-scale precipitation", ":math:`m`", "modified linear interpolation" + CP, "convective precipitation", ":math:`m`", "modified linear interpolation" + SSHF, "surface sensible heat flux", ":math:`J m^{-2}`", "bicubic interpolation" + EWSS, "eastward turbulent surface stress", ":math:`N m^{-2} s`", "bicubic interpolation" + NSSS, "northward turbulent surface stress", ":math:`N m^{-2} s`", "bicubic interpolation" + SSR, "surface net solar radiation", ":math:`J m^{-2}`", "bicubic interpolation" + + +The first step is to *de-accumulate* the fields in time so that each value represents an integral in x, y, t space. +Afterwards, a *disaggregation* scheme is applied which means to break down the integral value into point values. +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 ``flex_extract`` and are not communicated to the final ``FLEXPART`` input files. + +The flux disaggregation produces files named ``fluxYYYYMMDDHH``, where ``YYYYMMDDHH`` is the date format. Note, that the first two and last two flux files do not contain any data. + +.. note:: + + Note also that for operational retrievals (``BASETIME`` set to 00 or 12) forecast fluxes are only available until ``BASETIME``, so that no polynomial interpolation is possible in the last two time intervals. This is the reason why setting ``BASETIME`` is not recommended for on demand scripts. + + +Disaggregation for precipitation in older versions +-------------------------------------------------- + +In ``flex_extract`` up to version 5 the disaggregation was done with a Fortran program (FLXACC2). In version 6 this part was converted to Python. + + +In the old versions (below 7.1) a relatively simple method processes the precipitation fields in a way that is consistent with the scheme applied in ``FLEXPART`` for all variables: linear interpolation between times where input fields are available. +At first the accumulated values are divided by the number of hours (i.e., 3 or 6). +The best option for disaggregation, which was realised, is conservation within the interval under consideration plus the two adjacent ones. +Unfortunately, this leads to undesired temporal smoothing of the precipitation time series – maxima are damped and minima are raised. +It is even possible to produce non-zero precipitation in dry intervals bordering a precipitation period as shown in Fig. 1. +This is obviously undesirable as it will affect wet scavenging, a very efficient removal process for many atmospheric trace species. +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 ``FLEXPART`` 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. + + +.. _ref-fig-olddisagg: + +.. figure:: ../_files/old_disagg.png + :figclass: align-center + + 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). + + + +Disaggregation is done for 4 adjacent timespans (:math:`a_0, a_1, a_2, a_3`) which generates a new, disaggregated value which is output at the central point of the 4 adjacent timespans. + +.. math:: + + p_{ac} &= 0.5 * a_1\\ + m &= a_0 + a_2 > 0.\\ + p_{ac}(m) &= a_1(m) * a_2(m) / (a_0(m) + a_2(m))\\ + p_{bd} &= 0.5 * a_2\\ + m &= a_1 + a_3 > 0.\\ + p_{bd}(m) &= a_1(m) * a_2(m) / (a_1(m) + a_3(m))\\ + + +This new point :math:`p` is used for linear interpolation of the complete timeseries afterwards. If one of the 4 original timespans has a value below 0 it is set to 0 prior to the calculation. + +.. math:: + + p = p_{ac} + p_{bd} + + + + + + +Disaggregation for precipitation in version 7.1 +----------------------------------------------- + +Due to the problems with generating precipitation in originally dry (or lower) intervals and the temporal smoothing a new algorithm was developed. The approach is based on a one dimensional piecewise linear function with two additional supporting grid points within each grid cell, dividing the interval into three pieces. It fulfils the desired requirements by preserving the integral precipitation in each time interval, guaranteeing continuity at interval boundaries, and maintaining non-negativity. An additional monotonicity filter helps to gain monotonicity. +The more natural requirements of symmetry, reality, computational efficiency and easy implementation motivates the linear formulation. +These requirements on the reconstruction algorithm imply that time intervals with no precipitation remain unchanged, i.e. the reconstructed values vanish throughout this whole time interval, too. +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. + + +.. _ref-fig-newdisagg: + +.. figure:: ../_files/new_disagg.png + :figclass: align-center + + Fig. 2: Precipitation rate linearly interpolated using a sub-grid with two additional points. Colours as in Fig. 1 (Hittmeir et al. 2018). + + +Figure 3 shows an overview of the new algorithm and its components. + +.. _ref-fig-IA3: + +.. figure:: ../_files/IA3.png + :figclass: align-center + + 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 :math:`f` (dark blue) as the piecewise linear function. The original time interval with fixed grid length :math:`\delta t` is split equidistantly in three subintervals denoted by :math:`I_i^{1,2,3}`, with the slopes in the subintervals as denoted by :math:`k_i^{1,2,3}` . The sub-grid function values :math:`f_i, f_i^{1,2}, f_{i+1}` are marked by red diamonds (Hittmeir et al. 2018). + + +The following lists the equations of the new algorithm. + +.. math:: + + f_i^{(1)}=&\frac32 g_i -\frac{1}{12}f_{i}-\frac{5}{12}f_{i+1} + + f_i^{(2)}=&\frac32 g_i -\frac{5}{12}f_{i}-\frac{1}{12}f_{i+1} + + f_{i+1}=&\min\{3 g_i,3 g_{i+1},\sqrt{g_ig_{i+1}}\} + +.. math:: + + \textbf{if} \quad + \mathrm{sgn}(k_{i}^{(2)})\cdot \mathrm{sgn}(k_{i }^{(3)})&=-1 \quad \wedge \\ + \mathrm{sgn}(k_{i }^{(3)})\cdot \mathrm{sgn}(k_{i+1}^{(1)})&=-1 \quad \wedge \\ + \mathrm{sgn}(k_{i+1}^{(1)})\cdot \mathrm{sgn}(k_{i+1}^{(2)})&=-1 \quad + \textbf{then} + +.. math:: + + 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} + + +In the case of the new disaggregation method for precipitation, the two new sub grid points are added in the ``flux`` output files. They are identified by the forecast step parameter ``step`` 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. + + +.. note:: + + The new method for disaggregation was published in the Geoscientific Model Development Journal in 2018: + + 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, https://doi.org/10.5194/gmd-11-2503-2018, 2018. + + + + + + + +Disaggregation for the rest of the flux fields +---------------------------------------------- + +The accumulated values for the other variables are first divided by the number of hours and +then interpolated to the exact times X using a bicubic interpolation which conserves the integrals of the fluxes within each timespan. +Disaggregation is done for 4 adjacent timespans (:math:`p_a, p_b, p_c, p_d`) which generates a new, disaggregated value which is output at the central point of the 4 adjacent timespans. + +.. math:: + + p_a &= (a_3 - a_0 + 3. * (a_1 - a_2)) / 6. \\ + p_b &= (a_2 + a_0) / 2. - a_1 - 9. * p_a / 2. \\ + p_c &= a_1 - a_0 - 7. * p_a / 2. - 2. * p_b \\ + p_d &= a_0 - p_a / 4. - p_b / 3. - p_c / 2. + +This new point :math:`p` is used for linear interpolation of the complete timeseries afterwards. + +.. math:: + + p = 8. * p_a + 4. * p_b + 2. * p_c + p_d + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 + + diff --git a/For_developers/Sphinx/source/Documentation/input.rst b/For_developers/Sphinx/source/Documentation/input.rst new file mode 100644 index 0000000000000000000000000000000000000000..8506d53d1d5da9a7ac9e2f3a9c04fb53cc7c64f8 --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/input.rst @@ -0,0 +1,82 @@ +******************** +Control & Input Data +******************** + +Input Data + - :doc:`Input/control` + ``Flex_extract`` needs a number of controlling parameters to decide on the behaviour and the actual dataset to be retrieved. They are initialized by ``flex_extract`` with their default values and can be overwritten with definitions set in the so called :doc:`Input/control`. + + 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 :doc:`Input/control_params` section. + + We also have some :doc:`Input/examples` and description of :doc:`Input/changes` changes to previous versions and downward compatibilities. + + - :doc:`Input/ecmwf_env` + For ``flex_extract`` it is necessary to be able to reach ECMWF servers in the **remote mode** and the **gateway mode**. Therefore a :doc:`Input/ecmwf_env` is created during the installation process. + + - :doc:`Input/templates` + A number of files which are created by ``flex_extract`` are taken from templates. This makes it easy to adapt for example the jobscripts regarding its settings for the batch jobs. + + + + + +.. _setup : Input/setup.html +.. _run : Input/run.html +.. _install : Input/setup.html#ref-install-script +.. _submit : Input/submit.html#ref-submit-script + +.. _ref-controlling: + +Controlling + The main tasks and behaviour of ``flex_extract`` are controlled by its Python scripts. There are two top-level scripts, one for installation called install_ and one for execution called submit_. + They can interpret a number of command line arguments which can be seen by typing ``--help`` after the script call. Go to the root directory of ``flex_extract`` to type: + + .. code-block:: bash + + cd flex_extract_vX.X + 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. + + It might be faster and easier for beginners. See :doc:`../quick_start` for information on how to use them. + + Additionally, ``flex_extract`` creates the Korn Shell scripts :doc:`Input/compilejob` and :doc:`Input/jobscript` which will be send to the ECMWF serves in the **remote mode** and the **gateway mode** for starting batch jobs. + + The Fortran program will be compiled during the installation process by the :doc:`Input/fortran_makefile`. + + To sum up, the following scripts controls ``flex_extract``: + + Installation + - :doc:`Input/setup` + - :doc:`Input/compilejob` + - :doc:`Input/fortran_makefile` + + Execution + - :doc:`Input/run` + - :doc:`Input/jobscript` + + + + + + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Input/setup + Input/compilejob + Input/fortran_makefile + Input/run + Input/jobscript + Input/control + Input/control_params + Input/examples + Input/changes + Input/ecmwf_env + Input/templates diff --git a/For_developers/Sphinx/source/Documentation/output.rst b/For_developers/Sphinx/source/Documentation/output.rst new file mode 100644 index 0000000000000000000000000000000000000000..76d9f2e8490bc088dcf404bf78f09c92b02d7e82 --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/output.rst @@ -0,0 +1,291 @@ +*********** +Output Data +*********** + +The output data of ``flex_extract`` are separated mainly into temporary files and the final ``FLEXPART`` input files: + ++-----------------------------------------------+----------------------------------------------+ +| ``FLEXPART`` input files | Temporary files (saved in debug mode) | ++-----------------------------------------------+----------------------------------------------+ +| - Standard output filenames | - MARS request file (opt) | +| - Output for pure forecast | - flux files | +| - Output for ensemble members | - VERTICAL.EC | +| - Output for new precip. disaggregation | - index file | +| | - fort files | +| | - MARS grib files | ++-----------------------------------------------+----------------------------------------------+ + + + +``FLEXPART`` input files +======================== + +The final output files of ``flex_extract`` are also the meteorological ``FLEXPART`` input files. +The naming of these files depend on the kind of data extracted by ``flex_extract``. + +Standard output files +--------------------- + +In general, there is a file for each time step with the filename format: + +.. code-block:: bash + + <prefix>YYMMDDHH + +The ``prefix`` is by default defined as ``EN`` and can be re-defined in the ``CONTROL`` file. +Each file contains all meteorological fields needed by ``FLEXPART`` for all selected model levels for a specific time step. + +Here is an example output which lists the meteorological fields in a single file called ``CE00010800`` where we extracted only the lowest model level for demonstration reasons: + +.. code-block:: bash + + $ grib_ls CE00010800 + + edition centre date dataType gridType stepRange typeOfLevel level shortName packingType + 2 ecmf 20000108 an regular_ll 0 hybrid 91 u grid_simple + 2 ecmf 20000108 an regular_ll 0 hybrid 91 v grid_simple + 2 ecmf 20000108 an regular_ll 0 hybrid 91 etadot grid_simple + 2 ecmf 20000108 an regular_ll 0 hybrid 91 t grid_simple + 2 ecmf 20000108 an regular_ll 0 surface 1 sp grid_simple + 2 ecmf 20000108 an regular_ll 0 hybrid 91 q grid_simple + 2 ecmf 20000108 an regular_ll 0 hybrid 91 qc grid_simple + 1 ecmf 20000108 fc regular_ll 0 surface 0 sshf grid_simple + 1 ecmf 20000108 fc regular_ll 0 surface 0 ewss grid_simple + 1 ecmf 20000108 fc regular_ll 0 surface 0 nsss grid_simple + 1 ecmf 20000108 fc regular_ll 0 surface 0 ssr grid_simple + 1 ecmf 20000108 fc regular_ll 0 surface 0 lsp grid_simple + 1 ecmf 20000108 fc regular_ll 0 surface 0 cp grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 sd grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 msl grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 tcc grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 10u grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 10v grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 2t grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 2d grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 z grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 lsm grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 cvl grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 cvh grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 lcc grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 mcc grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 hcc grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 skt grid_simple + 1 ecmf 20000108 an regular_ll 0 depthBelowLandLayer 0 stl1 grid_simple + 1 ecmf 20000108 an regular_ll 0 depthBelowLandLayer 0 swvl1 grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 sr grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 sdor grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 cvl grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 cvh grid_simple + 1 ecmf 20000108 an regular_ll 0 surface 0 fsr grid_simple + 35 of 35 messages in CE00010800 + + +Output files for pure forecast +------------------------------ + +``Flex_extract`` can retrieve forecasts which can be longer than 23 hours. To avoid collisions of time steps for forecasts of more than one day a new scheme for filenames in pure forecast mode is introduced: + +.. code-block:: bash + + <prefix>YYMMDD.HH.<FORECAST_STEP> + +The ``<prefix>`` is, as in the standard output, by default ``EN`` and can be re-defined in the ``CONTROL`` file. ``YYMMDD`` is the date format and ``HH`` the forecast time which is the starting time for the forecasts. The ``FORECAST_STEP`` is a 3 digit number which represents the forecast step in hours. + + +Output files for ensemble predictions +------------------------------------- + +Ensembles can be retrieved and are addressed by the grib message parameter ``number``. The ensembles are saved per file and standard filenames are supplemented by the letter ``N`` and the ensemble member number in a 3 digit format. + +.. code-block:: bash + + <prefix>YYMMDDHH.N<ENSEMBLE_MEMBER> + + +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 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: + +.. code-block:: bash + + $ grib_ls + + edition centre date dataType gridType stepRange typeOfLevel level shortName packingType + 1 ecmf 20000108 fc regular_ll 0 surface 0 lsp grid_simple + 1 ecmf 20000108 fc regular_ll 1 surface 0 lsp grid_simple + 1 ecmf 20000108 fc regular_ll 2 surface 0 lsp grid_simple + 1 ecmf 20000108 fc regular_ll 0 surface 0 cp grid_simple + 1 ecmf 20000108 fc regular_ll 1 surface 0 cp grid_simple + 1 ecmf 20000108 fc regular_ll 2 surface 0 cp grid_simple + + + + +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`. + +MARS grib files +--------------- + +``Flex_extract`` retrieves all meteorological fields from MARS and stores them in files ending with ``.grb``. +Since the request times and data transfer of MARS access are limited and ECMWF asks for efficiency in requesting data from MARS, ``flex_extract`` splits the overall data request in several smaller requests. Each request is stored in an extra ``.grb`` file and the file names are put together by several pieces of information: + + .. code-block:: bash + + <field_type><grid_type><temporal_property><level_type>.<date>.<ppid>.<pid>.grb + +Description: + +Field type: + ``AN`` - Analysis, ``FC`` - Forecast, ``4V`` - 4d variational analysis, ``CV`` - Validation forecast, ``CF`` - Control forecast, ``PF`` - Perturbed forecast +Grid type: + ``SH`` - Spherical Harmonics, ``GG`` - Gaussian Grid, ``OG`` - Output Grid (typically lat/lon), ``_OROLSM`` - Orography parameter +Temporal property: + ``__`` - instantaneous fields, ``_acc`` - accumulated fields +Level type: + ``ML`` - Model Level, ``SL`` - Surface Level +ppid: + The process number of the parent process of submitted script. +pid: + The process number of the submitted script. + +The process ids should avoid mixing of fields if several ``flex_extract`` jobs are performed in parallel (which is, however, not recommended). The date format is YYYYMMDDHH. + +Example ``.grb`` files for a day of CERA-20C data: + + .. code-block:: bash + + ANOG__ML.20000908.71851.71852.grb + FCOG_acc_SL.20000907.71851.71852.grb + ANOG__SL.20000908.71851.71852.grb + OG_OROLSM__SL.20000908.71851.71852.grb + ANSH__SL.20000908.71851.71852.grb + + +MARS request file +----------------- + +This file is a ``csv`` file called ``mars_requests.csv`` with a list of the actual settings of MARS request parameters (one request per line) in a flex_extract job. It is used for documenting the data which were retrieved and for testing reasons. + +Each request consist of the following parameters, whose meaning mainly can be taken from :doc:`Input/control_params` or :doc:`Input/run`: +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type + +Example output of a one day retrieval of CERA-20c data: + +.. code-block:: bash + + request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type + 1, 24, 40.0/-5.0/30.0/5.0, None, 20000107/to/20000109, 1, , 1.0/1.0, 1, SFC, EP, 000, 142.128/143.128/146.128/180.128/181.128/176.128, , 159, 3/to/24/by/3, ENDA, /mnt/nas/Anne/Interpolation/flexextract/flex_extract_v7.1/run/./workspace/CERA_testgrid_local_cds/FCOG_acc_SL.20000107.23903.23904.grb, 18, FC + 1, 24, 40.0/-5.0/30.0/5.0, None, 20000108/to/20000108, 1, , 1.0/1.0, 85/to/91, ML, EP, 000, 130.128/133.128/131.128/132.128/077.128/246.128/247.128, , 159, 00, ENDA, /mnt/nas/Anne/Interpolation/flexextract/flex_extract_v7.1/run/./workspace/CERA_testgrid_local_cds/ANOG__ML.20000108.23903.23904.grb, 00/03/06/09/12/15/18/21, AN + 2, 24, 40.0/-5.0/30.0/5.0, None, 20000108/to/20000108, 1, , OFF, 1, ML, EP, 000, 152.128, , 159, 00, ENDA, /mnt/nas/Anne/Interpolation/flexextract/flex_extract_v7.1/run/./workspace/CERA_testgrid_local_cds/ANSH__SL.20000108.23903.23904.grb, 00/03/06/09/12/15/18/21, AN + 3, 24, 40.0/-5.0/30.0/5.0, None, 20000108, 1, , 1.0/1.0, 1, SFC, EP, 000, 160.128/027.128/028.128/244.128, , 159, 000, ENDA, /mnt/nas/Anne/Interpolation/flexextract/flex_extract_v7.1/run/./workspace/CERA_testgrid_local_cds/OG_OROLSM__SL.20000108.23903.23904.grb, 00, AN + 4, 24, 40.0/-5.0/30.0/5.0, None, 20000108/to/20000108, 1, , 1.0/1.0, 1, SFC, EP, 000, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/027.128/028.128/186.128/187.128/188.128/235.128/139.128/039.128/173.128, , 159, 00, ENDA, /mnt/nas/Anne/Interpolation/flexextract/flex_extract_v7.1/run/./workspace/CERA_testgrid_local_cds/ANOG__SL.20000108.23903.23904.grb, 00/03/06/09/12/15/18/21, AN + + +VERTICAL.EC +----------- + +The vertical discretization of model levels. This file contains the ``A`` and ``B`` parameters to calculate the model level height in meters. + + +Index file +---------- + +This file is usually called ``date_time_stepRange.idx``. It contains indices pointing to specific grib messages from one or more grib files. The messages are selected with a composition of grib message keywords. + + +flux files +---------- + +The flux files contain the de-accumulated and dis-aggregated flux fields of large scale and convective precipitation, eastward turbulent surface stress, northward turbulent surface stress, surface sensible heat flux and the surface net solar radiation. + +.. code-block:: bash + + flux<date>[.N<xxx>][.<xxx>] + +The date format is YYYYMMDDHH. The optional block ``[.N<xxx>]`` marks the ensemble forecast number, where ``<xxx>`` is the ensemble member number. The optional block ``[.<xxx>]`` marks a pure forecast with ``<xxx>`` being the forecast step. + +.. note:: + + 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 ``0`` for the original time interval and ``1`` or ``2`` for the two new intervals respectively. + + +fort files +---------- + +There are a number of input files for the ``CONVERT2`` Fortran program named + +.. code-block:: bash + + fort.xx + +where ``xx`` is the number which defines the meteorological fields stored in these files. +They are generated by the Python part of ``flex_extract`` by just splitting the meteorological fields for a unique time stamp from the ``*.grb`` files into the ``fort`` files. +The following table defines the numbers with their corresponding content. + +.. csv-table:: Content of fort - files + :header: "Number", "Content" + :widths: 5, 20 + + "10", "U and V wind components" + "11", "temperature" + "12", "logarithm of surface pressure" + "13", "divergence (optional)" + "16", "surface fields" + "17", "specific humidity" + "18", "surface specific humidity (reduced gaussian)" + "19", "vertical velocity (pressure) (optional)" + "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. + +The ``CONVERT2`` program saves its results in file ``fort.15`` which typically contains: + +.. csv-table:: Output file of the Fortran program ``CONVERT2`` + :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`. + +.. 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 ??????????????? + + Example of a namelist: + + .. code-block:: bash + + &NAMGEN + maxl = 11, + maxb = 11, + mlevel = 91, + mlevelist = "85/to/91", + mnauf = 159, + metapar = 77, + rlo0 = -5.0, + rlo1 = 5.0, + rla0 = 30.0, + rla1 = 40.0, + momega = 0, + momegadiff = 0, + mgauss = 0, + msmooth = 0, + meta = 1, + metadiff = 0, + mdpdeta = 1 + / + + +.. 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 new file mode 100644 index 0000000000000000000000000000000000000000..9bde61b398e8273f68dc11a835758b21a998bafa --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/overview.rst @@ -0,0 +1,47 @@ +======== +Overview +======== + +``Flex_extract`` 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 ``FLEXTRA``/``FLEXPART`` Atmospheric Transport Modelling system. +``Flex_extract`` was created explicitly for ``FLEXPART`` users who wants to use meteorological data from ECMWF to drive the ``FLEXPART`` model. +The software retrieves the minimal number of parameters ``FLEXPART`` needs to work and provides the data in the explicity format ``FLEXPART`` understands. + +``Flex_extract`` consists of 2 main parts: + 1. a Python part, where the reading of parameter settings, retrieving data from MARS and preparing the data for ``FLEXPART`` is done and + 2. a Fortran part, where the calculation of the vertical velocity is done and if necessary the conversion from spectral to regular latitude/longitude grids. + +Additionally, it has some Korn shell scripts which are used to set the environment and batch job features on ECMWF servers for the *gateway* and *remote* mode. See :doc:`Overview/app_modes` for information of application modes. + +A number of Shell scripts are wrapped around the software package for easy installation and fast job submission. + +The software depends on a number of third-party libraries which can be found in :ref:`ref-requirements`. + +Some details on the tasks and program worksteps are described in :doc:`Overview/prog_flow`. + + +.. - directory structure (new diagramm!) + + - Software components - complete component structure (table or diagram) + + - Python package + + - Package diagram + - Files and modules as table with information about unit tests + - Api + + - Fortran program - CONVERT2 + + - Package diagram + - Api + + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Overview/app_modes + Overview/prog_flow diff --git a/For_developers/Sphinx/source/Documentation/vertco.rst b/For_developers/Sphinx/source/Documentation/vertco.rst new file mode 100644 index 0000000000000000000000000000000000000000..4dea24a9e58275ba417fa64fa0daa946e8cb65bd --- /dev/null +++ b/For_developers/Sphinx/source/Documentation/vertco.rst @@ -0,0 +1,62 @@ +******************* +Vertical Coordinate +******************* + +Calculation of vertical velocity and preparation of Output-files +================================================================ + +``flex_extract`` has two ways to calculate the vertical velocity for ``FLEXTRA``/``FLEXPART``: + (i) from the horizontal wind field, + (ii) from the MARS parameter 77, which is available for operational forecasts and analyses since September 2008 and for reanalysis datasets **ERA5** and **CERA-20C**. + +Especially for high resolution data, use of the ``MARS`` parameter 77 is recommended, +since the computational cost (measured in ECMWF HPC units) is reduced by 90-95% at +T799. The extraction time, which depends heavily also on the performance of ``MARS``, is +generally reduced by 50% as well. The ``MARS`` parameter 77 is then multiplied by ``dp/deta`` to +give a vertical velocity in Pa/s as needed by ``FLEXPART``. + +Calculation from the horizontal wind field is still required for historical case studies using +**ERA-40**, **ERA-Interim** or operational data prior to September 2008. + + +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 +documents v20_update_protocol.pdf, V30_update_protocol.pdf and +V40_update_protocol.pdf. The computational demand and accuracy of ``CONVERT2`` is highly +dependent on the specification of parameters ``GAUSS``, ``RESOL`` and ``SMOOTH``. The +following guidance can be given for choosing the right parameters: + + * For very fine output grids (0.25 degree or finer) the full resolution T799 or even T1279 of the operational model is required (``RESOL=799``, ``SMOOTH=0``). The highest available resolution (and the calculation of vertical velocity on the Gaussian grid (``GAUSS=1``) 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 *ecgate*, the computation of the vertical velocity is feasible only on the lat/lon grid (``GAUSS=0``), 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. + * 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: + - For 1.0 degree grids: ``GAUSS=1``, ``RESOL=255``, ``SMOOTH=179`` + - For 0.5 degree grids: ``GAUSS=1``, ``RESOL=399``, ``SMOOTH=359`` + - Calculation on the lat/lon grid is not recommended for less than the operational (T1279) resolution. + - If ``GAUSS`` is set to 1, only the following choices are possible for ``RESOL`` on *ecgate*: 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 ``GAUSS=0``, ``RESOL`` can be any value below the operational resolution. + - For ``SMOOTH`` any resolution lower than ``RESOL`` is possible. If no smoothing is desired, ``SMOOTH=0`` should be chosen. ``SMOOTH`` has no effect if vertical velocity is calculated on lat\/lon grid (``GAUSS=0``). + * The on demand scripts send an error message for settings where ``SMOOTH`` (if set) and ``RESOL`` are larger than 360./``GRID``/2, since in this case, the output grid cannot resolve the highest wave numbers. The scripts continue operations, however. + * Regional grids are not cyclic in zonal directions, but global grids are. The software assumes a cyclic grid if ``RIGHT``-``LEFT`` is equal to ``GRID`` or is equal to ``GRID``-360. + * Finally, model and flux data as well as the vertical velocity computed are written to files ``<prefix>yymmddhh`` for application in ATM modelling. If the parameters ``OMEGA`` or ``OMEGADIFF`` are set, also files ``OMEGAyymmddhh`` are created, containing the pressure vertical velocity (omega) and the difference between omega from ``MARS`` and the surface pressure tendency. ``OMEGADIFF`` should be zero except for debugging, since it triggers expensive calculations on the Gaussian grid. + + +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. + +It is recommended to use the pre-calculated parameter 77 by setting ``ETA`` to 1 whenever possible. + +Setting parameter ``ETA`` to 1 normally disables calculation of vertical velocity from the horizontal wind field, which saves a lot of computational time. + +.. note:: + However, the calculation on the Gaussian grid are avoided only if both ``GAUSS`` and ``ETADIFF`` are set to 0. Please set ``ETADIFF`` to 1 only if you are really need it for debugging since this is a very expensive option. In this case ``ETAyymmddhh`` files are produced that contain the vertical velocity from horizontal winds and the difference to the pre-calculated vertical velocity. + +The parameters ``RESOL``, ``GRID``, ``UPPER``, ``LOWER``, ``LEFT``, ``RIGHT`` still apply. As for calculations on the Gaussian grid, the spectral resolution parameter ``RESOL`` should be compatible with the grid resolution (see previous subsection). + + +.. toctree:: + :hidden: + :maxdepth: 2 + diff --git a/For_developers/Sphinx/source/Ecmwf/access.rst b/For_developers/Sphinx/source/Ecmwf/access.rst new file mode 100644 index 0000000000000000000000000000000000000000..6c2930e90bf32d0a9586b907fee286dc5f9b8be7 --- /dev/null +++ b/For_developers/Sphinx/source/Ecmwf/access.rst @@ -0,0 +1,27 @@ +************ +Access Modes +************ + +.. _public datasets: https://confluence.ecmwf.int/display/WEBAPI/Available+ECMWF+Public+Datasets +.. _Computing Representative: https://www.ecmwf.int/en/about/contact-us/computing-representatives +.. _Climate Data Store: https://cds.climate.copernicus.eu +.. _CDS API: https://cds.climate.copernicus.eu/api-how-to + +Access to the ECMWF Mars archive is divided into two groups: **member state** users and **public** users. + +**Member state user**: + This access mode allows the user to work directly on the ECMWF Linux Member State Servers or via a Web Access Toolkit ``ecaccess`` 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 `Computing Representative`_. This user group is also able to work from their local facilities without a gateway server in the same way a **public** user would. The only difference is the connection with the Web API. However, this is automatically selected by ``flex_extract``. + + +**Public user**: + This access mode allows every user to access the ECMWF `public datasets`_ from their local facilities. ``Flex_extract`` is able (tested for the use with ``FLEXPART``) to extract the re-analysis datasets such as ERA-Interim and CERA-20C. The main difference to the **member state user** 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 ``CONTROL`` 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 :ref:`ref-licence`. + +.. note:: + + The availability of the public dataset *ERA5* with the ECMWF Web API was cancelled in March 2019. The oportunity of local retrieval of this dataset was moved to the `Climate Data Store`_ which uses another Web API named `CDS API`_. This Data Store stores the data on explicit webservers for faster and easier access. Unfortunately, for *ERA5* there are only surface level and pressure level data available for *public users*. In the case of a *member user* it is possible to bypass the request to the MARS archive from ECMWF to retrieve the data. ``Flex_extract`` is already modified to use this API so *member user* can already retrieve *ERA5* data while *public users* have to wait until model level are available. + +For information on how to register see :ref:`ref-registration`. + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Ecmwf/ec-links.rst b/For_developers/Sphinx/source/Ecmwf/ec-links.rst new file mode 100644 index 0000000000000000000000000000000000000000..4095813c39f14a3449beb1fdd9d5d3e8fb34b6de --- /dev/null +++ b/For_developers/Sphinx/source/Ecmwf/ec-links.rst @@ -0,0 +1,122 @@ +################################ +Link Collection for Quick finder +################################ + + +ECMWF - General Overview + `ECMWF Home <https://www.ecmwf.int/>`_ + + `ECMWF Training <https://www.ecmwf.int/en/learning>`_ + + `General User Documentation <https://software.ecmwf.int/wiki/display/UDOC/User+Documentation>`_ + + `Software Support <https://confluence.ecmwf.int/display/SUP>`_ + +MARS + `MARS user documentation <https://confluence.ecmwf.int//display/UDOC/MARS+user+documentation>`_ + + `MARS Keywords <https://software.ecmwf.int/wiki/display/UDOC/MARS+keywords>`_ + + `MARS Content <https://confluence.ecmwf.int/display/UDOC/MARS+content>`_ + + `MARS Actions <https://confluence.ecmwf.int/display/UDOC/MARS+actions>`_ + + `Parameter Database <https://apps.ecmwf.int/codes/grib/param-db>`_ + +Registration + `Contact of Computing Representative's <https://www.ecmwf.int/en/about/contact-us/computing-representatives>`_ + + `Public registration for ECMWF Web API <https://software.ecmwf.int/wiki/display/WEBAPI/Access+MARS>`_ + + `CDS Registration <https://cds.climate.copernicus.eu/user/register>`_ + +Available Member State Datasets + `Web Interface for accessing member state datasets <http://apps.ecmwf.int/archive-catalogue/>`_ + + `Available datasets for member state users <https://www.ecmwf.int/en/forecasts/datasets>`_ + +Available Public Datasets + `Web Interface for accessing public datasets <http://apps.ecmwf.int/datasets/>`_ + + `ECMWF's public datasets <https://confluence.ecmwf.int/display/WEBAPI/Available+ECMWF+Public+Datasets>`_ + + `Public dataset Licences <https://software.ecmwf.int/wiki/display/WEBAPI/Available+ECMWF+Public+Datasets>`_ + + `ERA5 public dataset Licence <https://cds.climate.copernicus.eu/cdsapp#!/search?type=dataset>`_ + + +Datasets + Overview + `Complete list of datasets <https://www.ecmwf.int/en/forecasts/datasets>`_ + + `What is climate reanalysis <https://www.ecmwf.int/en/research/climate-reanalysis>`_ + + `Forecast user guide <https://confluence.ecmwf.int/display/FUG/1+Introduction>`_ + + Real-time (Operational) + `List of real_time datasets <https://www.ecmwf.int/en/forecasts/datasets/catalogue-ecmwf-real-time-products>`_ + + `Atmospheric model - HRES (our typical operational dataset) <https://www.ecmwf.int/en/forecasts/datasets/set-i>`_ + + `Atmospheric model - ENS (15-day ensemble forecast) <https://www.ecmwf.int/en/forecasts/datasets/set-iii>`_ + + ERA-Interim + `What is ERA-Interim <https://confluence.ecmwf.int/display/CKB/What+is+ERA-Interim>`_ + + `ERA-Interim documentation <https://www.ecmwf.int/en/elibrary/8174-era-interim-archive-version-20>`_ + + `ERA-Interim dataset <https://www.ecmwf.int/en/forecasts/datasets/archive-datasets/reanalysis-datasets/era-interim>`_ + + CERA-20C + `What is CERA-20C <https://software.ecmwf.int/wiki/display/CKB/What+is+CERA-20C>`_ + + `CERA-20C dataset <https://www.ecmwf.int/en/forecasts/datasets/archive-datasets/reanalysis-datasets/cera-20c>`_ + + ERA5 + `What is ERA5 <https://software.ecmwf.int/wiki/display/CKB/What+is+ERA5>`_ + + `What are the changes from ERA-Interim to ERA5 <https://confluence.ecmwf.int/pages/viewpage.action?pageId=74764925>`_ + + `How to download ERA5 via Climate Data Store <https://confluence.ecmwf.int/display/CKB/How+to+download+ERA5>`_ + + `How to migrate from ECMWF Web API to CDS API <https://confluence.ecmwf.int/display/CKB/How+to+migrate+from+ECMWF+Web+API+to+CDS+API>`_ + + `ERA5 Documentation <https://software.ecmwf.int/wiki/display/CKB/ERA5+data+documentation>`_ + +Third Party Libraries + `ECMWF Web API Home <https://software.ecmwf.int/wiki/display/WEBAPI/ECMWF+Web+API+Home>`_ + + `Building ECMWF software with gfortran <https://software.ecmwf.int/wiki/display/SUP/2015/05/11/Building+ECMWF+software+with+gfortran>`_ + + `FFTW <http://www.fftw.org>`_ + + `EMOSLIB <https://software.ecmwf.int/wiki/display/EMOS/Emoslib>`_ + + `ECcodes <https://software.ecmwf.int/wiki/display/ECC>`_ + + `C3S ERA5: Web API to CDS API <https://confluence.ecmwf.int/display/CKB/C3S+ERA5%3A+Web+API+to+CDS+API>`_ + + `ECaccess Documentation <https://confluence.ecmwf.int/display/ECAC/ECaccess+Home>`_ + +Plotting GRIB fields: + `Example Python script to plot GRIB files <https://software.ecmwf.int/wiki/display/CKB/How+to+plot+GRIB+files+with+Python+and+matplotlib>`_ + + +Scientific Information + `Octahedral reduced Gaussian Grid <https://confluence.ecmwf.int/display/FCST/Introducing+the+octahedral+reduced+Gaussian+grid>`_ + + `Precipitation <https://www.ecmwf.int/en/newsletter/147/meteorology/use-high-density-observations-precipitation-verification>`_ + + +Technical Information of ECMWF serves + + `Introduction presentation to SLURM <https://confluence.ecmwf.int/download/attachments/73008494/intro-slurm-2017.pdf?version=1&modificationDate=1488574096323&api=v2>`_ + +Troubleshooting + `ECMWF Web API Troubleshooting <https://confluence.ecmwf.int/display/WEBAPI/Web-API+Troubleshooting>`_ + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Ecmwf/hintsecmwf.rst b/For_developers/Sphinx/source/Ecmwf/hintsecmwf.rst new file mode 100644 index 0000000000000000000000000000000000000000..e601cffa1e17f1976883f8baa2d1969ad3e579cf --- /dev/null +++ b/For_developers/Sphinx/source/Ecmwf/hintsecmwf.rst @@ -0,0 +1,25 @@ +################################## +Hints to specify dataset retrieval +################################## + +.. contents:: + :local: + + + +How can I find out what data is available? +========================================== + +Go to the `Web Interface for accessing member state datasets <http://apps.ecmwf.int/archive-catalogue/>`_ +and click yourself through the steps to define your set of data and see what is available to you. + +For public users there is the `Web Interface for accessing public datasets <http://apps.ecmwf.int/datasets/>`_. + + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Ecmwf/msdata.rst b/For_developers/Sphinx/source/Ecmwf/msdata.rst new file mode 100644 index 0000000000000000000000000000000000000000..da321a9807365d90f16d463601f1381c390718da --- /dev/null +++ b/For_developers/Sphinx/source/Ecmwf/msdata.rst @@ -0,0 +1,22 @@ +######################################### +Available Datasets for Member State users +######################################### + + + +Model level data +================ + +.. figure:: ../_files/ECMWF_FPparameter_ml.png + + +Surface level data +================== + +.. figure:: ../_files/ECMWF_FPparameter_sfc-0.png +.. figure:: ../_files/ECMWF_FPparameter_sfc-1.png + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Ecmwf/pubdata.rst b/For_developers/Sphinx/source/Ecmwf/pubdata.rst new file mode 100644 index 0000000000000000000000000000000000000000..277b09106f662789f45d2d578b1d25390175b0d5 --- /dev/null +++ b/For_developers/Sphinx/source/Ecmwf/pubdata.rst @@ -0,0 +1,9 @@ +Available Datasets for Public users +*********************************** + + IN PREPARATION + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Evaluation/metrics.rst b/For_developers/Sphinx/source/Evaluation/metrics.rst new file mode 100644 index 0000000000000000000000000000000000000000..4188696c92892734e51ee7ca8787c74aab561bc8 --- /dev/null +++ b/For_developers/Sphinx/source/Evaluation/metrics.rst @@ -0,0 +1,15 @@ +Metrics +======= + + UNDER CONSTRUCTION + +.. csv-table: TTEST +.. :file: metrics_7.1.csv +.. :widths: 1,1,1,1,1,1 +.. :header-rows: 1 + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Evaluation/staticcode.rst b/For_developers/Sphinx/source/Evaluation/staticcode.rst new file mode 100644 index 0000000000000000000000000000000000000000..52e54138a51157463e6603d3fa443d0c7b1f580e --- /dev/null +++ b/For_developers/Sphinx/source/Evaluation/staticcode.rst @@ -0,0 +1,9 @@ +******************** +Static Code Analysis +******************** + + UNDER CONSTRUCTION + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Evaluation/testcases.rst b/For_developers/Sphinx/source/Evaluation/testcases.rst new file mode 100644 index 0000000000000000000000000000000000000000..aa257d29d7b2503a7eb589881f14e779ae7c1934 --- /dev/null +++ b/For_developers/Sphinx/source/Evaluation/testcases.rst @@ -0,0 +1,22 @@ +******************** +Testcases +******************** + + +Comparison of MARS requests +=========================== + + + + + +Comparison of grib files +======================== + + + + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Installation/gateway.rst b/For_developers/Sphinx/source/Installation/gateway.rst new file mode 100644 index 0000000000000000000000000000000000000000..c452eb6b5868150e55aa6ae16ef28a30e41b96a9 --- /dev/null +++ b/For_developers/Sphinx/source/Installation/gateway.rst @@ -0,0 +1,168 @@ +************************* +Gateway mode installation +************************* + +.. role:: underline + :class: underline + +.. toctree:: + :hidden: + :maxdepth: 2 + +.. _Python 3: https://docs.python.org/3/ +.. _Python3: https://www.python.org/downloads/ +.. _Anaconda Python3: https://www.anaconda.com/distribution/#download-section + +.. _numpy: http://www.numpy.org/ +.. _ecmwf-api-client: https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home +.. _cdsapi: https://cds.climate.copernicus.eu/api-how-to +.. _genshi: https://genshi.edgewall.org/ +.. _eccodes for python: https://packages.debian.org/sid/python3-eccodes +.. _eccodes for conda: https://anaconda.org/conda-forge/eccodes +.. _gfortran: https://gcc.gnu.org/wiki/GFortran +.. _fftw3: http://www.fftw.org +.. _eccodes: https://software.ecmwf.int/wiki/display/ECC +.. _emoslib: https://software.ecmwf.int/wiki/display/EMOS/Emoslib +.. _member state: https://www.ecmwf.int/en/about/who-we-are/member-states +.. _registration form: https://apps.ecmwf.int/registration/ +.. _CDS API registration: https://cds.climate.copernicus.eu/user/register +.. _ECMWF ectrans site: https://confluence.ecmwf.int/display/ECAC/Unattended+file+transfer+-+ectrans +.. _ECaccess Presentation: https://confluence.ecmwf.int/download/attachments/45759146/ECaccess.pdf +.. _ECMWF's instructions on gateway server: https://confluence.ecmwf.int/display/ECAC/ECaccess+Home +.. _Computing Representative: https://www.ecmwf.int/en/about/contact-us/computing-representatives +.. _MARS access: https://confluence.ecmwf.int//display/WEBAPI/Access+MARS + +.. _download section: https://www.flexpart.eu/downloads + + + +.. _ref-gateway-mode: + + + +.. _ref-req-gateway: + +Gateway mode - dependencies +=========================== + +* `Python3`_ +* `numpy`_ +* `genshi`_ + + +.. _ref-prep-gateway: + +Prepare gateway environment +=========================== + +In this mode, access to the ECMWF computing and archiving facilities is enabled through an ECaccess gateway server on a local member state server. The ECaccess framework is necessary to interactively submit jobs to the ECMWF batch system and to transfer files between ECMWF and local gateway server. + +Please see `ECMWF's instructions on gateway server`_ to establish the gateway server if not already in place. Additionally, to be able to use the ECaccess file transfer service **ectrans** it is necessary to create a so-called association. The easiest way is to visit the ECaccess Member State Gateway website (e.g. https://msgatway.ecmwf.int) and follow the instructions in the short `ECaccess Presentation`_ (page 17 ff.). Additional documentation can be found on the `ECMWF ectrans site`_. + +The next step is to create an *ecaccess certificate* to be able to send and receive files from and to the ECMWF server. You can do this by using the ``ecaccess-certificate-create`` 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). + + +.. code-block:: bash + + $ ecaccess-certificate-create + Please enter your user-id: example_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 installation was tested under *GNU/Linux Debian buster* and *Ubuntu 18.04 Bionic Beaver*. + +.. code-block:: sh + + + # 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): + # (if not already available): + apt-get install python3 + apt-get install python3-genshi + apt-get install python3-numpy + + +.. _ref-test-gateway: + +Test gateway environment +======================== + +Check the availability of the python packages by typing ``python3`` in +a terminal window and run the ``import`` commands in the python shell. +If there are no error messages, you succeeded in setting up the environment. + +.. code-block:: python + + # check in python3 console + import genshi + import numpy + + + +.. _ref-install-gateway: + +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. +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. + + +.. 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: + +.. code-block:: bash + + $ ./setup.sh + +to start the installation. You should see the following on standard output. + + +.. code-block:: bash + + # Output of setup.sh + Create tarball ... + 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: + +.. 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! + + + + + + + + diff --git a/For_developers/Sphinx/source/Installation/local.rst b/For_developers/Sphinx/source/Installation/local.rst new file mode 100644 index 0000000000000000000000000000000000000000..d0276bf56a2f8443c7241302fe7c43c4b6cc77f8 --- /dev/null +++ b/For_developers/Sphinx/source/Installation/local.rst @@ -0,0 +1,381 @@ +*********************** +Local mode installation +*********************** + +.. role:: underline + :class: underline + +.. toctree:: + :hidden: + :maxdepth: 2 + + +.. _Python 3: https://docs.python.org/3/ +.. _Python3: https://www.python.org/downloads/ +.. _Anaconda Python3: https://www.anaconda.com/distribution/#download-section + +.. _numpy: http://www.numpy.org/ +.. _ecmwf-api-client: https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home +.. _cdsapi: https://cds.climate.copernicus.eu/api-how-to +.. _genshi: https://genshi.edgewall.org/ +.. _eccodes for python: https://packages.debian.org/sid/python3-eccodes +.. _eccodes for conda: https://anaconda.org/conda-forge/eccodes +.. _gfortran: https://gcc.gnu.org/wiki/GFortran +.. _fftw3: http://www.fftw.org +.. _eccodes: https://software.ecmwf.int/wiki/display/ECC +.. _emoslib: https://software.ecmwf.int/wiki/display/EMOS/Emoslib +.. _member state: https://www.ecmwf.int/en/about/who-we-are/member-states +.. _registration form: https://apps.ecmwf.int/registration/ +.. _CDS API registration: https://cds.climate.copernicus.eu/user/register +.. _ECMWF ectrans site: https://confluence.ecmwf.int/display/ECAC/Unattended+file+transfer+-+ectrans +.. _ECaccess Presentation: https://confluence.ecmwf.int/download/attachments/45759146/ECaccess.pdf +.. _ECMWF's instructions on gateway server: https://confluence.ecmwf.int/display/ECAC/ECaccess+Home +.. _Computing Representative: https://www.ecmwf.int/en/about/contact-us/computing-representatives +.. _MARS access: https://confluence.ecmwf.int//display/WEBAPI/Access+MARS + +.. _download section: https://www.flexpart.eu/downloads + + + + + +.. _ref-local-mode: + + + +.. _ref-req-local: + +Local mode - dependencies +========================= + +The installation is the same for the access modes **member** and **public**. + +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: + ++------------------------------------------------+-----------------+ +| Python part | Fortran part | ++------------------------------------------------+-----------------+ +| * `Python3`_ | * `gfortran`_ | +| * `numpy`_ | * `fftw3`_ | +| * `genshi`_ | * `eccodes`_ | +| * `eccodes for python`_ | * `emoslib`_ | +| * `ecmwf-api-client`_ (everything except ERA5) | | +| * `cdsapi`_ (just for ERA5) | | ++------------------------------------------------+-----------------+ + + +.. _ref-prep-local: + +Prepare local environment +========================= + +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 on a *Debian GNU/Linux buster* and an *Ubuntu 18.04 Bionic Beaver* system. + +.. code-block:: sh + + # 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): + # (if not already available): + apt-get install python3 (usually already available on GNU/Linux systems) + apt-get install python3-eccodes + apt-get install python3-genshi + apt-get install python3-numpy + apt-get install gfortran + apt-get install fftw3-dev + apt-get install libeccodes-dev + apt-get install libemos-dev + # Some of these packages will pull in further packages as dependencies. This is fine, and some are even needed by ``flex_extract''. + + + # As currently the CDS and ECMWF API packages are not available as Debian packages, they need to be installed outside of the Debian (Ubuntu etc.) package management system. The recommended way is: + apt-get install pip + pip install cdsapi + pip install ecmwf-api-client + +.. note:: + + In case you would like to use Anaconda Python we recommend you follow the installation instructions of + `Anaconda Python Installation for Linux <https://docs.anaconda.com/anaconda/install/linux/>`_ and then install the + ``eccodes`` package from ``conda`` with: + + .. code-block:: bash + + conda install conda-forge::python-eccodes + +The CDS API (cdsapi) is required for ERA5 data and the ECMWF Web API (ecmwf-api-client) for all other public datasets. + +.. note:: + + Since **public users** currently don't have access to the full *ERA5* dataset they can skip the installation of the ``CDS API``. + +Both user groups have to provide keys with their credentials for the Web API's in their home directory. Therefore, follow these instructions: + +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. + + +.. _ref-test-local: + +Test local environment +====================== + +Check the availability of the python packages by typing ``python3`` in a terminal window and run the ``import`` commands in the python shell. If there are no error messages, you succeeded in setting up the environment. + +.. code-block:: python + + # check in python3 console + import eccodes + import genshi + import numpy + import cdsapi + import ecmwfapi + + + +Test the Web API's +------------------ + +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 ``flex_extract`` later on. + + +ECMWF Web API +^^^^^^^^^^^^^ + + ++----------------------------------------------------------+----------------------------------------------------------+ +|Please use this piece of Python code for **Member user**: |Please use this piece of Python code for **Public user**: | ++----------------------------------------------------------+----------------------------------------------------------+ +|.. code-block:: python |.. code-block:: python | +| | | +| from ecmwfapi import ECMWFService | from ecmwfapi import ECMWFDataServer | +| | | +| server = ECMWFService('mars') | server = ECMWFDataServer() | +| | | +| server.retrieve({ | server.retrieve({ | +| 'stream' : "oper", | 'stream' : "enda", | +| 'levtype' : "sfc", | 'levtype' : "sfc", | +| 'param' : "165.128/166.128/167.128", | 'param' : "165.128/166.128/167.128", | +| 'dataset' : "interim", | 'dataset' : "cera20c", | +| 'step' : "0", | 'step' : "0", | +| 'grid' : "0.75/0.75", | 'grid' : "1./1.", | +| 'time' : "00/06/12/18", | 'time' : "00/06/12/18", | +| 'date' : "2014-07-01/to/2014-07-31", | 'date' : "2000-07-01/to/2000-07-31", | +| 'type' : "an", | 'type' : "an", | +| 'class' : "ei", | 'class' : "ep", | +| 'target' : "download_erainterim_ecmwfapi.grib" | 'target' : "download_cera20c_ecmwfapi.grib" | +| }) | }) | ++----------------------------------------------------------+----------------------------------------------------------+ + + + +CDS API +^^^^^^^ + +Extraction of ERA5 data via CDS API might take time as currently there is a high demand for ERA5 data. Therefore, as a simple test for the API just retrieve pressure-level data (even if that is NOT what we need for FLEXPART), as they are stored on disk and don't need to be retrieved from MARS (which is the time-consuming action): + +Please use this piece of Python code to retrieve a small sample of *ERA5* pressure levels: + +.. code-block:: python + + import cdsapi + + c = cdsapi.Client() + + c.retrieve("reanalysis-era5-pressure-levels", + { + "variable": "temperature", + "pressure_level": "1000", + "product_type": "reanalysis", + "year": "2008", + "month": "01", + "day": "01", + "time": "12:00", + "format": "grib" + }, + "download_cdsapi.grib") + + +If you know that your CDS API works, you can try to extract some data from MARS. + +.. **Member-state user** + +Please use this piece of Python code to retrieve a small *ERA5* data sample as a **member-state user**! The **Public user** do not have access to the full *ERA5* dataset! + +.. code-block:: python + + import cdsapi + + c = cdsapi.Client() + + c.retrieve('reanalysis-era5-complete', + { + 'class' : 'ea', + 'expver' : '1', + 'stream' : 'oper', + 'type' : 'fc', + 'step' : '3/to/12/by/3', + 'param' : '130.128', + 'levtype' : 'ml', + 'levelist': '135/to/137', + 'date' : '2013-01-01', + 'time' : '06/18', + 'area' : '50/-5/40/5', + 'grid' : '1.0/1.0', + 'format' : 'grib', + }, 'download_era5_cdsapi.grib') + + +.. ********************** COMMENTED OUT FOR FUTURE + ********************** PUBLIC RETRIEVAL IS CURRENTLY NOT ACCESSIBLE + + **Public user** + Please use this piece of Python code: + + .. code-block:: python + + import cdsapi + + c = cdsapi.Client() + + c.retrieve('reanalysis-era5-complete', + { + 'class' : 'ea', + 'dataset' : 'era5', + 'expver' : '1', + 'stream' : 'oper', + 'type' : 'fc', + 'step' : '3/to/12/by/3', + 'param' : '130.128', + 'levtype' : 'ml', + 'levelist': '135/to/137', + 'date' : '2013-01-01', + 'time' : '06/18', + 'area' : '50/-5/40/5', + 'grid' : '1.0/1.0', + 'format' : 'grib', + }, 'download_era5_cdsapi.grib') + + + + + + +.. _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 + +They 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 + ``makefiles`` if other than standard paths are used. + +So starting from the root directory of ``flex_extract``, +go to the ``Fortran`` source directory and open the ``makefile`` of your +choice to modify with an editor of your choice. We use the ``nedit`` in this case. + +.. code-block:: bash + + cd flex_extract_vX.X/Source/Fortran + nedit makefile.local.gfortran + +Edit the paths to the ``eccodes`` library on your local machine. + + +.. caution:: + This can vary from system to system. + It is suggested to use a command like + + .. code-block:: bash + + # for the ECCODES_INCLUDE_DIR path do: + $ dpkg -L libeccodes-dev | grep eccodes.mod + # for the ECCODES_LIB path do: + $ dpkg -L libeccodes-dev | grep libeccodes.so + + to find out the path to the ``eccodes`` library. + +Substitute these paths in the ``makefile`` for parameters **ECCODES_INCLUDE_DIR** +and **ECCODES_LIB** and save it. + +.. code-block:: bash + + # these are the paths on a current Debian 10 Testing system (May 2019) + ECCODES_INCLUDE_DIR=/usr/lib/x86_64-linux-gnu/fortran/gfortran-mod-15/ + ECCODES_LIB= -L/usr/lib -leccodes_f90 -leccodes -lm + + +The Fortran program called ``CONVERT2`` 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 +and adapt the installation parameters in the section labelled with +"AVAILABLE COMMANDLINE ARGUMENTS TO SET" like shown below. + + +.. code-block:: bash + :caption: 'Example settings for a local installation.' + :name: setup.sh + + ... + # ----------------------------------------------------------------- + # AVAILABLE COMMANDLINE ARGUMENTS TO SET + # + # THE USER HAS TO SPECIFY THESE PARAMETER + # + TARGET='local' + MAKEFILE='makefile.local.gfortran' + ECUID=None + ECGID=None + GATEWAY=None + DESTINATION=None + INSTALLDIR=None + JOB_TEMPLATE='job.template' + CONTROLFILE='CONTROL_EA5' + ... + + +Afterwards, type: + +.. code-block:: bash + + $ ./setup.sh + +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 + + + + + diff --git a/For_developers/Sphinx/source/Installation/remote.rst b/For_developers/Sphinx/source/Installation/remote.rst new file mode 100644 index 0000000000000000000000000000000000000000..b2e4d42a856f995e0722e764aabd08f40e9fb4c0 --- /dev/null +++ b/For_developers/Sphinx/source/Installation/remote.rst @@ -0,0 +1,188 @@ +************************ +Remote mode installation +************************ + +.. role:: underline + :class: underline + +.. toctree:: + :hidden: + :maxdepth: 2 + + +.. _Python 3: https://docs.python.org/3/ +.. _Python3: https://www.python.org/downloads/ +.. _Anaconda Python3: https://www.anaconda.com/distribution/#download-section + +.. _numpy: http://www.numpy.org/ +.. _ecmwf-api-client: https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home +.. _cdsapi: https://cds.climate.copernicus.eu/api-how-to +.. _genshi: https://genshi.edgewall.org/ +.. _eccodes for python: https://packages.debian.org/sid/python3-eccodes +.. _eccodes for conda: https://anaconda.org/conda-forge/eccodes +.. _gfortran: https://gcc.gnu.org/wiki/GFortran +.. _fftw3: http://www.fftw.org +.. _eccodes: https://software.ecmwf.int/wiki/display/ECC +.. _emoslib: https://software.ecmwf.int/wiki/display/EMOS/Emoslib +.. _member state: https://www.ecmwf.int/en/about/who-we-are/member-states +.. _registration form: https://apps.ecmwf.int/registration/ +.. _CDS API registration: https://cds.climate.copernicus.eu/user/register +.. _ECMWF ectrans site: https://confluence.ecmwf.int/display/ECAC/Unattended+file+transfer+-+ectrans +.. _ECaccess Presentation: https://confluence.ecmwf.int/download/attachments/45759146/ECaccess.pdf +.. _ECMWF's instructions on gateway server: https://confluence.ecmwf.int/display/ECAC/ECaccess+Home +.. _Computing Representative: https://www.ecmwf.int/en/about/contact-us/computing-representatives +.. _MARS access: https://confluence.ecmwf.int//display/WEBAPI/Access+MARS + +.. _download section: https://www.flexpart.eu/downloads + + +.. _ref-remote-mode: + + +.. _ref-req-remote: + +Remote mode - dependencies +========================== + +The following software is required, and already available at the ECMWF servers: + ++---------------------------+-----------------+ +| Python part | Fortran part | ++---------------------------+-----------------+ +| * `Python3`_ | * `gfortran`_ | +| * `numpy`_ | * `fftw3`_ | +| * `genshi`_ | * `eccodes`_ | +| * `eccodes for python`_ | * `emoslib`_ | ++---------------------------+-----------------+ + + +.. _ref-prep-remote: + +Prepare remote environment +========================== + +ECMWF servers provide all libraries via a module system. Loading the required modules is already built into ``flex_extract`` and no user action is needed. + + +.. _ref-install-remote: + +Remote installation +=================== + +First, log in on one of the ECMWF servers, such as *ecgate* or *cca/ccb*. +Substitute *<ecuid>* with your ECMWF user name: + +.. code-block:: bash + + ssh -X <ecuid>@ecaccess.ecmwf.int + +This will lead to the following output on the command line, asking for your +password: + +.. code-block:: bash + + Authorized access only. + + *************************************************************** + For further information, read the ECaccess documentation at: + + https://software.ecmwf.int/wiki/display/ECAC/ECaccess+Home + + You can also use ECaccess to load & download files from your + EChome, ECscratch or ECfs directories using the ECaccess FTP + server: + + ftp://uid@ecaccess.ecmwf.int/ + + Please note you must use your UID and ActivID code to login! + *************************************************************** + + <ecuid>@<ipname/address>'s password: *** + Select hostname (ecgate, cca, ccb) [ecgate]: ecgate + + [<ecuid>@ecgb11 ~]$ + +Substitute the *<localuser>* and *<localmachine.tld>* placeholders with your local user name and the IP name or address of your local machine. +Untar the file and change into the ``flex_extract`` root directory. + +.. code-block:: bash + + scp <localuser>@<localmachine.tld>:</path/to/tarfile/>flex_extract_vX.X.tar.gz $HOME/ + cd $HOME + tar xvf flex_extract_vX.X.tar.gz + cd flex_extract_vX.X + + + +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`. + +Open ``setup.sh`` with your preferred editor (e.g., ``nano'') and adapt the values: + ++----------------------------------------------+----------------------------------------------+ +| Use this for target = **ectrans** | Use this for target = **cca** | ++----------------------------------------------+----------------------------------------------+ +| .. 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.gfortran' | MAKEFILE='Makefile.CRAY' | +| ECUID='uid' | ECUID='uid' | +| ECGID='gid' | ECGID='gid' | +| GATEWAY=None | GATEWAY=None | +| DESTINATION=None | DESTINATION=None | +| INSTALLDIR=None | INSTALLDIR='' | +| JOB_TEMPLATE='job.template' | JOB_TEMPLATE='job.template' | +| CONTROLFILE='CONTROL_EA5' | CONTROLFILE='CONTROL_EA5' | +| ... | ... | ++----------------------------------------------+----------------------------------------------+ + +: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).` + +.. note:: + + If a local gateway server is available, files can be transferred with ``ECaccess`` commands. In that case, a valid *GATEWAY* and *DESTINATION* have to be present in the ``setup.sh`` file (even if not used, the lines must not be deleted). + +Afterwards, type: + +.. code-block:: bash + + module load python3 + ./setup.sh + +to start the installation. You should see the following on standard output. + + +.. code-block:: bash + + # Output of setup.sh + Create tarball ... + 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: + +.. 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! + + + + + diff --git a/For_developers/Sphinx/source/Support/faq.rst b/For_developers/Sphinx/source/Support/faq.rst new file mode 100644 index 0000000000000000000000000000000000000000..616850d36a761c822195752b7686d7665de6fc7a --- /dev/null +++ b/For_developers/Sphinx/source/Support/faq.rst @@ -0,0 +1,38 @@ +################################ +FAQ - Frequently asked questions +################################ + +.. contents:: + :local: + + + +What can I do if I can't install the third party libraries from distribution packages? +====================================================================================== + +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: + +Installation hints: + 1. `Read Emoslib installation instructions <https://software.ecmwf.int/wiki/display/EMOS/Emoslib>`_ + 2. `Read ECMWF blog about gfortran <https://software.ecmwf.int/wiki/display/SUP/2015/05/11/Building+ECMWF+software+with+gfortran>`_ + 3. `Install FFTW <http://www.fftw.org>`_ + 4. `Install EMOSLIB <https://software.ecmwf.int/wiki/display/EMOS/Emoslib>`_ (2 times make! one without any options and one with single precision option) + 5. `Install ECCODES <https://software.ecmwf.int/wiki/display/ECC>`_ + 6. Register at Mars (:ref:`ref-registration`) + 7. Install Web API's `CDS API <https://cds.climate.copernicus.eu/api-how-to>`_ and `ECMWF Web API <https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home>`_ + 8. Check LD_LIBRARY_PATH environment variable if it contains all paths to the libs + 9. Check available python packages (e.g. import eccodes / import grib_api / import ecmwfapi) + 10. Start test retrieval (:ref:`ref-test-local`) + 11. Install ``flex_extract`` (:doc:`../installation`) + +.. caution:: + - use the same compiler and compiler version all the time + - don't forget to set all Library paths in the LD_LIBRARY_PATH environment variable + - adapt the ``flex_extract`` makefile + + +.. toctree:: + :hidden: + :maxdepth: 2 diff --git a/For_developers/Sphinx/source/Support/known_bugs_issues.rst b/For_developers/Sphinx/source/Support/known_bugs_issues.rst new file mode 100644 index 0000000000000000000000000000000000000000..9ca018cf8f1ab82c790a237d0f58616e8fd34437 --- /dev/null +++ b/For_developers/Sphinx/source/Support/known_bugs_issues.rst @@ -0,0 +1,4 @@ +Known Bugs and Issues +===================== + + \ No newline at end of file diff --git a/For_developers/Sphinx/source/_files/CONTROLparameter.xls b/For_developers/Sphinx/source/_files/CONTROLparameter.xls new file mode 120000 index 0000000000000000000000000000000000000000..4cbc0645bdc26c3204e0aa8a8a4c6a9a488b94e6 --- /dev/null +++ b/For_developers/Sphinx/source/_files/CONTROLparameter.xls @@ -0,0 +1 @@ +../../../CONTROLparameter.xls \ No newline at end of file diff --git a/For_developers/Sphinx/source/_files/ECMWF_FPparameter_ml.png b/For_developers/Sphinx/source/_files/ECMWF_FPparameter_ml.png new file mode 100644 index 0000000000000000000000000000000000000000..14b990f191b1e3b7cbbe1104f62ddc195e6ace87 Binary files /dev/null and b/For_developers/Sphinx/source/_files/ECMWF_FPparameter_ml.png differ diff --git a/For_developers/Sphinx/source/_files/ECMWF_FPparameter_sfc-0.png b/For_developers/Sphinx/source/_files/ECMWF_FPparameter_sfc-0.png new file mode 100644 index 0000000000000000000000000000000000000000..117eaa9b5af60e4caf05ced70506392c2be7e0fd Binary files /dev/null and b/For_developers/Sphinx/source/_files/ECMWF_FPparameter_sfc-0.png differ diff --git a/For_developers/Sphinx/source/_files/ECMWF_FPparameter_sfc-1.png b/For_developers/Sphinx/source/_files/ECMWF_FPparameter_sfc-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b6a0494c2c8c1af9c2ba5f440a64dbb485e3260a Binary files /dev/null and b/For_developers/Sphinx/source/_files/ECMWF_FPparameter_sfc-1.png differ diff --git a/For_developers/Sphinx/source/_files/IA3.pdf b/For_developers/Sphinx/source/_files/IA3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c973f62aeed58773019e9a36651a49075b084e40 Binary files /dev/null and b/For_developers/Sphinx/source/_files/IA3.pdf differ diff --git a/For_developers/Sphinx/source/_files/IA3.png b/For_developers/Sphinx/source/_files/IA3.png new file mode 100644 index 0000000000000000000000000000000000000000..080e249f2a4a6923fc620fcd52ba9b38083d1e2f Binary files /dev/null and b/For_developers/Sphinx/source/_files/IA3.png differ diff --git a/For_developers/Sphinx/source/_files/InstallationParameter.xls b/For_developers/Sphinx/source/_files/InstallationParameter.xls new file mode 120000 index 0000000000000000000000000000000000000000..1827ba8decc55d5aaea13962f42751f9e9f2cc1a --- /dev/null +++ b/For_developers/Sphinx/source/_files/InstallationParameter.xls @@ -0,0 +1 @@ +../../../InstallationParameter.xls \ No newline at end of file diff --git a/For_developers/Sphinx/source/_files/MARS_catalogue_snapshot.png b/For_developers/Sphinx/source/_files/MARS_catalogue_snapshot.png new file mode 100644 index 0000000000000000000000000000000000000000..d7b167a4288ae37d985c8480b7316b59e6b33983 Binary files /dev/null and b/For_developers/Sphinx/source/_files/MARS_catalogue_snapshot.png differ diff --git a/For_developers/Sphinx/source/_files/SubmitParameters.xls b/For_developers/Sphinx/source/_files/SubmitParameters.xls new file mode 120000 index 0000000000000000000000000000000000000000..6162da7624ddba46436a695868e205415290a954 --- /dev/null +++ b/For_developers/Sphinx/source/_files/SubmitParameters.xls @@ -0,0 +1 @@ +../../../SubmitParameters.xls \ No newline at end of file diff --git a/For_developers/Sphinx/source/_files/dataset_cmp_table.png b/For_developers/Sphinx/source/_files/dataset_cmp_table.png new file mode 100644 index 0000000000000000000000000000000000000000..2409fd629d1465dbb97d0d55cd7c391b3016cb40 Binary files /dev/null and b/For_developers/Sphinx/source/_files/dataset_cmp_table.png differ diff --git a/For_developers/Sphinx/source/_files/ex_runlocal_en.png b/For_developers/Sphinx/source/_files/ex_runlocal_en.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0cc39a586a849b798c61f3baf2a1b3fb4bebe2 Binary files /dev/null and b/For_developers/Sphinx/source/_files/ex_runlocal_en.png differ diff --git a/For_developers/Sphinx/source/_files/lin_interpol.pdf b/For_developers/Sphinx/source/_files/lin_interpol.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2e39d57a458c2c9075de0287e7c7938e99e466c0 Binary files /dev/null and b/For_developers/Sphinx/source/_files/lin_interpol.pdf differ diff --git a/For_developers/Sphinx/source/_files/lin_interpol.png b/For_developers/Sphinx/source/_files/lin_interpol.png new file mode 100644 index 0000000000000000000000000000000000000000..cfad5804361e5b16b9f2653f4d14b7f4de2be1e4 Binary files /dev/null and b/For_developers/Sphinx/source/_files/lin_interpol.png differ diff --git a/For_developers/Sphinx/source/_files/mode_gateway.png b/For_developers/Sphinx/source/_files/mode_gateway.png new file mode 100644 index 0000000000000000000000000000000000000000..1461e23f545cb69f87ab5900e0483021982816ab Binary files /dev/null and b/For_developers/Sphinx/source/_files/mode_gateway.png differ diff --git a/For_developers/Sphinx/source/_files/mode_local_member.png b/For_developers/Sphinx/source/_files/mode_local_member.png new file mode 100644 index 0000000000000000000000000000000000000000..499a616814b514723497726ddaaddd9fcfdf64e6 Binary files /dev/null and b/For_developers/Sphinx/source/_files/mode_local_member.png differ diff --git a/For_developers/Sphinx/source/_files/mode_local_public.png b/For_developers/Sphinx/source/_files/mode_local_public.png new file mode 100644 index 0000000000000000000000000000000000000000..cf2e90dbc690c0eb72e8beae63679127fb6c145f Binary files /dev/null and b/For_developers/Sphinx/source/_files/mode_local_public.png differ diff --git a/For_developers/Sphinx/source/_files/mode_remote.png b/For_developers/Sphinx/source/_files/mode_remote.png new file mode 100644 index 0000000000000000000000000000000000000000..cd7cba08f3b22981592194ed3673ec14619d69cf Binary files /dev/null and b/For_developers/Sphinx/source/_files/mode_remote.png differ diff --git a/For_developers/Sphinx/source/_files/new_disagg.pdf b/For_developers/Sphinx/source/_files/new_disagg.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c9959d890d7182a749be0e41a5803ae9a1e6675d Binary files /dev/null and b/For_developers/Sphinx/source/_files/new_disagg.pdf differ diff --git a/For_developers/Sphinx/source/_files/new_disagg.png b/For_developers/Sphinx/source/_files/new_disagg.png new file mode 100644 index 0000000000000000000000000000000000000000..f556c0dd7f130aa202b99bb4f70e36741094f2f2 Binary files /dev/null and b/For_developers/Sphinx/source/_files/new_disagg.png differ diff --git a/For_developers/Sphinx/source/_files/old_disagg.pdf b/For_developers/Sphinx/source/_files/old_disagg.pdf new file mode 100644 index 0000000000000000000000000000000000000000..707caa190801cae0362e91c1001baf0f74b0db32 Binary files /dev/null and b/For_developers/Sphinx/source/_files/old_disagg.pdf differ diff --git a/For_developers/Sphinx/source/_files/old_disagg.png b/For_developers/Sphinx/source/_files/old_disagg.png new file mode 100644 index 0000000000000000000000000000000000000000..0a9979b04a4b29e7aa4ae9edfe7761a4fddbbd96 Binary files /dev/null and b/For_developers/Sphinx/source/_files/old_disagg.png differ diff --git a/For_developers/Sphinx/source/_files/packages.png b/For_developers/Sphinx/source/_files/packages.png new file mode 120000 index 0000000000000000000000000000000000000000..2f5942c2b34685d587cbd2c21c679289e587f031 --- /dev/null +++ b/For_developers/Sphinx/source/_files/packages.png @@ -0,0 +1 @@ +../../../packages.png \ No newline at end of file diff --git a/For_developers/Sphinx/source/_files/submit.png b/For_developers/Sphinx/source/_files/submit.png new file mode 100644 index 0000000000000000000000000000000000000000..fbac0ec46f9176f3231dc8cad57ff061c69bd9e2 Binary files /dev/null and b/For_developers/Sphinx/source/_files/submit.png differ diff --git a/For_developers/Sphinx/source/_static/Diagramm_MarsAccess2.png b/For_developers/Sphinx/source/_static/Diagramm_MarsAccess2.png new file mode 100644 index 0000000000000000000000000000000000000000..2bc1a47cdba063d3dcf7ff0fedc85339f7df3172 Binary files /dev/null and b/For_developers/Sphinx/source/_static/Diagramm_MarsAccess2.png differ diff --git a/For_developers/Sphinx/source/_static/api_icon.png b/For_developers/Sphinx/source/_static/api_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7135861192f6b4388fe6e165c91bfdc55080b779 Binary files /dev/null and b/For_developers/Sphinx/source/_static/api_icon.png differ diff --git a/For_developers/Sphinx/source/_static/cc-by-40.png b/For_developers/Sphinx/source/_static/cc-by-40.png new file mode 100644 index 0000000000000000000000000000000000000000..c8473a24786ab016d9c3e717a380910f7cbb0fff Binary files /dev/null and b/For_developers/Sphinx/source/_static/cc-by-40.png differ diff --git a/For_developers/Sphinx/source/_static/change_icon.png b/For_developers/Sphinx/source/_static/change_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..03324970ad78e6ffd9abe35d2d003167a1a869af Binary files /dev/null and b/For_developers/Sphinx/source/_static/change_icon.png differ diff --git a/For_developers/Sphinx/source/_static/check_icon.png b/For_developers/Sphinx/source/_static/check_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1b7a4109f8806dae1aa25644694cb4c697bed070 Binary files /dev/null and b/For_developers/Sphinx/source/_static/check_icon.png differ diff --git a/For_developers/Sphinx/source/_static/css/custom.css b/For_developers/Sphinx/source/_static/css/custom.css new file mode 100644 index 0000000000000000000000000000000000000000..54870c379e4ef8652dd3cd7f3522d75a242ce0e9 --- /dev/null +++ b/For_developers/Sphinx/source/_static/css/custom.css @@ -0,0 +1,7 @@ +.underline { + text-decoration: underline; +} + +.wy-nav-content { + max-width: 1000px !important; +} diff --git a/For_developers/Sphinx/source/_static/css/theme_overrides.css b/For_developers/Sphinx/source/_static/css/theme_overrides.css new file mode 100644 index 0000000000000000000000000000000000000000..b13709631b14fd1341056106535df4b9bb13eb54 --- /dev/null +++ b/For_developers/Sphinx/source/_static/css/theme_overrides.css @@ -0,0 +1,11 @@ +/* override table width restrictions */ +@media screen and (min-width: 767px) { + + .wy-table-responsive table td { + /* !important prevents the common CSS stylesheets from overriding + this as on RTD they are loaded after this stylesheet */ + white-space: normal !important; + } + + +} diff --git a/For_developers/Sphinx/source/_static/download_icon.png b/For_developers/Sphinx/source/_static/download_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..73a2055653d42bcfe976dfde88738865f8a3881e Binary files /dev/null and b/For_developers/Sphinx/source/_static/download_icon.png differ diff --git a/For_developers/Sphinx/source/_static/fe7.0.4_radon_cc_12-03-2019.png b/For_developers/Sphinx/source/_static/fe7.0.4_radon_cc_12-03-2019.png new file mode 100644 index 0000000000000000000000000000000000000000..80be06f2b8bd542196eeae4ea89990b103428f52 Binary files /dev/null and b/For_developers/Sphinx/source/_static/fe7.0.4_radon_cc_12-03-2019.png differ diff --git a/For_developers/Sphinx/source/_static/guide_icon.png b/For_developers/Sphinx/source/_static/guide_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a2622f178f03db527fb55762da1c21fdaa8cf266 Binary files /dev/null and b/For_developers/Sphinx/source/_static/guide_icon.png differ diff --git a/For_developers/Sphinx/source/_static/help_icon.png b/For_developers/Sphinx/source/_static/help_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bd770a4de2a901a803e5dd68783aa03c7a2755ab Binary files /dev/null and b/For_developers/Sphinx/source/_static/help_icon.png differ diff --git a/For_developers/Sphinx/source/_static/install_icon.png b/For_developers/Sphinx/source/_static/install_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bd530027d114ca97959e6fc312cc8bf39b62f67f Binary files /dev/null and b/For_developers/Sphinx/source/_static/install_icon.png differ diff --git a/For_developers/Sphinx/source/_static/prog_icon.png b/For_developers/Sphinx/source/_static/prog_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d618f34543a4b9a7bc692faf0e27d2855857ba32 Binary files /dev/null and b/For_developers/Sphinx/source/_static/prog_icon.png differ diff --git a/For_developers/Sphinx/source/_static/python/hidden_code_block.py b/For_developers/Sphinx/source/_static/python/hidden_code_block.py new file mode 100644 index 0000000000000000000000000000000000000000..2d3600eeaa7c9c45707d953527de0b04b445b4d7 --- /dev/null +++ b/For_developers/Sphinx/source/_static/python/hidden_code_block.py @@ -0,0 +1,127 @@ +"""Simple, inelegant Sphinx extension which adds a directive for a +highlighted code-block that may be toggled hidden and shown in HTML. +This is possibly useful for teaching courses. + +The directive, like the standard code-block directive, takes +a language argument and an optional linenos parameter. The +hidden-code-block adds starthidden and label as optional +parameters. + +Examples: + +.. hidden-code-block:: python + :starthidden: False + + a = 10 + b = a + 5 + +.. hidden-code-block:: python + :label: --- SHOW/HIDE --- + + x = 10 + y = x + 5 + +Thanks to http://www.javascriptkit.com/javatutors/dom3.shtml for +inspiration on the javascript. + +Thanks to Milad 'animal' Fatenejad for suggesting this extension +in the first place. + +Written by Anthony 'el Scopz' Scopatz, January 2012. + +Released under the WTFPL (http://sam.zoy.org/wtfpl/). +""" + +from docutils import nodes +from docutils.parsers.rst import directives +from sphinx.directives.code import CodeBlock + +HCB_COUNTER = 0 + +js_showhide = """\ +<script type="text/javascript"> + function showhide(element){ + if (!document.getElementById) + return + + if (element.style.display == "block") + element.style.display = "none" + else + element.style.display = "block" + }; +</script> +""" + +def nice_bool(arg): + tvalues = ('true', 't', 'yes', 'y') + fvalues = ('false', 'f', 'no', 'n') + arg = directives.choice(arg, tvalues + fvalues) + return arg in tvalues + + +class hidden_code_block(nodes.General, nodes.FixedTextElement): + pass + + +class HiddenCodeBlock(CodeBlock): + """Hidden code block is Hidden""" + + option_spec = dict(starthidden=nice_bool, + label=str, + **CodeBlock.option_spec) + + def run(self): + # Body of the method is more or less copied from CodeBlock + code = u'\n'.join(self.content) + hcb = hidden_code_block(code, code) + hcb['language'] = self.arguments[0] + hcb['linenos'] = 'linenos' in self.options + hcb['starthidden'] = self.options.get('starthidden', True) + hcb['label'] = self.options.get('label', '+ show/hide code') + hcb.line = self.lineno + return [hcb] + + +def visit_hcb_html(self, node): + """Visit hidden code block""" + global HCB_COUNTER + HCB_COUNTER += 1 + + # We want to use the original highlighter so that we don't + # have to reimplement it. However it raises a SkipNode + # error at the end of the function call. Thus we intercept + # it and raise it again later. + try: + self.visit_literal_block(node) + except nodes.SkipNode: + pass + + # The last element of the body should be the literal code + # block that was just made. + code_block = self.body[-1] + + fill_header = {'divname': 'hiddencodeblock{0}'.format(HCB_COUNTER), + 'startdisplay': 'none' if node['starthidden'] else 'block', + 'label': node.get('label'), + } + + divheader = ("""<a href="javascript:showhide(document.getElementById('{divname}'))">""" + """{label}</a><br />""" + '''<div id="{divname}" style="display: {startdisplay}">''' + ).format(**fill_header) + + code_block = js_showhide + divheader + code_block + "</div>" + + # reassign and exit + self.body[-1] = code_block + raise nodes.SkipNode + + +def depart_hcb_html(self, node): + """Depart hidden code block""" + # Stub because of SkipNode in visit + + +def setup(app): + app.add_directive('hidden-code-block', HiddenCodeBlock) + app.add_node(hidden_code_block, html=(visit_hcb_html, depart_hcb_html)) \ No newline at end of file diff --git a/For_developers/Sphinx/source/_static/source_icon.png b/For_developers/Sphinx/source/_static/source_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..98d5780c92e36b315393f1b931a8c1321139796b Binary files /dev/null and b/For_developers/Sphinx/source/_static/source_icon.png differ diff --git a/For_developers/Sphinx/source/authors.rst b/For_developers/Sphinx/source/authors.rst new file mode 100644 index 0000000000000000000000000000000000000000..3992e33b734ee403c6a50ce04457212659bafd1d --- /dev/null +++ b/For_developers/Sphinx/source/authors.rst @@ -0,0 +1,28 @@ +************** +Developer Team +************** + +| Anne Philipp +| Department of Meteorology and Geophysics / +| Aerosol Physics and Environmental physics +| University of Vienna +| Althanstraße 14 / UZA II +| 1090 Vienna, Austria +| mail: anne.philipp [at] univie.ac.at + + + +| Leopold Haimberger +| Department of Meteorology and Geophysics +| University of Vienna +| Althanstraße 14 / UZA II +| 1090 Vienna, Austria +| mail: leopold.haimberger [at] univie.ac.at + + +.. toctree:: + :hidden: + :maxdepth: 2 + + + diff --git a/For_developers/Sphinx/source/changelog.rst b/For_developers/Sphinx/source/changelog.rst new file mode 100644 index 0000000000000000000000000000000000000000..31c200e2a57361b2ff74f19767322c0e4bb8d8c0 --- /dev/null +++ b/For_developers/Sphinx/source/changelog.rst @@ -0,0 +1,87 @@ +Changelog +========= + +.. toctree:: + :hidden: + :maxdepth: 2 + +.. _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-v71: + +Release v7.1 +------------ +New Features +############ + + * first set of UNIT tests + * first set of regression tests + * structured documentation with Sphinx + * local retrieval via `CDS API`_ for ERA 5 data + * simplified installation process + * disaggregation of precipitation with a `new algorithm`_ + +Changes +####### + * upgraded to Python3 + * applied PEP8 style guide + * use of genshi templates + * modularization of python source code + * upgrade from grib_api to ecCodes + * completely revised/refactored python section + * restructured program directories + +.. _ref-v704: + +Release v7.0.4 +-------------- +New Features +############ + + * Ensemble retrieval for ENFO and ELDA stream (ZAMG specific with extra synthesized ensembles for ELDA stream) + +Bug fixes +######### + + * diverse problems with ERA 5 retrieval + * diverse problems with CERA-20C retrieval + * BASETIME retrieval option + * `CONVERT2` FORTRAN program: initialise fields to 0. + (introduced initialization of :literal:`field` variable in the Fortran program + with :literal:`field=0.` in file :literal:`rwGRIB2.f90` to avoid getting unreasonable large numbers.) + +.. _ref-v703: + +Release v7.0.3 +-------------- +New Features +############ + + * output of mars requests to an extra file (debugging and documentation) + * CERA-20C download + * ERA 5 download + * public user interface with `ECMWF Web API`_ + * use of `ECMWF Web API`_ for local retrieval version + +.. _ref-v702: + +Release v7.0.2 +-------------- +New Features +############ + + * Python based version + +Changes +####### + + * korn shell scripts were substituted by python scripts + +.. _ref-v60: + +Release v0.1 - v6.0 +------------------- + + * old version which should no longer be used anymore diff --git a/For_developers/Sphinx/source/conf.py b/For_developers/Sphinx/source/conf.py new file mode 100644 index 0000000000000000000000000000000000000000..9a5c21f9f2b9daf8096e7effdd0b5652c2755762 --- /dev/null +++ b/For_developers/Sphinx/source/conf.py @@ -0,0 +1,214 @@ +# -*- coding: utf-8 -*- +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/master/config + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys, glob +sys.path.insert(0, os.path.abspath('../../../Source/Python')) +sys.path.insert(0, os.path.abspath('../../../Source/Python/Mods')) +sys.path.insert(0, os.path.abspath('../../../Source/Python/Classes')) + +sys.path.insert(0, os.path.abspath('_static/python')) +sys.setrecursionlimit(1500) + +#fortran_src = [f for f in os.listdir('../../../source/fortran') if '.f90' in f or '.f' in f] +#print(fortran_src) + +# -- Project information ----------------------------------------------------- + +project = u'flex_extract' +copyright = u'2019, Anne Philipp and Leopold Haimberger' +author = u'Anne Philipp and Leopold Haimberger' + +# The short X.Y version +version = u'7.1' +# The full version, including alpha/beta/rc tags +release = u'7.1 alpha' + + +# -- General configuration --------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.napoleon', + 'sphinx.ext.autodoc', + 'sphinx.ext.autosectionlabel', + 'sphinx.ext.todo', + 'sphinx.ext.coverage', + 'sphinx.ext.mathjax', + 'sphinx.ext.ifconfig', + 'sphinx.ext.viewcode', + 'sphinx.ext.githubpages', + 'sphinx-jsonschema', + 'sphinx.ext.intersphinx', + 'hidden_code_block', + 'sphinxcontrib.exceltable', + 'sphinxcontrib.seqdiag', + 'sphinxcontrib.blockdiag', + 'sphinx.ext.todo', +# 'sphinxfortran.fortran_autodoc', +# 'sphinxfortran.fortran_domain' +] + + +# Fontpath for seqdiag (truetype font) +seqdiag_fontpath = '/usr/share/fonts/dejavu/DejaVuSerif.ttf' + +# Fontpath for blockdiag (truetype font) +blockdiag_fontpath = '/usr/share/fonts/dejavu/DejaVuSerif.ttf' + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ['.rst', '.md', '.txt'] + +# The master toctree document. +master_doc = 'index' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path . +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + 'display_version': True, + 'titles_only': False, +} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'flex_extractdoc' + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + 'papersize': 'a4paper', + + # The font size ('10pt', '11pt' or '12pt'). + # + 'pointsize': '12pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'flex_extract.tex', u'flex\\_extract Documentation', + u'Anne Philipp and Leopold Haimberger', 'manual'), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'flex_extract', u'flex_extract Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'flex_extract', u'flex_extract Documentation', + author, 'flex_extract', 'One line description of project.', + 'Miscellaneous'), +] + + +# -- Extension configuration ------------------------------------------------- + +html_context = { + 'css_files': ['_static/css/custom.css', + '_static/css/theme_overrides.css' + ], +} + +# -- Options for todo extension ---------------------------------------------- + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True +#todo_link_only = True + + +# -- Add extra css ----------------------------------------------------------- +def setup(app): + app.add_stylesheet('css/custom.css') + + + diff --git a/For_developers/Sphinx/source/dev_guide.rst b/For_developers/Sphinx/source/dev_guide.rst new file mode 100644 index 0000000000000000000000000000000000000000..40dd2aebf4c3ccb836df066d95c380e9f86bee93 --- /dev/null +++ b/For_developers/Sphinx/source/dev_guide.rst @@ -0,0 +1,14 @@ +Developer Guide +=============== + + UNDER CONSTRUCTION + + +.. repository (how /who manages the code, where to get) + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Developers/gen_docu \ No newline at end of file diff --git a/For_developers/Sphinx/source/documentation.rst b/For_developers/Sphinx/source/documentation.rst new file mode 100644 index 0000000000000000000000000000000000000000..77e3f6f1178386ee63fd55f54157ba128858429e --- /dev/null +++ b/For_developers/Sphinx/source/documentation.rst @@ -0,0 +1,32 @@ +************* +Documentation +************* + + Overview (Under construction) + + Control & Input Data + + Output Data (Under construction) + + Disaggregation of Flux Data (Under construction) + + Vertical Coordinate (Under construction) + - Methods (GAUSS, ETA, OMEGA) + - CONVERT + + Auto Generated Documentation + - Python + - Fortran (Under construction) + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Documentation/overview + Documentation/input + Documentation/output + Documentation/disagg + Documentation/vertco + Documentation/api + diff --git a/For_developers/Sphinx/source/ecmwf_data.rst b/For_developers/Sphinx/source/ecmwf_data.rst new file mode 100644 index 0000000000000000000000000000000000000000..35ddb57bb0566255586d1cd9088d6d48b215dd71 --- /dev/null +++ b/For_developers/Sphinx/source/ecmwf_data.rst @@ -0,0 +1,43 @@ +********** +ECMWF Data +********** + +.. _ECMWF: http://www.ecmwf.int +.. _Member States: https://www.ecmwf.int/en/about/who-we-are/member-states + + +The European Centre for Medium-Range Weather Forecasts (`ECMWF`_), based in Reading, UK, is an independent intergovernmental organisation supported by 34 states. It is both a research institute and a full time operational service. It produces global numerical weather predictions and some other data which is fully available to the national meteorological services in the `Member States`_, Co-operating States and the broader community. Especially, the published re-analysis datasets are made available to the public with some limits in specific datasets. + +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 ``flex_extract``. +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 ``flex_extract`` 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 ``flex_extract`` they are different in the way of providing the vertical coordinate. + +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 ``flex_extract`` users. In the following sections the user can use them to get to know enough to understand how ``flex_extract`` is best used and to select the parameters of the ``CONTROL`` files. + + +:doc:`Ecmwf/access` + Description of available access methods to the ECMWF data. + +:doc:`Ecmwf/msdata` + Information about available data and parameters for member state users which can be retrieved with ``flex_extract`` + +:doc:`Ecmwf/pubdata` + Information about available data and parameters for the public datasets which can be retrieved with ``flex_extract`` + +:doc:`Ecmwf/hintsecmwf` + Collection of hints to best find information to define the dataset for retrievement and + to define the ``CONTROL`` files. + +:doc:`Ecmwf/ec-links` + Link collection for additional and useful information as well as references to specific dataset publications. + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Ecmwf/access + Ecmwf/msdata + Ecmwf/pubdata + Ecmwf/hintsecmwf + Ecmwf/ec-links + diff --git a/For_developers/Sphinx/source/evaluation.rst b/For_developers/Sphinx/source/evaluation.rst new file mode 100644 index 0000000000000000000000000000000000000000..a0d4d2a6aa7d8516b4420f448a168efcbf537dfc --- /dev/null +++ b/For_developers/Sphinx/source/evaluation.rst @@ -0,0 +1,47 @@ +Evaluation +========== + + UNDER CONSTRUCTION + + + + + + +.. Tests + - unit tests + - table with all files and their functions and which already have unit tests + - regression tests + - performance + - test runs with control files + + Metriken + - list all of them + + + Coverage + - test coverage?! + - documentation coverage + + Static Analysis + - pylint + - pyreverse + - radon + + Performance analysis: + - Whole software + - Disaggregation + - Convert2 + - prepare_flexpart + - Andere komponenten + + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Evaluation/staticcode + Evaluation/testcases + Evaluation/metrics + diff --git a/For_developers/Sphinx/source/index.rst b/For_developers/Sphinx/source/index.rst new file mode 100644 index 0000000000000000000000000000000000000000..30308dd714489b7890e2f28a3e04fe0d3104a2b9 --- /dev/null +++ b/For_developers/Sphinx/source/index.rst @@ -0,0 +1,152 @@ +.. flex_extract documentation master file, created by + sphinx-quickstart on Wed Oct 17 18:39:05 2018. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +================================================= +Welcome to ``flex_extract``'s user documentation! +================================================= + +``Flex_extract`` 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 FLEXTRA/FLEXPART Atmospheric Transport Modelling system. + +.. raw:: html + + <table style="width:100%;"> + <tr> + <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/install_icon.png"> + </div> + <h2><a href="installation.html">Installation</a></h2> + <ul> + <li><a href="installation.html#ref-requirements">Environment requirements</a></li> + <li><a href="installation.html#ref-download">Download flex_extract</a></li> + <li><a href="installation.html#ref-install-fe">Install flex_extract</a></li> + </ul> + </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=""> + </div> + <h2><a href="ecmwf_data.html">ECMWF data</a></h2> + <ul> + <li><a href="ecmwf_data.html">Overview</a></li> + <li><a href="Ecmwf/access.html">Access Modes</a></li> + <li><a href="Ecmwf/ec-links.html">Link Collection</a></li> + </ul> + </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/prog_icon.png"> + </div> + <h2><a href="documentation.html">Documentation</a></h2> + <ul> + <li><a href="Documentation/overview.html">Overview</a></li> + <li><a href="Documentation/input.html">Control & Input Data</a></li> + <li><a href="Documentation/output.html">Output Data</a></li> + </ul> + </td> + </tr> + <tr> + <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"> + </div> + <h2><a href="quick_start.html">Quick Start</a></h2> + <ul> + <li><a href="quick_start.html#job-preparation">Job preparation</a></li> + <li><a href="quick_start.html#selection-and-adjustment-of-control-files">Handling CONTROL files</a></li> + <li><a href="quick_start.html#hints-for-definition-of-some-parameter-combinations">Hints on parameter combinations</a></li> + </ul> + </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=""> + </div> + <h2><a href="evaluation.html">Evaluation</a></h2> + <ul> + <li><a href="Evaluation/staticcode.html">Code</a></li> + <li><a href="Evaluation/testcases.html">Functionality</a></li> + <li><a href="Evaluation/metrics.html">Regression</a></li> + </ul> + </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"> + </div> + <h2><a href="dev_guide.html">Developer</a></h2> + <ul> + <li><a href="Developers/gen_docu.html">Update Documentation</a></li> + <li><a href=""></a><Placeholder></li> + <li><a href=""></a><Placeholder></li> + </ul> + </td> + </tr> + </table> + <table style="width:100%;"> + <tr> + <td style="width:15%"> + </td> + <td style="width:30%;height:150px;"> + <div style="width:100%;height:60px;margin-left:10%;position:relative;"> + <img style="position:absolute;height:90%;vertical-align:bottom;" src="_static/change_icon.png"> + </div> + <h2><a href="changelog.html">Changelog</a></h2> + <ul> + <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;"> + <div style="width:100%;height:60px;margin-left:10%;position:relative;"> + <img style="position:absolute;height:100%;vertical-align:bottom;" src="_static/help_icon.png"> + </div> + <h2><a href="support.html">Support</a></h2> + <ul> + <li><a href="support.html#ref-ticket-system">Ticket system</a></li> + <li><a href="support.html#ref-mailing-list">Mailing list</a></li> + <li><a href="Support/known_bugs_issues.html">Known bugs or issues</a></li> + <li><a href="Support/faq.html">FAQ</a></li> + </ul> + </td> + <td style="width:10%"> + </td> + </tr> + </table> + <p></p> + +.. note:: + + .. figure:: _static/cc-by-40.png + :width: 100px + + This work is licensed under the Creative Commons Attribution 4.0 + International License. To view a copy of this license, visit + http://creativecommons.org/licenses/by/4.0/ or send a letter to + Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. + +.. toctree:: + :maxdepth: 4 + :caption: Table of Contents: + + installation + quick_start + ecmwf_data + documentation + evaluation + dev_guide + changelog + support + Support/faq + authors + + +.. Indices and tables +.. ================== + +.. * :ref:`genindex` +.. * :ref:`modindex` +.. * :ref:`search` + diff --git a/For_developers/Sphinx/source/installation.rst b/For_developers/Sphinx/source/installation.rst new file mode 100644 index 0000000000000000000000000000000000000000..a65057f9347f1bf3ae34740210df1295ce47f70b --- /dev/null +++ b/For_developers/Sphinx/source/installation.rst @@ -0,0 +1,263 @@ +************ +Installation +************ + +.. role:: underline + :class: underline + +.. toctree:: + :hidden: + :maxdepth: 2 + + +.. _Python 3: https://docs.python.org/3/ +.. _Python3: https://www.python.org/downloads/ +.. _Anaconda Python3: https://www.anaconda.com/distribution/#download-section + +.. _numpy: http://www.numpy.org/ +.. _ecmwf-api-client: https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home +.. _cdsapi: https://cds.climate.copernicus.eu/api-how-to +.. _genshi: https://genshi.edgewall.org/ +.. _eccodes for python: https://packages.debian.org/sid/python3-eccodes +.. _eccodes for conda: https://anaconda.org/conda-forge/eccodes +.. _gfortran: https://gcc.gnu.org/wiki/GFortran +.. _fftw3: http://www.fftw.org +.. _eccodes: https://software.ecmwf.int/wiki/display/ECC +.. _emoslib: https://software.ecmwf.int/wiki/display/EMOS/Emoslib +.. _member state: https://www.ecmwf.int/en/about/who-we-are/member-states +.. _registration form: https://apps.ecmwf.int/registration/ +.. _CDS API registration: https://cds.climate.copernicus.eu/user/register +.. _ECMWF ectrans site: https://confluence.ecmwf.int/display/ECAC/Unattended+file+transfer+-+ectrans +.. _ECaccess Presentation: https://confluence.ecmwf.int/download/attachments/45759146/ECaccess.pdf +.. _ECMWF's instructions on gateway server: https://confluence.ecmwf.int/display/ECAC/ECaccess+Home +.. _Computing Representative: https://www.ecmwf.int/en/about/contact-us/computing-representatives +.. _MARS access: https://confluence.ecmwf.int//display/WEBAPI/Access+MARS + +.. _download section: https://www.flexpart.eu/downloads + + + +The ``flex_extract`` 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. + +At first, go to the `user group <Ecmwf/access.html>`_ section and decide which group you belong to and follow the instructions at :ref:`ref-registration` 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 :doc:`Documentation/Overview/app_modes`: + +- Remote (member-state users only) :ref:`[installation]<ref-remote-mode>` +- Gateway (member-state users only) :ref:`[installation]<ref-gateway-mode>` +- Local, member-state user :ref:`[installation]<ref-local-mode>` +- Local, public user :ref:`[installation]<ref-local-mode>` + +Please follow the link :doc:`Documentation/Overview/app_modes` to get a description of the modes. + +.. note:: + + If you encounter any problems in the installation process, you can ask for :doc:`support`. + + + + + +.. _ref-registration: + +Registration at ECMWF +===================== + +The registration depends on the :doc:`Documentation/Overview/app_modes` 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. + ++--------------+------------------------------------+--------------+ +| | Member-state user | Public user | +| +---------+----------+---------------+--------------+ +| Data sets |Remote |Gateway |Local | Local | ++--------------+---------+----------+---------------+--------------+ +| Operational | 1 | 1 | 1,2 | - | ++--------------+---------+----------+---------------+--------------+ +| ERA-Interim | 1 | 1 | 1,2 | 2 | ++--------------+---------+----------+---------------+--------------+ +| CERA-20C | 1 | 1 | 1,2 | 2 | ++--------------+---------+----------+---------------+--------------+ +| ERA5 | 1 | 1 | 3 | - | ++--------------+---------+----------+---------------+--------------+ + + + +Registration options: + + 1.) Access through a member-state user account granted by the `Computing Representative`_. The credentials have to be provided during installation. + + 2.) Access through the ECMWF Web API. Need to sign in at `ECMWF Web API <https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home>`_ and configure the ECMWF key as described. Member-state users can sign in with their credentials from the `Computing Representative`_ and public users have to fill out the `registration form`_ to get an account. + + 3.) Access through the `CDS API <https://cds.climate.copernicus.eu/api-how-to>`_. Extra registration for member-state users is required at `Copernicus Climate Data Store <https://cds.climate.copernicus.eu/user/register>`_ including the configurations of the CDS key as described. This mode is currently not available for public users. See the note at `user group <Ecmwf/access.html>`_ for information. + + + +.. _ref-licence: + +Licence agreement for public datasets +===================================== + +Each ECMWF public dataset has its own licence which has to be accepted, regardless of the user group. + +For the *ERA-Interim* and *CERA-20C* datasets this can be done at the ECMWF website `Available ECMWF Public Datasets <https://confluence.ecmwf.int/display/WEBAPI/Available+ECMWF+Public+Datasets>`_. Log in and follow the licence links on the right side for each dataset and accept it. + +For the *ERA5* dataset this has to be done at the `Climate Data Store (CDS) website <https://cds.climate.copernicus.eu/cdsapp#!/search?type=dataset>`_. Log in and select, on the left panel, product type "Reanalysis" for finding *ERA5* datasets. Then follow any link with *ERA5* to the full dataset record, click on tab "Download data" and scroll down. There is a section "Terms of use" where you have to click the :underline:`Accept terms` button. + + + + + +.. _ref-download: + +Download ``flex_extract`` +========================= + +There are two options to download ``flex_extract``: + +tar ball + You can download a tar ball with the latest release from the `flex_extract page <https://www.flexpart.eu/wiki/FpInputMetEcmwf>`_ from our ``FLEXPART`` community website and then untar the file. + + .. code-block:: bash + + tar -xvf <flex_extract_vX.X.tar> + +git repo + Alternatively, if you have ``git`` 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. + + .. code-block:: bash + + $ git clone --single-branch --branch master https://www.flexpart.eu/gitmob/flexpart + + + + + +.. _ref-requirements: + +Dependencies +============ + +The software required for running ``flex_extract`` depends on the :doc:`Documentation/Overview/app_modes` and therefore is described in the respective specific installation sections. + +Generally speaking, ``flex_extract`` requires `Python 3`_ and Fortran together with certain modules / libraries. +We tested ``flex_extract`` with the python3 package from the the GNU/Linux distribution and Anaconda Python. The required python3 modules should prefarably be installed as distribution packages, or alternatively using Python's own package manager ``pip`` (this may mess up some aspects of your python installation, especially if you use ``pip`` as root. Think about using virtual environments.). + +Before installing the system packages check the availability with ``dpkg -s <package-name> | grep Status`` or ``rpm -q <package_name>``, depending on your system. For example: + +.. code-block:: sh + + $ dpkg -s libeccodes-dev | grep Status + # or + $ rpm -q libeccodes-dev + + + + + + +.. _ref-install-fe: + +Installation of ``flex_extract`` +================================ + +The actual installation of ``flex_extract`` is done by executing a shell script called ``setup.sh``. +It defines some parameters and calls a Python script passing the parameters as command line arguments. For details, see :doc:`Documentation/Input/setup`. + +For each application mode installation section we describe the requirements for the explicit +environment and how it is installed, test if it works and how the actual ``flex_extract`` +installation has to be done. At the users local side not all software has to be present for ``flex_extract``. + + +Select one of the following modes to install: + + :doc:`Installation/remote` + + :doc:`Installation/gateway` + + :doc:`Installation/local` + + +.. toctree:: + :hidden: + :maxdepth: 2 + + Installation/remote + Installation/gateway + Installation/local + + + + + + + + + + + + + + + + + + + + +``Flex_extract`` in combination with ``FLEXPART`` +================================================= + +Some users might wish to incorporate ``flex_extract`` directly into the ``FLEXPART`` distribution. Then the installation path has to be changed by setting the parameter `installdir` in the ``setup.sh`` file to the ``script`` directory in the ``FLEXPART`` root directoy. + + + + + + + + + +.. _ref-testinstallfe: + +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. + +For this, go from the ``flex_extract`` root directory to the ``Testing/Installation/Convert/`` directory and execute the Fortran program. + +.. note:: + Remember that you might have to log in at the ECMWF server if you used the installation for the **remote** or **gateway** mode. There you find the ``flex_extract`` root directory in your ``$HOME`` directory. + +.. code-block:: bash + + cd Testing/Installation/Convert + # execute the Fortran progam without arguments + ../../../Source/Fortran/CONVERT2 + +The installation was successfull if you obtain on standard output: + +.. code-block:: bash + + 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: + +.. code-block:: bash + + $ cd ../../../ + + + +Full test +--------- + + see :doc:`quick_start` + + diff --git a/For_developers/Sphinx/source/quick_start.rst b/For_developers/Sphinx/source/quick_start.rst new file mode 100644 index 0000000000000000000000000000000000000000..a34faa12ec79b748418c485b5fc577611551b3b8 --- /dev/null +++ b/For_developers/Sphinx/source/quick_start.rst @@ -0,0 +1,500 @@ +*********** +Quick Start +*********** + +``Flex_extract`` by itself is a command-line tool. With version 7.1 an upstream shell script was implemented which calls ``flex_extract`` with the command-line parameters. + +To submit a job with ``flex_extract`` change the working directory to the ``Run`` directory which is placed directly under the ``flex_extract_vX.X`` root directory (``X.X`` is the version number): + +.. code-block:: bash + + cd <path-to-flex_extract_vX.X>/Run + +Within this directory you can find everything you need to modify and run ``flex_extract``. The following tree shows a shortened list of directories and important files. The ``*`` serves as a wildcard. The brackets ``[]`` means that the file appearance depends on the mode of application and night not be present. + +.. code-block:: bash + + Run + ├── Control + │ ├── CONTROL_* + ├── Jobscripts + │ ├── compilejob.ksh + │ ├── job.ksh + │ ├── [joboper.ksh] + ├── Workspace + │ ├── CERA_example + │ │ ├── CE000908* + ├── [ECMWF_ENV] + ├── run_local.sh + └── run.sh + +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. + +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. + +From version 7.1 on, the ``run.sh`` (or ``run_local.sh``) script is the main access point to ``flex_extract``. + +.. note:: + + Note that, for experienced users (or users of older versions), it is still possible to access ``flex_extract`` directly via the ``submit.py`` script which can be found in the directory ``flex_extract_vX.X/Source/Python``. + + + +Job preparation +=============== + +To actually start a job with ``flex_extract`` it is only necessary to submit the ``run.sh`` or ``run_local.sh`` script on the command-line. For the specification of dataset and the selection of the access mode it is necessary to select and modify a ``CONTROL`` file and change the parameters in the user section of the ``run`` scripts. The following sections describes the differences in the application modes and where the results will be stored. + + +Remote and gateway modes +------------------------ + +For member state users it is recommended to use the *remote* or *gateway* 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. + +Remote mode + The only difference between both modes is the users working location. In the *remote* mode you have to login to the ECMWF server and then go to the ``Run`` directory as shown above. At ECMWF servers ``flex_extract`` is installed in the ``$HOME`` directory. However, to be able to start the program you have to load the ``Python3`` environment with the module system first. + + .. code-block:: bash + + # Remote mode + ssh -X <ecuid>@ecaccess.ecmwf.int + + .. code-block:: bash + + # On ECMWF server + [<ecuid>@ecgb11 ~]$ module load python3 + [<ecuid>@ecgb11 ~]$ cd flex_extract_vX.X/Run + + +Gateway mode + For the gateway mode you have to log in on the gateway server and go to the ``Run`` directory of ``flex_extract``: + + .. code-block:: bash + + # Gateway mode + ssh <user>@<gatewayserver> + cd <path-to-flex_extract_vX.X>/Run + + +From here on the working process is the same for both modes. + +For your first submission you should use one of the example ``CONTROL`` files stored in the ``Control`` directory. We recommend to extract *CERA-20C* data since they usually guarantee quick results and are best for testing reasons. + +Therefore open the ``run.sh`` file and modify the parameter block marked in the file as shown below: + +.. code-block:: bash + + # ----------------------------------------------------------------- + # AVAILABLE COMMANDLINE ARGUMENTS TO SET + # + # THE USER HAS TO SPECIFY THESE PARAMETERS: + + QUEUE='ecgate' + START_DATE=None + END_DATE=None + DATE_CHUNK=None + JOB_CHUNK=3 + BASETIME=None + STEP=None + LEVELIST=None + AREA=None + INPUTDIR=None + OUTPUTDIR=None + PP_ID=None + JOB_TEMPLATE='job.temp' + CONTROLFILE='CONTROL_CERA' + DEBUG=0 + REQUEST=2 + PUBLIC=0 + + +This would retrieve a one day (08.09.2000) *CERA-20C* dataset with 3 hourly temporal resolution and a small 1° domain over Europe. Since the ``ectrans`` parameter is set to ``1`` the resulting output files will be transferred to the local gateway into the path stored in the destination (SEE INSTRUCTIONS FROM INSTALLATION). The parameters listed in the ``run.sh`` file would overwrite existing settings in the ``CONTROL`` file. + +To start the retrieval you only have to start the script by: + +.. code-block:: bash + + ./run.sh + +``Flex_extract`` will print some information about the job. If there is no error in the submission to the ECMWF server you will see something like this: + +.. code-block:: bash + + ---- On-demand mode! ---- + The job id is: 10627807 + You should get an email per job with subject flex.hostname.pid + FLEX_EXTRACT JOB SCRIPT IS SUBMITED! + + +Once submitted you can check the progress of the submitted job using ``ecaccess-job-list``. You should get an email after the job is finished with a detailed protocol of what was done. + +In case the job fails you will receive an email with the subject ``ERROR!`` and the job name. You can then check for information in the email or you can check on ECMWF server in the ``$SCRATCH`` directory for debugging information. + +.. code-block:: bash + + cd $SCRATCH + ls -rthl + +The last command lists the most recent logs and temporary retrieval directories (usually ``pythonXXXXX``, where XXXXX is the process id). Under ``pythonXXXXX`` a copy of the ``CONTROL`` file is stored under the name ``CONTROL``, the protocol is stored in the file ``prot`` and the temporary files as well as the resulting files are stored in a directory ``work``. The original name of the ``CONTROL`` file is stored in this new file under parameter ``controlfile``. + +.. code-block:: bash + :caption: "Example structure of ``flex_extract`` output directory on ECMWF servers." + + pythonXXXXX + ├── CONTROL + ├── prot + ├── work + │ ├── 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. + +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. + + +Local mode +---------- + +To get to know the working process and to start your first submission you could use one of the example ``CONTROL`` files stored in the ``Control`` directory as they are. For quick results and for testing reasons it is recommended to extract *CERA-20C* data. + +Open the ``run_local.sh`` file and modify the parameter block marked in the file as shown below. The differences are highlighted. + ++-----------------------------------------------+-----------------------------------------------+ +| Take this for **member-state user** | Take this for **public user** | ++-----------------------------------------------+-----------------------------------------------+ +| .. code-block:: bash | .. code-block:: bash | +| :emphasize-lines: 16,20,23 | :emphasize-lines: 16,20,23 | +| | | +| # -----------------------------------------| # -----------------------------------------| +| # AVAILABLE COMMANDLINE ARGUMENTS TO SET | # AVAILABLE COMMANDLINE ARGUMENTS TO SET | +| # | # | +| # THE USER HAS TO SPECIFY THESE PARAMETERs:| # THE USER HAS TO SPECIFY THESE PARAMETERs:| +| # | # | +| | | +| QUEUE='' | QUEUE='' | +| START_DATE=None | START_DATE=None | +| END_DATE=None | END_DATE=None | +| DATE_CHUNK=None | DATE_CHUNK=None | +| JOB_CHUNK=None | JOB_CHUNK=None | +| BASETIME=None | BASETIME=None | +| STEP=None | STEP=None | +| LEVELIST=None | LEVELIST=None | +| AREA=None | AREA=None | +| INPUTDIR='./Workspace/CERA' | INPUTDIR='./Workspace/CERApublic' | +| OUTPUTDIR=None | OUTPUTDIR=None | +| PP_ID=None | PP_ID=None | +| JOB_TEMPLATE='' | JOB_TEMPLATE='' | +| CONTROLFILE='CONTROL_CERA' | CONTROLFILE='CONTROL_CERA.public' | +| DEBUG=0 | DEBUG=0 | +| REQUEST=0 | REQUEST=0 | +| PUBLIC=0 | PUBLIC=1 | +| | | ++-----------------------------------------------+-----------------------------------------------+ + + +This would retrieve a one day (08.09.2000) *CERA-20C* dataset with 3 hourly temporal resolution and a small 1° domain over Europe. The destination location for this retrieval will be within the ``Workspace`` directory within ``Run``. This can be changed to whatever path you like. The parameters listed in ``run_local.sh`` would overwrite existing settings in the ``CONTROL`` file. + +To start the retrieval you then start the script by: + +.. code-block:: bash + + ./run_local.sh + + +While job submission on the local host is convenient and easy to monitor (on standard output), there are a few caveats with this option: + + 1. 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. + 2. 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 ``etadot`` 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. + + + + +Selection and adjustment of ``CONTROL`` files +============================================= + + +This section describes how to work with the ``CONTROL`` files. A detailed explanation of ``CONTROL`` file parameters and naming compositions can be found `here <Documentation/Input/control.html>`_. The more accurately the ``CONTROL`` file describes the retrieval needed, the fewer command-line parameters are needed to be set in the ``run`` scripts. With version ``7.1`` all ``CONTROL`` file parameters have default values. They can be found in section `CONTROL parameters <Documentation/Input/control_params.html>`_ or in the ``CONTROL.documentation`` file within the ``Control`` directory. Only those parameters which need to be changed for a dataset retrieval needs to be set in a ``CONTROL`` file! + +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: + + - **Public users** can use a web mask to check on data or list available data at this `Public datasets web interface <https://apps.ecmwf.int/datasets/>`_. + - **Member state users** can check availability of data online in the `MARS catalogue <https://apps.ecmwf.int/mars-catalogue/>`_. + +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 ``flex_extract`` to fail. The following figure gives an example how the web interface would look like: + + +.. _ref-fig-mars-catalogue-ss: + +.. 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. + + +``Flex_extract`` is specialised to retrieve a limited number of datasets, namely *ERA-Interim*, *CERA-20C*, *ERA5* and *HRES (operational data)* as well as the *ENS (operational data, 15-day forecast)*. 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 ``1`` to signal that the actual version should be used. + +The next level of differentiation would be the field type, level type and time period. ``Flex_extract`` 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 ``CONTROL`` files. You can see this in the naming of the example files: + + +.. code-block:: bash + :caption: "Current example ``CONTROL`` files distributed with ``flex_extract``. " + + CONTROL_CERA + CONTROL_CERA.global + CONTROL_CERA.public + CONTROL_EA5 + CONTROL_EA5.global + 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 + + + +The main differences and features in the datasets are listed in the table shown below: + + +.. _ref-tab-dataset-cmp: + +.. 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. + + +.. note:: + + 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 `CONTROL parameters <Documentation/Input/control_params.html>`_ or have a look at the ECMWF user documentation for `MARS keywords <https://confluence.ecmwf.int/display/UDOC/MARS+keywords>`_ + + +In the following we shortly discuss the main retrieval opportunities of the different datasets and categoize the ``CONTROL`` files. + + +Public datasets +--------------- + +The main difference in the definition of a ``CONRTOL`` file for a public dataset is the setting of the parameter ``DATASET``. This specification enables the selection of a public dataset in MARS. Otherwise the request would not find the dataset. +For the two public datasets *CERA-20C* and *ERA-Interim* an example file with the ending ``.public`` is provided and can be used straightaway. + +.. code-block:: bash + + CONTROL_CERA.public + CONTROL_EI.public + +For *CERA-20C* it seems that there are no differences in the dataset against the full dataset, while the *public ERA-Interim* 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 *public ERA-Interim*. + +.. note:: + + In general, *ERA5* is a public dataset. However, since the model levels are not yet publicly available, it is not possible to retrieve *ERA5* data to drive the ``FLEXPART`` model. As soon as this is possible it will be announced at the community website and per newsletter. + + +CERA +---- + +For this dataset it is important to keep in mind that the dataset is available for the period 09/1901 until 12/2010 and the temporal resolution is limited to 3-hourly fields. +It is also a pure ensemble data assimilation dataset and is stored under the ``enda`` stream. It has ``10`` ensemble members. The example ``CONTROL`` files will only select the first member (``number=0``). You may change this to another number or a list of numbers (e.g. ``NUMBER 0/to/10``). +Another important difference to all other datasets is the forecast starting time which is 18 UTC. Which means that the forecast in *CERA-20C* for flux fields is 12 hours long. Since the forecast extends over a single day we need to extract one day in advance and one day subsequently. This is automatically done in ``flex_extract``. + + +ERA 5 +----- + +This is the newest re-analysis dataset and has a temporal resolution of 1-hourly analysis fields. Up to date it is available until April 2019 with regular release of new months. +The original horizontal resolution is ``0.28125°`` 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 ``0.25`` for the resolution which MARS will automatically interpolate. +The forecast starting time is ``06/18 UTC`` which is important for the flux data. This should be set in the ``CONTROL`` file via the ``ACCTIME 06/18`` parameter in correspondence with ``ACCMAXSTEP 12`` and ``ACCTYPE FC``. + +.. note:: + + We know that *ERA5* also has an ensemble data assimilation system but this is not yet retrievable with ``flex_extract`` since the deaccumulation of the flux fields works differently in this stream. Ensemble retrieval for *ERA5* is a future ToDo. + + + +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. + + +.. todo:: + + @LEO: please check the complete description and functionality of the CONTROL FILEs + +Operational data +---------------- + +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 :ref:`ref-tab-dataset-cmp` 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 ``ETA`` should be set to ``1`` to save computation time. The horizontal resolution can be up to ``0.1°`` and in combination with ``137`` 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 ``JOB_CHUNK`` parameter in ``run.sh`` script) to avoid job failures due to exceeding limits. + +``CONTROL`` files for normal daily retrievals with a mix of analysis and forecast fields are listed below: + +.. code-block:: bash + + CONTROL_OD.OPER.4V.eta.global + CONTROL_OD.OPER.FC.eta.global + CONTROL_OD.OPER.FC.eta.highres + CONTROL_OD.OPER.FC.gauss.highres + +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:: + + Please see `Information about MARS retrievement <https://confluence.ecmwf.int/display/UDOC/Retrieve#Retrieve-Retrievalefficiency>`_ to get to know hints about retrieval efficiency and troubleshooting. + + + +Pure forecast + 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 *Forecast (FC)*, *Control forecast (CF)* and *Calibration/Validation forecast (CV)*. + The *CV* field type was only available 3-hourly from 2006 up to 2016. It is recommended to use the *CF* type since this is available from 1992 (3-hourly) on up to today in 1-hourly temporal resolution. *CV* and *CF* field types belong to the *Ensemble prediction system (ENFO)* 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! + + .. code-block:: bash + + CONTROL_OD.ENFO.CF.36hours + CONTROL_OD.ENFO.CV.36hours + CONTROL_OD.OPER.FC.36hours + + + +Half-day retrievals + 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 ``twiceaday`` 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 ``BASETIME`` parameter which tells MARS to extract the exact 12 hours upfront to the selected date. If the ``CONTROL`` file with ``basetime`` in the filename is used this can be done for any other date too. + + .. code-block:: bash + + CONTROL_OD.OPER.FC.eta.basetime + CONTROL_OD.OPER.FC.operational + CONTROL_OD.OPER.FC.twiceaday.1hourly + CONTROL_OD.OPER.FC.twiceaday.3hourly + + + + +Ensemble members + The retrieval of ensemble members were already mentioned in the pure forecast section and for *CERA-20C* data. + In this ``flex_extract`` version there is an additional possibility to retrieve the *Ensemble Long window Data Assimilation (ELDA)* stream from the real-time dataset. This model version has (up to May 2019) 25 ensemble members and a control run (``number 0``). 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 ``DOUBLEELDA`` and set it to ``1``. + + + .. code-block:: bash + + 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 +----------------- + +rrint + Decides if the precipitation flux data uses the old (``0``) or new (``1``) disaggregation scheme. See :doc:`Documentation/disagg` for explanaition. +cwc + Decides if the total cloud water content will be retrieved (set to ``1``) in addition. This is the sum of cloud liquid and cloud ice water content. +addpar + With this parameter an additional list of 2-dimensional, non-flux parameters can be retrieved. Use format ``param1/param2/.../paramx`` to list the parameters. Please be consistent in using either the parameter IDs or the short names. +doubleelda + Use this to double the ensemble member number by adding further disturbance to each member. +debug + If set to ``1`` all temporary files were kept at the end. Otherwise everything except the final output files will be deleted. +request + This produces an extra *csv* file ``mars_requests.csv`` where the content of each mars request of the job is stored. Useful for debugging and documentation. +mailfail + 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 ``${USER}`` to the list ( comma seperated ) or mail addresses. + + + +Hints for definition of some parameter combinations +--------------------------------------------------- + +Field types and times + 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 ``0``. 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 ``TYPE``, ``TIME`` and ``STEP`` because the temporal (hourly) resolution with the ``DTIME`` parameter will select the correct combinations. + + .. code-block:: bash + :caption: Example of a setting for the field types and temporal resolution. + + DTIME 3 + TYPE AN FC FC FC AN FC FC FC + TIME 00 00 00 00 12 12 12 12 + STEP 00 03 06 09 00 03 06 09 + + +Vertical velocity + The vertical velocity for ``FLEXPART`` 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 :doc:`Documentation/vertco` for a detailed explanation. The ``ETADIFF``, ``OMEGA`` and ``OMEGADIFF`` versions are only recommended for debugging and testing reasons. Usually it is a decision between ``GAUSS`` and ``ETA``, where for ``GAUSS`` 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 ``ETA`` the latitude/longitude fields of horizontal wind fields and eta-coordinate are to be retrieved. It is recommended to use ``ETA`` where possible due to a reduced computation time. + + .. code-block:: bash + :caption: Example setting for the vertical coordinate retrieval. + + GAUSS 0 + ETA 1 + ETADIFF 0 + DPDETA 1 + OMEGA 0 + OMEGADIFF 0 + + +Grid resolution and domain + The grid and domain selection depends on each other. The grid can be defined in the format of normal degrees (e.g. ``1.``) or as in older versions by 1/1000. degrees (e.g. ``1000`` for ``1°``). + 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 ``RESOL``. For information about how to select an appropriate value you can read the explanation of the MARS keyword `here <https://confluence.ecmwf.int/display/UDOC/Post-processing+keywords#Post-processingkeywords-resol>`_ and in `this table <https://confluence.ecmwf.int/display/UDOC/Retrieve#Retrieve-Truncationbeforeinterpolation>`_. + + .. code-block:: bash + :caption: Example setting for a northern hemisphere domain with a grid of ``0.25°``. + + GRID 0.25 + RESOL 799 + SMOOTH 0 + UPPER 90. + LOWER 0. + LEFT -179.75 + RIGHT 180. + + +Flux data + 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 ``TYPE``, ``TIME`` and ``STEP`` any longer. Select a forecast field type ``ACCTYPE``, the forecast starting time ``ACCTIME`` and the maximum forecast step ``ACCMAXSTEP``. The ``DTIME`` parameter defines the temporal resolution for the whole period. + + .. code-block:: bash + :caption: Example setting for the definition of flux fields. + + DTIME 3 + ACCTYPE FC + ACCTIME 00/12 + ACCMAXSTEP 36 + + + +.. toctree:: + :hidden: + :maxdepth: 2 + +.. user_guide/oper_modes +.. user_guide/ecmwf +.. user_guide/how_to +.. user_guide/control_templates + diff --git a/For_developers/Sphinx/source/support.rst b/For_developers/Sphinx/source/support.rst new file mode 100644 index 0000000000000000000000000000000000000000..1bfcc5e5b6e1482401bcbe267a86a96d54ed74b5 --- /dev/null +++ b/For_developers/Sphinx/source/support.rst @@ -0,0 +1,65 @@ +Support +======= +.. toctree:: + :hidden: + :maxdepth: 2 + + +.. contents:: + :local: + :depth: 2 + +.. _ref-ticket-system: + +Ticket system +------------- +.. _ticket system: https://www.flexpart.eu/report/1 + +The community website http://flexpart.eu contains a +`ticket system`_ which can be used to report any issue or a proposition for a new feature. + +The tickets can be viewed by anyone, to create a ticket a registration is necessary. Since the automatic registration is unavailable, please send an email to the ``flexpart.eu[at]zamg.ac.at`` and you will receive your credentials (with some delay). + + +.. _ref-mailing-list: + +Mailing list +------------ + +The mailing list is mainly for the ``FLEXPART`` users to ask questions or share experiences regarding the whole ``FLEXPART`` process with the community. This can be a lot faster than asking only the developers for help. Since ``flex_extract`` is a preprocessor to ``FLEXPART`` this is the right place to ask for help. + +Additionally, from time to time, there will be announcements for all FLEXPART users, such as new release versions of ``FLEXPART`` or ``flex_extract``. + +Just write a mail to: ``flexpart[at]lists.univie.ac.at`` + + +.. _ref-reporting: + +Reporting an issue +------------------ + +To properly report a problem or bug, please provide as much information as possible. +This includes: + +* the flex_extract version +* a flex_extract log file (output of submit.py script) +* the CONTROL file +* the commandline arguments or run(_local).sh settings and +* a description of the environment you used (Unix/Linux version, library version, application mode, etc.). + + +.. _ref-known-issues: + +Known bugs and issues +--------------------- +A collection of reported and detected bugs and issues with solutions can be found :doc:`here <Support/known_bugs_issues>`. + + +.. _ref-faq: + +FAQ +--- +A list of frequently asked questions and hints for the application of ``flex_extract`` can be found :doc:`here <Support/faq>`. + + + diff --git a/For_developers/Sphinx/source/todo.rst b/For_developers/Sphinx/source/todo.rst new file mode 100644 index 0000000000000000000000000000000000000000..902e69e5f3b60fdd23fb121dc013416d5b0c212c --- /dev/null +++ b/For_developers/Sphinx/source/todo.rst @@ -0,0 +1,8 @@ +===== +ToDos +===== + + + + +.. todolist:: diff --git a/For_developers/SubmitParameters.xls b/For_developers/SubmitParameters.xls new file mode 100644 index 0000000000000000000000000000000000000000..cdabd624d54618daf8c8608e24864cfd4352f33f Binary files /dev/null and b/For_developers/SubmitParameters.xls differ diff --git a/For_developers/mk_upload_tarball.sh b/For_developers/mk_upload_tarball.sh new file mode 100755 index 0000000000000000000000000000000000000000..aa7ba79560744aa3ba0c3ffc2984df5b5ccdc95d --- /dev/null +++ b/For_developers/mk_upload_tarball.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# +# @Author: Anne Philipp +# +# @Date: March, 1 2019 +# +# @Description: Makes a tarball for uploading and distributing on flexpart.eu +# +# @Licence: +# (C) Copyright 2014-2019. +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +# + +tarname='flex_extract_v7.1.tar.gz' +tardir='flex_extract_v7.1' + +# go back to directory which is above flex_extract directory +cd ../.. + +# create tar-ball +tar -zcvf $tarname $tardir\ + --exclude=$tardir'/Source/Fortran/*.o' \ + --exclude=$tardir'/Source/Fortran/*.mod' \ + --exclude=$tardir'/Source/Fortran/calc_etadot' \ + --exclude=$tardir'/Source/Python/*.pyc' \ + --exclude=$tardir'/Source/Pythontest/*.pyc' \ + --exclude=$tardir'/Source/Pythontest/__pycache__' \ + --exclude=$tardir'/Source/Pythontest/.pytest_cache' \ + --exclude=$tardir'/.git' \ + --exclude=$tardir'/.gitignore' \ + --exclude=$tardir'/Run/ECMWF_ENV' \ + --exclude=$tardir'/Run/Workspace' \ + --exclude=$tardir'/Run/Jobscripts/*sh' \ + --exclude=$tardir'/Testing/Regression/Compare_gribfiles/7.0.4/BASETIME' \ + --exclude=$tardir'/Testing/Regression/Compare_gribfiles/7.0.4/CERA' \ + --exclude=$tardir'/Testing/Regression/Compare_gribfiles/7.0.4/EA5' \ + --exclude=$tardir'/Testing/Regression/Compare_gribfiles/7.0.4/EI' \ + --exclude=$tardir'/Testing/Regression/Compare_gribfiles/7.0.4/ETAOD' \ + --exclude=$tardir'/Testing/Regression/Compare_gribfiles/7.0.4/GAUSSOD' \ + --exclude=$tardir'/Testing/Regression/Compare_gribfiles/7.0.4/PUREFC' \ + --exclude=$tardir'/Testing/Regression/Compare_gribfiles/7.1/BASETIME' \ + --exclude=$tardir'/Testing/Regression/Compare_gribfiles/7.1/CERA' \ + --exclude=$tardir'/Testing/Regression/Compare_gribfiles/7.1/EA5' \ + --exclude=$tardir'/Testing/Regression/Compare_gribfiles/7.1/EI' \ + --exclude=$tardir'/Testing/Regression/Compare_gribfiles/7.1/ETAOD' \ + --exclude=$tardir'/Testing/Regression/Compare_gribfiles/7.1/GAUSSOD' \ + --exclude=$tardir'/Testing/Regression/Compare_gribfiles/7.1/PUREFC' \ + --exclude=$tardir'/setup_local.sh' \ + --exclude=$tardir'/.empty' \ + + diff --git a/For_developers/pylintrc b/For_developers/pylintrc new file mode 100644 index 0000000000000000000000000000000000000000..51b44463837dd576dff335657ade4d3f1944674b --- /dev/null +++ b/For_developers/pylintrc @@ -0,0 +1,552 @@ +[MASTER] + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code +extension-pkg-whitelist= + +# Add files or directories to the blacklist. They should be base names, not +# paths. +ignore=CVS + +# Add files or directories matching the regex patterns to the blacklist. The +# regex matches against base names, not paths. +ignore-patterns= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. +jobs=1 + +# List of plugins (as comma separated values of python modules names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Specify a configuration file. +#rcfile= + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED +confidence= + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once).You can also use "--disable=all" to +# disable everything first and then reenable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use"--disable=all --enable=classes +# --disable=W" +disable=print-statement, + parameter-unpacking, + unpacking-in-except, + old-raise-syntax, + backtick, + long-suffix, + old-ne-operator, + old-octal-literal, + import-star-module-level, + non-ascii-bytes-literal, + raw-checker-failed, + bad-inline-option, + locally-disabled, + locally-enabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + apply-builtin, + basestring-builtin, + buffer-builtin, + cmp-builtin, + coerce-builtin, + execfile-builtin, + file-builtin, + long-builtin, + raw_input-builtin, + reduce-builtin, + standarderror-builtin, + unicode-builtin, + xrange-builtin, + coerce-method, + delslice-method, + getslice-method, + setslice-method, + no-absolute-import, + old-division, + dict-iter-method, + dict-view-method, + next-method-called, + metaclass-assignment, + indexing-exception, + raising-string, + reload-builtin, + oct-method, + hex-method, + nonzero-method, + cmp-method, + input-builtin, + round-builtin, + intern-builtin, + unichr-builtin, + map-builtin-not-iterating, + zip-builtin-not-iterating, + range-builtin-not-iterating, + filter-builtin-not-iterating, + using-cmp-argument, + eq-without-hash, + div-method, + idiv-method, + rdiv-method, + exception-message-attribute, + invalid-str-codec, + sys-max-int, + bad-python3-import, + deprecated-string-function, + deprecated-str-translate-call, + deprecated-itertools-function, + deprecated-types-field, + next-method-defined, + dict-items-not-iterating, + dict-keys-not-iterating, + dict-values-not-iterating + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable=c-extension-no-member + + +[REPORTS] + +# Python expression which should return a note less than 10 (10 is the highest +# note). You have access to the variables errors warning, statement which +# respectively contain the number of errors / warnings messages and the total +# number of statements analyzed. This is used by the global evaluation report +# (RP0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details +#msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio).You can also give a reporter class, eg +# mypackage.mymodule.MyReporterClass. +output-format=text + +# Tells whether to display a full report or only the messages +reports=no + +# Activate the evaluation score. +score=yes + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=optparse.Values,sys.exit + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether missing members accessed in mixin class should be ignored. A +# mixin class is detected if its name ends with "mixin" (case insensitive). +ignore-mixin-members=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis. It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + + +[SIMILARITIES] + +# Ignore comments when computing similarities. +ignore-comments=yes + +# Ignore docstrings when computing similarities. +ignore-docstrings=yes + +# Ignore imports when computing similarities. +ignore-imports=no + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes +max-spelling-suggestions=4 + +# Spelling dictionary name. Available dictionaries: none. To make it working +# install python-enchant package. +spelling-dict= + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to indicated private dictionary in +# --spelling-private-dict-file option instead of raising a message. +spelling-store-unknown-words=no + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid to define new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expectedly +# not used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. Default to name +# with leading underscore +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins + + +[BASIC] + +# Naming style matching correct argument names +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style +#argument-rgx= + +# Naming style matching correct attribute names +attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style +#attr-rgx= + +# Bad variable names which should always be refused, separated by a comma +bad-names=foo, + bar, + baz, + toto, + tutu, + tata + +# Naming style matching correct class attribute names +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style +#class-attribute-rgx= + +# Naming style matching correct class names +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming-style +#class-rgx= + +# Naming style matching correct constant names +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma +good-names=i, + j, + k, + ex, + Run, + _, + f, + fo, + c, + p, + e, + s, + l, + d, + dd, + v + +# Include a hint for the correct naming format with invalid-name +include-naming-hint=no + +# Naming style matching correct inline iteration names +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style +#inlinevar-rgx= + +# Naming style matching correct method names +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style +#method-rgx= + +# Naming style matching correct module names +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +property-classes=abc.abstractproperty + +# Naming style matching correct variable names +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style +#variable-rgx= + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + + +[LOGGING] + +# Logging modules to check that the string format arguments are in logging +# function parameter format +logging-modules=logging + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )?<?https?://\S+>?$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=100 + +# Maximum number of lines in a module +max-module-lines=1000 + +# List of optional constructs for which whitespace checking is disabled. `dict- +# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. +# `trailing-comma` allows a space between comma and closing bracket: (a, ). +# `empty-line` allows space-only lines. +no-space-check=trailing-comma, + dict-separator + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[DESIGN] + +# Maximum number of arguments for function / method +max-args=10 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Maximum number of boolean expressions in a if statement +max-bool-expr=5 + +# Maximum number of branch for function / method body +max-branches=12 + +# Maximum number of locals for function / method body +max-locals=15 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + +# Maximum number of return / yield for function / method body +max-returns=6 + +# Maximum number of statements in function / method body +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[IMPORTS] + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Deprecated modules which should not be used, separated by a comma +deprecated-modules=regsub, + TERMIOS, + Bastion, + rexec + +# Create a graph of external dependencies in the given file (report RP0402 must +# not be disabled) +ext-import-graph= + +# Create a graph of every (i.e. internal and external) dependencies in the +# given file (report RP0402 must not be disabled) +import-graph= + +# Create a graph of internal dependencies in the given file (report RP0402 must +# not be disabled) +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + + +[CLASSES] + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when being caught. Defaults to +# "Exception" +overgeneral-exceptions=Exception diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000000000000000000000000000000000000..0692ca105d143ada9429b4c586ab9c3a4c988602 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,159 @@ +## creative commons + +# Attribution 4.0 International + +Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. + +### Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. + +* __Considerations for licensors:__ Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. [More considerations for licensors](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensors). + +* __Considerations for the public:__ By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. [More considerations for the public](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensees). + +## Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +### Section 1 – Definitions. + +a. __Adapted Material__ means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. + +b. __Adapter's License__ means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. + +c. __Copyright and Similar Rights__ means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + +d. __Effective Technological Measures__ means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. + +e. __Exceptions and Limitations__ means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. + +f. __Licensed Material__ means the artistic or literary work, database, or other material to which the Licensor applied this Public License. + +g. __Licensed Rights__ means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. + +h. __Licensor__ means the individual(s) or entity(ies) granting rights under this Public License. + +i. __Share__ means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. + +j. __Sui Generis Database Rights__ means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. + +k. __You__ means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +### Section 2 – Scope. + +a. ___License grant.___ + + 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + + A. reproduce and Share the Licensed Material, in whole or in part; and + + B. produce, reproduce, and Share Adapted Material. + + 2. __Exceptions and Limitations.__ For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + + 3. __Term.__ The term of this Public License is specified in Section 6(a). + + 4. __Media and formats; technical modifications allowed.__ The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + + 5. __Downstream recipients.__ + + A. __Offer from the Licensor – Licensed Material.__ Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + + B. __No downstream restrictions.__ You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + + 6. __No endorsement.__ Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). + +b. ___Other rights.___ + + 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this Public License. + + 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. + +### Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + +a. ___Attribution.___ + + 1. If You Share the Licensed Material (including in modified form), You must: + + A. retain the following if it is supplied by the Licensor with the Licensed Material: + + i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + + v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + + B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + + C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + + 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. + +### Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + +a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; + +b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and + +c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. + +### Section 5 – Disclaimer of Warranties and Limitation of Liability. + +a. __Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.__ + +b. __To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.__ + +c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +### Section 6 – Term and Termination. + +a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + +b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + +c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + +d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +### Section 7 – Other Terms and Conditions. + +a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + +b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +### Section 8 – Interpretation. + +a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + +b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + +c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + +d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. + +> Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at [creativecommons.org/policies](http://creativecommons.org/policies), Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. +> +> Creative Commons may be contacted at creativecommons.org \ No newline at end of file diff --git a/README.md b/README.md index 179fb864c1c5b1578c36e7a14aad78e053306382..27fbaaf14450b205eebbc60bd5faa0afd177a11b 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,29 @@ -# README # +# flex_extract -This software retrieves ECMWF data and generates FLEXPART specific data files. -For each time stamp the software combines all model level and surface level -data fields which were modified to match FLEXPART's needs and were then -stored in single files with the format prefixYYMMDDHH. +`flex_extract` is a software package to support retrieving meteorological fields from the European Centre for Medium-Range Weather Forecasts' (ECMWF) Meteorological Archival and Retrieval System (MARS) as input for the `FLEXTRA`/`FLEXPART` Atmospheric Transport Modelling system. +`FLEXPART` (“FLEXible PARTicle dispersion model”, http://flexpart.eu) is a Lagrangian transport and dispersion model suitable for the simulation of a large range of atmospheric transport processes. -This directory contains the following sub-directories: -+ `python: It contains the python scripts which manage the extraction and - the generation of FLEXPART input data files. It also includes the - CONTROL files which contain the controlling parameters. -+ `src: It contains the Fortran source code and Makefile templates - to create the CONVERT2 executable (used by the python scripts) to - process the ECMWF grib fields, e.g. convert from reduced gaussian to - regular latitude-longitude grid. -+ `grib_templates: It contains a reference table for the ECMWF parameter. +## Installation and Usage +There is a documentation within the flex_extract directory which contain all information necessary. +Please open the file Documentation/html/index.html in your preferred browser to learn about installation and usage of flex_extract. -For more detailed installation instructions and the user guide please read -SIP.pdf and SUT.pdf. +## Project website -Please report any problems via the ticket system at www.flexpart.eu. +https://www.flexpart.eu/wiki/FpInputMetEcmwf +## Authors + +Anne Philipp, Leopold Haimberger and Petra Seibert + +## License + (C) Copyright 2014-2019. + + SPDX-License-Identifier: CC-BY-4.0 + + This work is licensed under the Creative Commons Attribution 4.0 + International License. To view a copy of this license, visit + http://creativecommons.org/licenses/by/4.0/ or send a letter to + Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. diff --git a/Run/Control/CONTROL.documentation b/Run/Control/CONTROL.documentation new file mode 100644 index 0000000000000000000000000000000000000000..18ed21399677b319396298fc8e3a671ab0617cbd --- /dev/null +++ b/Run/Control/CONTROL.documentation @@ -0,0 +1,115 @@ +################################################################################ +# Comprehensive list of relevant CONTROL file parameters with +# short descriptions and default values. +# +# For more details on how to select and define parameters +# please see Table of CONTROLparameters. +# +# AUTHOR: Anne Philipp +# DATE: 05. February 2019 +################################################################################ + +#=============================================================================== +# USER SECTION: +# User specific information for ECMWF server. +# Information are needed for storage or data transfer to local gateway server. +# (OPTIONAL: INFORMATION ARE KNOWN THROUGH EXTRA FILE AFTER INSTALLATION) +#------------------------------------------------------------------------------- +ECUID None +ECGID None +DESTINATION None +GATEWAY None + +#=============================================================================== +# GENERAL SECTION: +# Specific storage, notification and data transfer settings. +# Selection of ECMWF access interface and extra output options. +#------------------------------------------------------------------------------- +DEBUG 0 +REQUEST 0 +PUBLIC 0 +OPER 0 +ECSTORAGE 0 +ECTRANS 0 +PREFIX 'EN' +ECFSDIR 'ectmp:/${USER}/econdemand/' +MAILFAIL ['${USER}'] +MAILOPS ['${USER}'] + +#=============================================================================== +# TIME SECTION: +# Selection of time period and temporal resolution for extraction period. +#------------------------------------------------------------------------------- +START_DATE +END_DATE +DATE_CHUNK 3 +DTIME None +BASETIME None + +#=============================================================================== +# DATA SECTION: +# General description of data set. +#------------------------------------------------------------------------------- +CLASS None +DATASET None +STREAM None +NUMBER 'OFF' +EXPVER '1' +FORMAT 'GRIB1' + +#=============================================================================== +# DATA FIELDS SECTION: +# Specific selection of field composition regarding type, analysis or forecast +# time and the forecast time step. +#------------------------------------------------------------------------------- +TYPE None +TIME None +STEP None +MAXSTEP None + +#=============================================================================== +# FLUX DATA FIELDS SECTION: +# Specific selection of flux field composition regarding forecast field type +# the forecast start times and the maximum forecast step per start time. +# Specification of disaggregation method of precipitation data. +#------------------------------------------------------------------------------- +ACCTYPE None +ACCTIME None +ACCMAXSTEP None +RRINT 0 + +#=============================================================================== +# DOMAIN SECTION: +# Definition of horizontal area, spatial resolution and vertical levels. +#------------------------------------------------------------------------------- +GRID None +RESOL None +SMOOTH 0 +LEFT None +LOWER None +UPPER None +RIGHT None +LEVEL None +LEVELIST None + +#=============================================================================== +# VERTICAL WIND SECTION: +# Selection of vertical wind calculation method. +#------------------------------------------------------------------------------- +GAUSS 0 +ACCURACY 24 +OMEGA 0 +OMEGADIFF 0 +ETA 0 +ETADIFF 0 +DPDETA 1 +ETAPAR 77 + +#=============================================================================== +# ADDITIONAL DATA SECTION: +# Specification of extra data fields to be extracted. +#------------------------------------------------------------------------------- +CWC 0 +WRF 0 +DOUBLEELDA 0 +ADDPAR None diff --git a/Run/Control/CONTROL_CERA b/Run/Control/CONTROL_CERA new file mode 100644 index 0000000000000000000000000000000000000000..cf18ca862a4f5c063886d8d3022e35b4a6141747 --- /dev/null +++ b/Run/Control/CONTROL_CERA @@ -0,0 +1,22 @@ +START_DATE 20000908 +DTIME 3 +TYPE AN AN AN AN AN AN AN AN +TIME 00 03 06 09 12 15 18 21 +STEP 00 00 00 00 00 00 00 00 +ACCTYPE FC +ACCTIME 18 +ACCMAXSTEP 24 +CLASS EP +NUMBER 0 +STREAM ENDA +GRID 2. +LEFT -24. +LOWER 10. +UPPER 74. +RIGHT 60. +LEVELIST 1/to/91 +RESOL 159 +ETA 1 +CWC 1 +PREFIX CE +ECTRANS 1 diff --git a/Run/Control/CONTROL_CERA.global b/Run/Control/CONTROL_CERA.global new file mode 100644 index 0000000000000000000000000000000000000000..a9d230fbe53a7b367b89981131fc669dfedda524 --- /dev/null +++ b/Run/Control/CONTROL_CERA.global @@ -0,0 +1,22 @@ +START_DATE 20000908 +DTIME 3 +TYPE AN AN AN AN AN AN AN AN +TIME 00 03 06 09 12 15 18 21 +STEP 00 00 00 00 00 00 00 00 +ACCTYPE FC +ACCTIME 18 +ACCMAXSTEP 24 +CLASS EP +NUMBER 0 +STREAM ENDA +GRID 2. +LEFT -178. +LOWER -89. +UPPER 89. +RIGHT 180. +LEVELIST 1/to/91 +RESOL 159 +ETA 1 +CWC 1 +PREFIX CEg +ECTRANS 1 diff --git a/Run/Control/CONTROL_CERA.public b/Run/Control/CONTROL_CERA.public new file mode 100644 index 0000000000000000000000000000000000000000..6c247a8a3c373702437c48dba3006236f428ea3e --- /dev/null +++ b/Run/Control/CONTROL_CERA.public @@ -0,0 +1,22 @@ +START_DATE 20000908 +DTIME 3 +TYPE AN AN AN AN AN AN AN AN +TIME 00 03 06 09 12 15 18 21 +STEP 00 00 00 00 00 00 00 00 +ACCTYPE FC +ACCTIME 18 +ACCMAXSTEP 24 +CLASS EP +DATASET cera20c +STREAM ENDA +NUMBER 0 +GRID 2. +LEFT -178. +LOWER -89. +UPPER 89. +RIGHT 180. +LEVELIST 1/to/91 +RESOL 159 +ETA 1 +CWC 1 +PREFIX CEpub diff --git a/Run/Control/CONTROL_EA5 b/Run/Control/CONTROL_EA5 new file mode 100644 index 0000000000000000000000000000000000000000..3d5e7c28a44733a98b491ba65a6d1b094aa05dd3 --- /dev/null +++ b/Run/Control/CONTROL_EA5 @@ -0,0 +1,23 @@ +START_DATE 20180809 +DTIME 1 +TYPE AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN +TIME 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 +STEP 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +ACCTYPE FC +ACCTIME 06/18 +ACCMAXSTEP 12 +CLASS EA +STREAM OPER +GRID 0.28125 +LEFT -24. +LOWER 9.875 +UPPER 74. +RIGHT 60.375 +LEVELIST 1/to/137 +RESOL 799 +ETA 1 +FORMAT GRIB2 +PREFIX EA +CWC 1 +RRINT 1 +ECTRANS 1 diff --git a/Run/Control/CONTROL_EA5.global b/Run/Control/CONTROL_EA5.global new file mode 100644 index 0000000000000000000000000000000000000000..cf38bf2b481d08362122e927cd4b806b7ef5cfee --- /dev/null +++ b/Run/Control/CONTROL_EA5.global @@ -0,0 +1,21 @@ +START_DATE 20180809 +DTIME 1 +TYPE AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN +TIME 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 +STEP 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +ACCTYPE FC +ACCTIME 06/18 +ACCMAXSTEP 12 +CLASS EA +STREAM OPER +GRID 1. +LEFT -179. +LOWER -90. +UPPER 90. +RIGHT 180. +LEVELIST 1/to/137 +RESOL 159 +ETA 1 +CWC 1 +PREFIX EAg +ECTRANS 1 diff --git a/Run/Control/CONTROL_EI b/Run/Control/CONTROL_EI new file mode 100644 index 0000000000000000000000000000000000000000..a5f9fadf075da3e93c01159a27783989d5c84e19 --- /dev/null +++ b/Run/Control/CONTROL_EI @@ -0,0 +1,21 @@ +START_DATE 20150809 +DTIME 3 +TYPE AN FC FC FC AN FC FC FC +TIME 00 00 00 00 12 12 12 12 +STEP 00 03 06 09 00 03 06 09 +ACCTYPE FC +ACCTIME 00/12 +ACCMAXSTEP 12 +CLASS EI +STREAM OPER +GRID 0.750 +LEFT -24.75 +LOWER 10.5 +UPPER 75. +RIGHT 60. +LEVELIST 1/to/60 +RESOL 255 +GAUSS 1 +FORMAT GRIB2 +PREFIX EI +ECTRANS 1 diff --git a/Run/Control/CONTROL_EI.global b/Run/Control/CONTROL_EI.global new file mode 100644 index 0000000000000000000000000000000000000000..4e91c2d8a262c5d7b086d7fc492701387dad8450 --- /dev/null +++ b/Run/Control/CONTROL_EI.global @@ -0,0 +1,22 @@ +START_DATE 20150809 +DTIME 3 +TYPE AN FC FC FC AN FC FC FC +TIME 00 00 00 00 12 12 12 12 +STEP 00 03 06 09 00 03 06 09 +ACCTYPE FC +ACCTIME 00/12 +ACCMAXSTEP 12 +CLASS EI +STREAM OPER +GRID 0.750 +LEFT -179.25 +LOWER -90. +UPPER 90. +RIGHT 180. +LEVELIST 1/to/60 +RESOL 255 +GAUSS 1 +FORMAT GRIB2 +PREFIX EIg +RRINT 1 +ECTRANS 1 diff --git a/Run/Control/CONTROL_EI.public b/Run/Control/CONTROL_EI.public new file mode 100644 index 0000000000000000000000000000000000000000..69e2284de882abfc44aedc68a8706e6975e2546c --- /dev/null +++ b/Run/Control/CONTROL_EI.public @@ -0,0 +1,20 @@ +START_DATE 20150809 +DTIME 6 +TYPE AN AN AN AN +TIME 00 06 12 18 +STEP 00 00 00 00 +ACCTYPE FC +ACCTIME 00/12 +ACCMAXSTEP 12 +CLASS EI +DATASET INTERIM +STREAM OPER +GRID 0.750 +LEFT -179.25 +LOWER -90. +UPPER 90. +RIGHT 180. +LEVELIST 1/to/60 +RESOL 255 +GAUSS 1 +PREFIX EIpub diff --git a/Run/Control/CONTROL_OD.ELDA.FC.eta.ens.double b/Run/Control/CONTROL_OD.ELDA.FC.eta.ens.double new file mode 100644 index 0000000000000000000000000000000000000000..1f7ef9a9eecb7a04c005862999e40b31f9129c4c --- /dev/null +++ b/Run/Control/CONTROL_OD.ELDA.FC.eta.ens.double @@ -0,0 +1,24 @@ +START_DATE 20190505 +DTIME 3 +TYPE AN FC AN FC AN FC AN FC +TIME 00 18 06 06 12 06 18 18 +STEP 00 09 00 03 00 09 00 03 +ACCTIME 06/18 +ACCMAXSTEP 12 +ACCTYPE FC +CLASS OD +STREAM ELDA +PREFIX EL +UPPER 5. +LOWER -5. +LEFT -2. +RIGHT 2. +NUMBER 0/to/25 +GRID 1. +ETA 1 +RESOL 255 +LEVELIST 1/TO/137 +ECTRANS 1 +RRINT 1 +DOUBLEELDA 1 +CWC 1 diff --git a/Run/Control/CONTROL_OD.ENFO.CF.36hours b/Run/Control/CONTROL_OD.ENFO.CF.36hours new file mode 100644 index 0000000000000000000000000000000000000000..ae3ae1ab4c887029215859fd3e8655e5e00e40a9 --- /dev/null +++ b/Run/Control/CONTROL_OD.ENFO.CF.36hours @@ -0,0 +1,21 @@ +START_DATE 20190723 +DTIME 3 +MAXSTEP 36 +TYPE CF +TIME 12 +STEP 00 +ACCTYPE CF +ACCTIME 12 +ACCMAXSTEP 36 +CLASS OD +STREAM ENFO +GRID 1. +LEFT -179. +LOWER -90. +UPPER 90. +RIGHT 180. +LEVELIST 1/to/91 +RESOL 255 +GAUSS 1 +PREFIX CF +ECTRANS 1 diff --git a/Run/Control/CONTROL_OD.ENFO.CV.36hours b/Run/Control/CONTROL_OD.ENFO.CV.36hours new file mode 100644 index 0000000000000000000000000000000000000000..52024a5dba9bd4d0c0935f525a3d85d2a7f94cb9 --- /dev/null +++ b/Run/Control/CONTROL_OD.ENFO.CV.36hours @@ -0,0 +1,22 @@ +START_DATE 20150809 +DTIME 3 +MAXSTEP 36 +TYPE CV +TIME 12 +STEP 00 +ACCTYPE CV +ACCTIME 12 +ACCMAXSTEP 36 +CLASS OD +STREAM ENFO +NUMBER 1 +GRID 1. +LEFT -179. +LOWER -90. +UPPER 90. +RIGHT 180. +LEVELIST 1/to/91 +RESOL 255 +GAUSS 1 +PREFIX CV +ECTRANS 1 diff --git a/Run/Control/CONTROL_OD.ENFO.PF.36hours b/Run/Control/CONTROL_OD.ENFO.PF.36hours new file mode 100644 index 0000000000000000000000000000000000000000..c6f36238373f2be39ec55c1640df53896c4a7843 --- /dev/null +++ b/Run/Control/CONTROL_OD.ENFO.PF.36hours @@ -0,0 +1,22 @@ +START_DATE +DTIME 3 +MAXSTEP 36 +TYPE PF +TIME 12 +STEP 00 +ACCTYPE PF +ACCTIME 12 +ACCMAXSTEP 36 +CLASS OD +STREAM ENFO +NUMBER 0/to/9 +GRID 1. +LEFT -179. +LOWER -90. +UPPER 90. +RIGHT 180. +LEVELIST 1/to/62 +RESOL 255 +GAUSS 1 +PREFIX EE +ECTRANS 1 diff --git a/Run/Control/CONTROL_OD.ENFO.PF.ens b/Run/Control/CONTROL_OD.ENFO.PF.ens new file mode 100644 index 0000000000000000000000000000000000000000..f4918570ec357e0441b3dc749b75b697544f81a4 --- /dev/null +++ b/Run/Control/CONTROL_OD.ENFO.PF.ens @@ -0,0 +1,21 @@ +START_DATE 20190620 +DTIME 3 +TYPE PF PF PF PF PF PF PF PF +TIME 00 00 00 00 12 12 12 12 +STEP 00 03 06 09 00 03 06 09 +ACCTYPE PF +ACCTIME 00/12 +ACCMAXSTEP 12 +STREAM ENFO +PREFIX EN +UPPER 90. +LOWER -90. +LEFT -179. +RIGHT 180. +CLASS OD +NUMBER 1/TO/50/BY/1 +GRID 1. +RESOL 159 +GAUSS 1 +LEVELIST 1/TO/91 +ECTRANS 1 diff --git a/Run/Control/CONTROL_OD.OPER.4V.eta.global b/Run/Control/CONTROL_OD.OPER.4V.eta.global new file mode 100644 index 0000000000000000000000000000000000000000..713f33d437d5ead4c49bc3bd492a8eee7d01cbef --- /dev/null +++ b/Run/Control/CONTROL_OD.OPER.4V.eta.global @@ -0,0 +1,20 @@ +START_DATE 20180809 +DTIME 1 +TYPE AN FC FC FC FC FC AN FC FC 4V FC FC 4V FC FC FC FC FC AN FC FC 4V FC FC 4V +TIME 00 00 00 00 00 00 06 00 00 09 00 00 09 12 12 12 12 12 18 12 12 21 12 12 21 +STEP 00 01 02 03 04 05 00 07 08 00 10 11 03 01 02 03 04 05 00 07 08 00 10 11 03 +ACCTYPE FC +ACCTIME 00/12 +ACCMAXSTEP 12 +PREFIX OP +GRID 1. +UPPER 60. +LOWER 10. +LEFT -25. +RIGHT 60. +CLASS OD +STREAM OPER +RESOL 255 +GAUSS 1 +LEVELIST 1/to/137 +ECTRANS 1 diff --git a/Run/Control/CONTROL_OD.OPER.FC.36hours b/Run/Control/CONTROL_OD.OPER.FC.36hours new file mode 100644 index 0000000000000000000000000000000000000000..0d8d742a0ab66e02b8e9ca4bbd149580bde3f77d --- /dev/null +++ b/Run/Control/CONTROL_OD.OPER.FC.36hours @@ -0,0 +1,22 @@ +START_DATE 20180809 +DTIME 3 +TYPE FC +TIME 00 +STEP 00 +MAXSTEP 36 +ACCTYPE FC +ACCTIME 00 +ACCMAXSTEP 36 +LEVELIST 1/to/137 +CLASS OD +STREAM OPER +GRID 1. +LEFT -25. +LOWER 10. +UPPER 60. +RIGHT 60. +RESOL 255 +ETA 1 +CWC 1 +PREFIX FC +ECTRANS 1 diff --git a/Run/Control/CONTROL_OD.OPER.FC.eta.basetime b/Run/Control/CONTROL_OD.OPER.FC.eta.basetime new file mode 100644 index 0000000000000000000000000000000000000000..553346c8ff659c2e204d600e0eb936800f9d6700 --- /dev/null +++ b/Run/Control/CONTROL_OD.OPER.FC.eta.basetime @@ -0,0 +1,23 @@ +START_DATE 20190701 +TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC +TIME 00 00 00 00 00 00 00 00 00 00 00 00 12 12 12 12 12 12 12 12 12 12 12 12 +STEP 00 01 02 03 04 05 06 07 08 09 10 11 00 01 02 03 04 05 06 07 08 09 10 11 +BASETIME 00 +ACCTYPE FC +ACCTIME 00/12 +ACCMAXSTEP 12 +DTIME 3 +UPPER 90. +LOWER -90. +LEFT -179. +RIGHT 180. +CLASS OD +STREAM OPER +GRID 1. +RESOL 255 +ETA 1 +LEVELIST 1/to/137 +FORMAT GRIB2 +ECTRANS 1 +CWC 1 +PREFIX BT diff --git a/Run/Control/CONTROL_OD.OPER.FC.eta.global b/Run/Control/CONTROL_OD.OPER.FC.eta.global new file mode 100644 index 0000000000000000000000000000000000000000..00a8995f0a7e72122ad0d333a1f54388f26816b5 --- /dev/null +++ b/Run/Control/CONTROL_OD.OPER.FC.eta.global @@ -0,0 +1,21 @@ +START_DATE 20180809 +DTIME 1 +TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC +TIME 00 00 00 00 00 00 00 00 00 00 00 00 12 12 12 12 12 12 12 12 12 12 12 12 +STEP 00 01 02 03 04 05 06 07 08 09 10 11 00 01 02 03 04 05 06 07 08 09 10 11 +ACCTYPE FC +ACCTIME 00/12 +ACCMAXSTEP 12 +CLASS OD +STREAM OPER +GRID 1. +UPPER 90. +LOWER -90. +LEFT -179. +RIGHT 180. +LEVEL 137 +RESOL 255 +ETA 1 +FORMAT GRIB2 +PREFIX ENg +ECTRANS 1 diff --git a/Run/Control/CONTROL_OD.OPER.FC.eta.highres b/Run/Control/CONTROL_OD.OPER.FC.eta.highres new file mode 100644 index 0000000000000000000000000000000000000000..73e0449eb57b0b657e50436e586832ec0b80d916 --- /dev/null +++ b/Run/Control/CONTROL_OD.OPER.FC.eta.highres @@ -0,0 +1,18 @@ +START_DATE 20180809 +DTIME 1 +TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC +TIME 00 00 00 00 00 00 00 00 00 00 00 00 12 12 12 12 12 12 12 12 12 12 12 12 +STEP 00 01 02 03 04 05 06 07 08 09 10 11 00 01 02 03 04 05 06 07 08 09 10 11 +CLASS OD +STREAM OPER +GRID 0.2 +LEFT -10. +LOWER 30. +UPPER 60. +RIGHT 30. +LEVEL 137 +RESOL 799 +ETA 1 +FORMAT GRIB2 +PREFIX ENH +ECTRANS 1 diff --git a/Run/Control/CONTROL_OD.OPER.FC.gauss.global b/Run/Control/CONTROL_OD.OPER.FC.gauss.global new file mode 100644 index 0000000000000000000000000000000000000000..78c3d27646207393cbcd5f9f587a9779824f9a6f --- /dev/null +++ b/Run/Control/CONTROL_OD.OPER.FC.gauss.global @@ -0,0 +1,21 @@ +START_DATE 20180809 +DTIME 1 +TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC +TIME 00 00 00 00 00 00 00 00 00 00 00 00 12 12 12 12 12 12 12 12 12 12 12 12 +STEP 00 01 02 03 04 05 06 07 08 09 10 11 00 01 02 03 04 05 06 07 08 09 10 11 +ACCTIME 00/12 +ACCTYPE FC +ACCMAXSTEP 12 +CLASS OD +STREAM OPER +GRID 1.0 +LEFT -179. +LOWER -90. +UPPER 90. +RIGHT 180. +LEVEL 137 +RESOL 255 +GAUSS 1 +FORMAT GRIB2 +PREFIX ENgHG +ECTRANS 1 diff --git a/Run/Control/CONTROL_OD.OPER.FC.gauss.highres b/Run/Control/CONTROL_OD.OPER.FC.gauss.highres new file mode 100644 index 0000000000000000000000000000000000000000..340b598bcacbb3da82274614fefffd95709b781a --- /dev/null +++ b/Run/Control/CONTROL_OD.OPER.FC.gauss.highres @@ -0,0 +1,21 @@ +START_DATE 20180809 +DTIME 1 +TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC +TIME 00 00 00 00 00 00 00 00 00 00 00 00 12 12 12 12 12 12 12 12 12 12 12 12 +STEP 00 01 02 03 04 05 06 07 08 09 10 11 00 01 02 03 04 05 06 07 08 09 10 11 +ACCTIME 00/12 +ACCTYPE FC +ACCMAXSTEP 12 +CLASS OD +STREAM OPER +GRID 0.2 +LEFT -10. +LOWER 30. +UPPER 60. +RIGHT 30. +LEVEL 137 +RESOL 799 +GAUSS 1 +FORMAT GRIB2 +PREFIX ENHG +ECTRANS 1 diff --git a/Run/Control/CONTROL_OD.OPER.FC.operational b/Run/Control/CONTROL_OD.OPER.FC.operational new file mode 100644 index 0000000000000000000000000000000000000000..2db73132e63ee6be906d9d1f94389a9ccaf8a4bd --- /dev/null +++ b/Run/Control/CONTROL_OD.OPER.FC.operational @@ -0,0 +1,21 @@ +TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC +TIME 00 00 00 00 00 00 00 00 00 00 00 00 12 12 12 12 12 12 12 12 12 12 12 12 +STEP 00 01 02 03 04 05 06 07 08 09 10 11 00 01 02 03 04 05 06 07 08 09 10 11 +ACCTYPE FC +ACCTIME 00/12 +ACCMAXSTEP 12 +DTIME 3 +UPPER 90. +LOWER -90. +LEFT -179. +RIGHT 180. +CLASS OD +STREAM OPER +GRID 1. +RESOL 255 +ETA 1 +LEVELIST 1/to/137 +FORMAT GRIB2 +ECTRANS 1 +CWC 1 +PREFIX FCoper diff --git a/Run/Control/CONTROL_OD.OPER.FC.twiceaday.1hourly b/Run/Control/CONTROL_OD.OPER.FC.twiceaday.1hourly new file mode 100644 index 0000000000000000000000000000000000000000..e431700e67ea36a885b9e134746b1a61740a7c1f --- /dev/null +++ b/Run/Control/CONTROL_OD.OPER.FC.twiceaday.1hourly @@ -0,0 +1,22 @@ +START_DATE 20180809 +DTIME 1 +TYPE FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC +TIME 00 00 00 00 00 00 00 00 00 00 00 00 12 12 12 12 12 12 12 12 12 12 12 12 +STEP 00 01 02 03 04 05 06 07 08 09 10 11 00 01 02 03 04 05 06 07 08 09 10 11 +MAXSTEP 12 +ACCTYPE FC +ACCTIME 00/12 +ACCMAXSTEP 12 +LEVELIST 1/to/137 +CLASS OD +STREAM OPER +GRID 1. +LEFT -25. +LOWER 10. +UPPER 60. +RIGHT 60. +RESOL 255 +ETA 1 +CWC 1 +PREFIX FC1hd +ECTRANS 1 diff --git a/Run/Control/CONTROL_OD.OPER.FC.twiceaday.3hourly b/Run/Control/CONTROL_OD.OPER.FC.twiceaday.3hourly new file mode 100644 index 0000000000000000000000000000000000000000..a4fa422fa65ac682fa7a8061f3068947a178e10a --- /dev/null +++ b/Run/Control/CONTROL_OD.OPER.FC.twiceaday.3hourly @@ -0,0 +1,22 @@ +START_DATE 20180809 +DTIME 3 +TYPE FC FC FC FC FC FC FC FC +TIME 00 00 00 00 12 12 12 12 +STEP 00 03 06 09 00 03 06 09 +MAXSTEP 12 +ACCTYPE FC +ACCTIME 00/12 +ACCMAXSTEP 12 +LEVELIST 1/to/137 +CLASS OD +STREAM OPER +GRID 1. +LEFT -25. +LOWER 10. +UPPER 60. +RIGHT 60. +RESOL 255 +ETA 1 +CWC 1 +PREFIX FC3hd +ECTRANS 1 diff --git a/Run/Control/CONTROL_OD.temporary b/Run/Control/CONTROL_OD.temporary new file mode 100644 index 0000000000000000000000000000000000000000..6af00e0cc614aad228c342251933ceb4de955786 --- /dev/null +++ b/Run/Control/CONTROL_OD.temporary @@ -0,0 +1,70 @@ +accmaxstep 12 +acctime 00/12 +acctype FC +accuracy 24 +addpar None +area 90.0/-179.9/0.0/180.0 +basetime None +cds_api None +controlfile CONTROL_OD.etadothigh +cwc 1 +dataset None +date_chunk 3 +debug 1 +destination annep@genericSftp +doubleelda 0 +dpdeta 1 +dtime 6 +ec_api None +ecfsdir ectmp:/km4a/econdemand/ +ecgid at +ecstorage 0 +ectrans 0 +ecuid km4a +end_date 20190105 +eta 1 +etadiff 0 +etapar 77 +expver 1 +format GRIB1 +gateway srvx8.img.univie.ac.at +gauss 0 +gaussian +grib2flexpart 0 +grid 0.1/0.1 +inputdir /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/run/workspace +install_target None +job_chunk 3 +job_template job.temp +left -179.9 +level 137 +levelist 1/to/137 +logicals gauss omega omegadiff eta etadiff dpdeta cwc wrf grib2flexpart ecstorage ectrans debug oper request public purefc rrint doubleelda +lower 0. +mailfail km4a +mailops km4a +makefile Makefile.gfortran +marsclass OD +maxstep 6 +number OFF +omega 0 +omegadiff 0 +oper 0 +outputdir /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/run/workspace +prefix EN +public 0 +purefc 0 +queue ecgate +request 2 +resol 1279 +right 180. +rrint 0 +smooth 0 +start_date 20190105 +step 00 06 00 06 +stream OPER +time 00 00 12 12 +type AN FC AN FC +upper 90. +wrf 0 + diff --git a/Run/Jobscripts/README b/Run/Jobscripts/README new file mode 100644 index 0000000000000000000000000000000000000000..1c2f9bc2a4466889375ec831c78672f0b330e347 --- /dev/null +++ b/Run/Jobscripts/README @@ -0,0 +1,21 @@ +#!/bin/bash +# +# @Author: Anne Philipp +# +# @Date: December, 19 2019 +# +# @Description: +# This file is just to keep the Jobscript directory not empty. +# Otherwise the directory could not be collected to the tarball. +# +# @Licence: +# (C) Copyright 2014-2019. +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +# +# ----------------------------------------------------------------- \ No newline at end of file diff --git a/Run/run.sh b/Run/run.sh new file mode 100755 index 0000000000000000000000000000000000000000..389143c3d7fb1923d041f7461ee0f7a0735ddf18 --- /dev/null +++ b/Run/run.sh @@ -0,0 +1,115 @@ +#!/bin/bash +# +# @Author: Anne Philipp +# +# @Date: October, 4 2018 +# +# @Description: +# This script defines the available command-line parameters +# for running flex_extract and combines them for the execution +# of the Python program. It also does some checks to +# guarantee necessary parameters were set and consistent. +# +# @Licence: +# (C) Copyright 2014-2019. +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +# +# ----------------------------------------------------------------- +# AVAILABLE COMMANDLINE ARGUMENTS TO SET +# +# THE USER HAS TO SPECIFY THESE PARAMETERS: + +QUEUE='ecgate' +START_DATE=20120516 +END_DATE=20120516 +DATE_CHUNK=None +JOB_CHUNK=3 +BASETIME=None +STEP=None +LEVELIST=None +AREA=None +INPUTDIR=None +OUTPUTDIR=None +PP_ID=None +JOB_TEMPLATE='job.temp' +CONTROLFILE='CONTROL_EA5.DC3' +DEBUG=1 +REQUEST=2 +PUBLIC=0 + +# ----------------------------------------------------------------- +# +# AFTER THIS LINE THE USER DOES NOT HAVE TO CHANGE ANYTHING !!! +# +# ----------------------------------------------------------------- + +# PATH TO SUBMISSION SCRIPT +pyscript=../Source/Python/submit.py + +# INITIALIZE EMPTY PARAMETERLIST +parameterlist="" + +# CHECK FOR MORE PARAMETER +if [ -n "$START_DATE" ]; then + parameterlist+=" --start_date=$START_DATE" +fi +if [ -n "$END_DATE" ]; then + parameterlist+=" --end_date=$END_DATE" +fi +if [ -n "$DATE_CHUNK" ]; then + parameterlist+=" --date_chunk=$DATE_CHUNK" +fi +if [ -n "$JOB_CHUNK" ]; then + parameterlist+=" --job_chunk=$JOB_CHUNK" +fi +if [ -n "$BASETIME" ]; then + parameterlist+=" --basetime=$BASETIME" +fi +if [ -n "$STEP" ]; then + parameterlist+=" --step=$STEP" +fi +if [ -n "$LEVELIST" ]; then + parameterlist+=" --levelist=$LEVELIST" +fi +if [ -n "$AREA" ]; then + parameterlist+=" --area=$AREA" +fi +if [ -n "$INPUTDIR" ]; then + parameterlist+=" --inputdir=$INPUTDIR" +fi +if [ -n "$OUTPUTDIR" ]; then + parameterlist+=" --outputdir=$OUTPUTDIR" +fi +if [ -n "$PP_ID" ]; then + parameterlist+=" --ppid=$PP_ID" +fi +if [ -n "$JOB_TEMPLATE" ]; then + parameterlist+=" --job_template=$JOB_TEMPLATE" +fi +if [ -n "$QUEUE" ]; then + parameterlist+=" --queue=$QUEUE" +fi +if [ -n "$CONTROLFILE" ]; then + parameterlist+=" --controlfile=$CONTROLFILE" +fi +if [ -n "$DEBUG" ]; then + parameterlist+=" --debug=$DEBUG" +fi +if [ -n "$REQUEST" ]; then + parameterlist+=" --request=$REQUEST" +fi +if [ -n "$PUBLIC" ]; then + parameterlist+=" --public=$PUBLIC" +fi + +# ----------------------------------------------------------------- +# CALL SCRIPT WITH DETERMINED COMMANDLINE ARGUMENTS + +$pyscript $parameterlist + diff --git a/Source/Fortran/calc_etadot.f90 b/Source/Fortran/calc_etadot.f90 new file mode 100644 index 0000000000000000000000000000000000000000..542997d20f47c0e4b7dec9968d30dacf70fd72f7 --- /dev/null +++ b/Source/Fortran/calc_etadot.f90 @@ -0,0 +1,814 @@ +PROGRAM calc_etadot + +!! Prepare input data for FLEXPART, esp. vertical velocity as +!! etadot or etadot * dp/deta + +!*---------------------------------------------------------------- +! author: L. Haimberger +! date: 03/2010 +! version: V4.0 +! +!## Program calc_etadot +! +! **Prepares input data for POP model meteorological preprocessor** +! +!----------------------------------------------------------------- +! +! Calculation of etapoint on a regular \(\lambda-\phi\) grid and writing +! `U,V,ETAPOINT,T,PS,Q,SD,MSL,TCC,10U, 10V, 2T,2D,LSP,CP,SSHF,SSR, +! EWSS,NSSS` +! to an output file (input and output in GRIB 1 or 2 format). +! etapoint is defined as the total time derivative of +! ECMWF vertical coordinate eta multiplied by the derivative +! of pressure with respect to eta: +! \[\frac{\mathrm{d}\eta}{\mathrm{d}t}\frac{\partial p}{\partial \eta}\] +! +!### Version history and authors: +! - 04/1994: Leopold Haimberger, Gerhard Wotawa +! +! - 2003-05-11: Alexander Beck +! +! - 12/2006: L. Haimberger V2.0, +! handle arbitrary regular grids and T799 resolution data +! +! - 03/2010: L. Haimberger V4.0, +! handle GRIB edition 2 fields and T1279 resolution data +! - 04-06/2019: Petra Seibert, +! beautify code and add FORD documentation +! +!----------------------------------------------------------------- +! # +!## Input required: +! +! UNIT FILE PARAMETER(S) DATA REPRESENTATION +! +! 11 fort.11 T,U,V regular lambda phi grid +! 12 fort.12 D regular lambda phi grid +! 13 fort.13 LNSP spherical harmonics +! 14 fort.14 SD,MSL,TCC,10U, +! 10V,2T,2D regular lambda phi grid +! 16 fort.16 LSP,CP,SSHF, +! SSR,EWSS,NSSS regular lambda phi grid +! 17 fort.17 Q regular lambda phi grid +! +!------------------------------------------------------------------ +! +!### Output produced: +! +! UNIT FILE PARAMETER(S) DATA REPRESENTATION +! +! 15 fort.15 `U,V,ETA,T,PS, +! `Q,SD,MSL,TCC,` +! `10U,10V,2T,2D,` regular lambda phi grid +! `LSP,CP,SSHF,` +! `SSR,EWSS,NSSS` +! +!------------------------------------------------------------------ + + USE PHTOGR + USE GRTOPH + USE FTRAFO + USE RWGRIB2 + USE GRIB_API + + IMPLICIT NONE + + REAL, ALLOCATABLE, DIMENSION (:,:) :: LNPS + REAL, ALLOCATABLE, DIMENSION (:,:) :: Z + REAL, ALLOCATABLE, DIMENSION (:,:,:) :: T, UV , UV2 + REAL, ALLOCATABLE, DIMENSION (:,:,:) :: QA,OM,OMR + REAL, ALLOCATABLE, DIMENSION (:,:,:) :: DIV, ETA,ETAR + REAL, ALLOCATABLE, DIMENSION (:,:) :: DPSDL, DPSDM + REAL, ALLOCATABLE, DIMENSION (:,:,:) :: PS,DPSDT + REAL, ALLOCATABLE, DIMENSION (:,:,:) :: SURF,FLUX,OROLSM + REAL, ALLOCATABLE, DIMENSION (:) :: WSAVE,H,SINL,COSL,WSAVE2 + REAL, ALLOCATABLE, DIMENSION (:) :: BREITE, GBREITE,AK, BK,pv + +! Arrays for Gaussian grid calculations + REAL :: X1,X2,RMS,MW,SIG,LAM + REAL,ALLOCATABLE :: CUA(:,:,:),CVA(:,:,:) + + REAL, ALLOCATABLE, DIMENSION (:,:) :: P,PP,P2 + REAL, ALLOCATABLE, DIMENSION (:,:) :: XMN,HILFUV + REAL, ALLOCATABLE, DIMENSION (:) :: LNPMN,LNPMN2,LNPMN3 + REAL, ALLOCATABLE, DIMENSION (:) :: WEIGHT + REAL, ALLOCATABLE, DIMENSION (:,:) :: UGVG + REAL, ALLOCATABLE, DIMENSION (:,:) :: DG, ETAG + REAL, ALLOCATABLE, DIMENSION (:,:) :: GWSAVE + REAL, ALLOCATABLE, DIMENSION (:) :: PSG,HILF + +! end arrays for Gaussian grid calculations + + INTEGER, ALLOCATABLE, DIMENSION (:) :: MLAT,MPSURF,MPFLUX,MPORO,MPAR + INTEGER, ALLOCATABLE :: GIFAX(:,:) + + REAL PI,COSB,DAK,DBK,P00 + REAL URLAR8,JMIN1,LLLAR8,MAXBMIN1,PIR8,DCOSB + + INTEGER I,J,K,L,IERR,M,LTEST,MK,NGI,NGJ + INTEGER MFLUX,MSURF,MORO + INTEGER LUNIT,LUNIT2 + + INTEGER MAXL, MAXB, MLEVEL, LEVOUT,LEVMIN,LEVMAX + INTEGER MOMEGA,MOMEGADIFF,MGAUSS,MSMOOTH, MNAUF,META,METADIFF + INTEGER MDPDETA,METAPAR + REAL RLO0, RLO1, RLA0, RLA1 + CHARACTER*300 MLEVELIST + + INTEGER MAUF, MANF,IFAX(10) + + INTEGER IGRIB(1),iret,ogrib + + CHARACTER*80 FILENAME + + NAMELIST /NAMGEN/ & + MAXL, MAXB, & + MLEVEL,MLEVELIST,MNAUF,METAPAR, & + RLO0, RLO1, RLA0, RLA1, & + MOMEGA,MOMEGADIFF,MGAUSS,MSMOOTH,META,METADIFF,& + MDPDETA + + LTEST=1 + + CALL POSNAM (4,'NAMGEN') + READ (4,NAMGEN) + + MAUF=INT(360.*(REAL(MAXL)-1.)/(RLO1-RLO0)+0.0001) +! PRINT*, MAUF + + MANF=INT(REAL(MAUF)/360.*(360.+RLO0)+1.0001) + IF (MANF .gt. MAUF) MANF=MANF-MAUF + + +!------------------------------------------------------------------ +!! ALLOCATE VARIABLES +!------------------------------------------------------------------ + + ALLOCATE (LNPS(0:(MNAUF+1)*(MNAUF+2)-1,1)) + ALLOCATE (H(0:(MNAUF+2)*(MNAUF+3)/2)) + ALLOCATE (OM(MAXL, MAXB, MLEVEL)) + ALLOCATE (ETA(MAXL,MAXB,MLEVEL)) + ALLOCATE (PS(MAXL, MAXB,1),DPSDT(MAXL, MAXB,1)) + ALLOCATE (WSAVE(4*MAUF+15),WSAVE2(4*MAUF+15)) + ALLOCATE (BREITE(MAXB),AK(MLEVEL+1),BK(MLEVEL+1),PV(2*MLEVEL+2)) + ALLOCATE (MPAR(2)) + ALLOCATE (COSL(MAXL),SINL(MAXL)) + ALLOCATE (CUA(2,4,MLEVEL),CVA(2,4,MLEVEL)) + +!------------------------------------------------------------------ +! GAUSS STUFF +!------------------------------------------------------------------ + + IF (MGAUSS .EQ. 1) THEN + LUNIT=0 + FILENAME='fort.18' + + CALL GRIB_OPEN_FILE(LUNIT, TRIM(FILENAME),'R') + + CALL GRIB_NEW_FROM_FILE(LUNIT,IGRIB(1), IRET) + +! we can close the file + CALL GRIB_CLOSE_FILE(LUNIT) +! call grib_get(igrib(1),'gridType', j) + + NGJ=MNAUF+1 + + ALLOCATE (GWSAVE(8*NGJ+15,NGJ/2)) + ALLOCATE(GIFAX(10,NGJ)) + ALLOCATE (GBREITE(NGJ),WEIGHT(NGJ)) + ALLOCATE (MLAT(NGJ)) + ALLOCATE (P(0:((MNAUF+3)*(MNAUF+4))/2,NGJ/2)) + ALLOCATE (PP(NGJ/2,0:((MNAUF+3)*(MNAUF+4))/2)) + ALLOCATE (Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB)) + + CALL GRIB_GET(IGRIB(1),'numberOfPointsAlongAMeridian', NGJ) + +! get as a integer + call grib_get(igrib(1),'pl', MLAT) + + NGI=SUM(MLAT) + + CALL GRIB_GET(IGRIB(1),'numberOfVerticalCoordinateValues',MK) + + IF (MK/2-1 .NE. MLEVEL) THEN + WRITE(*,*) 'FATAL: Number of model levels',mk, & + ' does not agree with', MLEVEL,' in namelist' + STOP + END IF + call grib_get(igrib(1),'pv',pv) + AK=PV(1:1+MLEVEL) + BK=PV(2+MLEVEL:2*MLEVEL+2) + + ALLOCATE (LNPMN(0:(MNAUF+1)*(MNAUF+2)-1)) + ALLOCATE (LNPMN2(0:(MNAUF+1)*(MNAUF+2)-1)) + ALLOCATE (UGVG(NGI, 2*MLEVEL),HILFUV(2*MAXL,2)) + ALLOCATE (DPSDL(NGI,1),DPSDM(NGI,1)) + ALLOCATE (PSG(NGI),HILF(NGI)) + ALLOCATE (UV(MAXL, MAXB, 2*MLEVEL)) +! ALLOCATE (UV2(MAXL, MAXB, 2*MLEVEL)) + ALLOCATE (XMN(0:(MNAUF+1)*(MNAUF+2)-1, 2*MLEVEL)) + ALLOCATE (DG(NGI,MLEVEL),ETAG(NGI,MLEVEL)) + +!! Initialisieren Legendretransformation auf das LaT/LON Gitter + + PI=ACOS(-1.D0) + +!$OMP PARALLEL DO + DO 20 J=1,MAXB + BREITE(J)=SIN((RLA1-(J-1.D0)*(RLA1-RLA0)/(MAXB-1))* PI/180.D0) + CALL PLGNFA(MNAUF,BREITE(J),Z(0,J)) +20 CONTINUE +!$OMP END PARALLEL DO + +! Avoid possible Pole problem +! IF (RLA0 .EQ. -90.0) BREITE(MAXB)=sin(-89.99*PI/180.d0) +! IF (RLA1 .EQ. 90.0) BREITE(1)=sin(89.99*PI/180.d0) + +!* Initialisation of fields for FFT and Legendre transformation +! to Gaussian grid and back to phase space + X1=-1.D0 + X2=1.D0 + CALL GAULEG(X1,X2,GBREITE,WEIGHT,NGJ) + +!$OMP PARALLEL DO PRIVATE(M) + DO J=1,NGJ/2 + CALL PLGNFA(MNAUF,GBREITE(J),P(:,J)) + DO M=0,(MNAUF+3)*(MNAUF+4)/2 + PP(J,M)=P(M,J) + END DO + END DO +!$OMP END PARALLEL DO + +! MPAR(1)=152 + FILENAME='fort.12' +!! read LNSP in SH + CALL READSPECTRAL(FILENAME,LNPMN,MNAUF,1,MLEVEL,(/152/),AK,BK) + CALL SET99(WSAVE,IFAX,mauf) + CALL PHGCUT(LNPMN,PS,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,1) + CALL STATIS(MAXL,MAXB,1,EXP(PS),RMS,MW,SIG) + WRITE(*,'(A,T20,3F12.4)') 'STATISTICS PS: ',RMS,MW,SIG + + DO J=1,NGJ/2 + CALL SET99(GWSAVE(1,J),GIFAX(1,J),MLAT(J)) + END DO + CALL PHGR213(LNPMN,HILF,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,1) + PSG=HILF + CALL GRPH213(LNPMN2,PSG,GWSAVE,GIFAX,PP,WEIGHT,MLAT,MNAUF,NGI,NGJ,1) + CALL PHGR213(LNPMN2,HILF,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,1) + + + HILF=exp(PSG)-exp(HILF) + + CALL STATIS(NGI,1,1,HILF,RMS,MW,SIG) + WRITE(*,'(A,T20,3F12.4)') 'STATISTICS ratio of PS: ',RMS,MW,SIG + + PSG=EXP(PSG) + HILF=PSG + CALL STATIS(NGI,1,1,HILF,RMS,MW,SIG) + WRITE(*,'(A,T20,3F12.4)') 'STATISTICS PSG: ',RMS,MW,SIG + +111 FILENAME='fort.10' +!! read u,v in SH + CALL READSPECTRAL(FILENAME,XMN,MNAUF,2*MLEVEL,MLEVEL,(/131,132/),AK,BK) + +!! Transformieren des Windes auf das Gaussgitter + CALL PHGR213(XMN,UGVG,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,2*MLEVEL) + DO K=1,MLEVEL +! North Pole + CALL JSPPOLE(XMN(:,K),1,MNAUF,.TRUE.,CUA(:,:,K)) + CALL JSPPOLE(XMN(:,MLEVEL+K),1,MNAUF,.TRUE.,CVA(:,:,K)) +! South Pole + CALL JSPPOLE(XMN(:,K),-1,MNAUF,.TRUE.,CUA(:,3:4,K)) + CALL JSPPOLE(XMN(:,MLEVEL+K),-1,MNAUF,.TRUE.,CVA(:,3:4,K)) + END DO + + DO K=1,2*MLEVEL + IF (MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH) + END DO + CALL PHGCUT(XMN,UV,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,2*MLEVEL) + + +112 FILENAME='fort.13' +!! read DIV in SH + CALL READSPECTRAL(FILENAME,XMN,MNAUF,MLEVEL,MLEVEL,(/155/),AK,BK) +!! Transformieren der horizontalen Divergenz auf das Gaussgitter + CALL PHGR213(XMN,DG,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,MLEVEL) + CALL STATIS(MAXL,MAXB,1,DG,RMS,MW,SIG) + WRITE(*,'(A,T20,3p,3F12.4)') 'STATISTICS DG-PS: ',RMS,MW,SIG + +!! Berechnung des Gradienten des Logarithmus des Bodendrucks auf dem Gaussgitter + CALL PHGRAD(LNPMN,DPSDL,DPSDM,GWSAVE,GIFAX,P,H,MLAT,MNAUF,NGI,NGJ,1) + +!! Berechnung der Vertikalgeschwindigkeit auf dem Gaussgitter + CALL CONTGL(HILF,DPSDL,DPSDM,DG,UGVG(:,1),UGVG(:,MLEVEL+1), & + GBREITE,ETAG,MLAT,AK,BK,NGI,NGJ,MLEVEL) +! note that HILF is ps on input and dpsdt*ps on output + + CALL STATIS(MAXL,MAXB,1,ETAG,RMS,MW,SIG) + WRITE(*,'(A,T20,3p,3F12.4)') 'STATISTICS ETAG-PS: ',RMS,MW,SIG + CALL GRPH213(XMN,ETAG,GWSAVE,GIFAX,PP,WEIGHT,MLAT,MNAUF,NGI,NGJ,MLEVEL) + CALL STATIS(MAXL,MAXB,1,ETAG,RMS,MW,SIG) + WRITE(*,'(A,T20,3p,3F12.4)') 'STATISTICS ETAG-PS: ',RMS,MW,SIG + DO K=1,MLEVEL + IF (MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH) + END DO + + CALL PHGCUT(XMN,ETA,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,MLEVEL) + CALL STATIS(MAXL,MAXB,1,ETA,RMS,MW,SIG) + WRITE(*,'(A,T20,3p,3F12.4)') 'STATISTICS ETA-PS: ',RMS,MW,SIG + + CALL GRPH213(XMN,HILF,GWSAVE,GIFAX,PP,WEIGHT,MLAT, MNAUF,NGI,NGJ,1) + CALL STATIS(MAXL,MAXB,1,HILF,RMS,MW,SIG) + WRITE(*,'(A,T20,3p,3F12.4)') 'STATISTICS HILF-PS: ',RMS,MW,SIG + + IF (MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,1),MNAUF,MSMOOTH) + CALL PHGCUT(XMN,DPSDT,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,1) + + CALL STATIS(MAXL,MAXB,1,DPSDT,RMS,MW,SIG) + WRITE(*,'(A,T20,3F12.4)') 'STATISTICS DPSDT: ',RMS,MW,SIG + + IF (MOMEGADIFF .ne. 0) THEN +!! Berechnung von Omega auf dem Gaussgitter + + CALL OMEGA(PSG,DPSDL,DPSDM,DG,UGVG(:,1),UGVG(:,MLEVEL+1), & + GBREITE,ETAG,MLAT,AK,BK,NGI ,NGJ,MLEVEL) + CALL GRPH213(XMN,ETAG,GWSAVE,GIFAX,PP,WEIGHT,MLAT,MNAUF,NGI,NGJ,MLEVEL) + DO K=1,MLEVEL + IF (MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH) + END DO + CALL PHGCUT(XMN,OM,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,MLEVEL) + + END IF ! MOMEGA + + CALL GRPH213(XMN,PSG,GWSAVE,GIFAX,PP,WEIGHT,MLAT,MNAUF,NGI,NGJ,1) + + CALL STATIS(MAXL,MAXB,1,PSG,RMS,MW,SIG) + WRITE(*,'(A,T20,3F12.4)') 'STATISTICS PSG-PS: ',RMS,MW,SIG + + CALL PHGCUT(XMN,PS,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,1) + + CALL STATIS(MAXL,MAXB,1,PS,RMS,MW,SIG) + WRITE(*,'(A,T20,3F12.4)') 'STATISTICS PS: ',RMS,MW,SIG + +114 DEALLOCATE(HILF,PSG,DPSDL,DPSDM,ETAG,DG,LNPMN) + +! ALLOCATE (UV(MAXL, MAXB, 2*MLEVEL)) +! CALL GRPH213(XMN,UGVG,GWSAVE,GIFAX,PP,WEIGHT,MLAT, +! *MNAUF,NGI,NGJ,2*MLEVEL) +! DO K=1,2*MLEVEL +! IF (MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH) +! END DO +! CALL PHGCUT(XMN,UV,WSAVE,IFAX,Z, +! *MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,2*MLEVEL) + DEALLOCATE(PP,P,UGVG,MLAT,GBREITE,WEIGHT,GWSAVE,XMN) +! CALL ETAGAUSS(Z,WSAVE +! *,BREITE,UV,ETA,OM,PS, +! *MAUF,MAXB,MAXL,MANF,MNAUF,MLEVEL,MSMOOTH) + + ELSE + +!----------------------------------------------------------------- +! READING OF PREPARED METEOROLOGICAL FIELDS +! +! THE FOLLOWING FIELDS ARE EXPECTED: +! +! UNIT 11: T,U,V (REGULAR GRID) +! UNIT 17: Q (REGULAR GRID) +! UNIT 13: D (REGULAR GRID) +! UNIT 12: LNSP (SPHERICAL HARMONICS) +! UNIT 14: SURFACE DATA (REGULAR GRID) +! UNIT 16: FLUX DATA (REGULAR GRID) +!------------------------------------------------------------------ + + ALLOCATE (MLAT(MAXB)) + MLAT=MAXL + ALLOCATE (Z(0:((MNAUF+3)*(MNAUF+4))/2,1)) + ALLOCATE (DPSDL(MAXL,MAXB),DPSDM(MAXL,MAXB)) + ALLOCATE (UV(MAXL, MAXB, 2*MLEVEL),DIV(MAXL,MAXB,MLEVEL)) + +!------------------------------------------------------------------ +!! READING OF SURFACE PRESSURE +!------------------------------------------------------------------ + + FILENAME='fort.12' + CALL READSPECTRAL(FILENAME,LNPS,MNAUF,1,MLEVEL,(/152/),AK,BK) + +!------------------------------------------------------------------ +!! READING OF U,V +!------------------------------------------------------------------ + +! OPENING OF UNBLOCKED GRIB FILE + + FILENAME='fort.10' + CALL READLATLON(FILENAME,UV,MAXL,MAXB,2*MLEVEL,(/131,132/)) + + PI=ACOS(-1.D0) + DO J=1,MAXB + BREITE(J)=SIN((RLA1-(J-1.D0)*(RLA1-RLA0)/(MAXB-1))*PI/180.D0) + END DO + +! Avoid possible Pole problem +! IF (RLA0 .EQ. -90.0) BREITE(MAXB)=sin(-89.99*PI/180.d0) +! IF (RLA1 .EQ. 90.0) BREITE(1)=sin(89.99*PI/180.d0) + + DO K=1,2*MLEVEL + DO J=1,MAXB + COSB=SQRT(1.0-(BREITE(J))*(BREITE(J))) + IF (RLA0 .EQ. -90.0 .AND. J .EQ. MAXB .OR. & + RLA1 .EQ. 90.0 .AND. J .EQ. 1) THEN + UV(:,J,K)=UV(:,J,K)/1.D6 + ELSE + UV(:,J,K)=UV(:,J,K)*COSB + END IF + END DO + END DO + +!------------------------------------------------------------------ +!! READING OF LNSP on grid +!------------------------------------------------------------------ + +! For debugging only +! FILENAME='LNSPG_G.20060330.600' +! INQUIRE(FILE=FILENAME,EXIST=EX) +! CALL READLATLON(FILENAME,QA, +! *MAXL,MAXB,1,1,(/152/)) + +!------------------------------------------------------------------ +!! READING OF DIVERGENCE +!------------------------------------------------------------------ + + IF (META .EQ. 0 .OR. METADIFF .EQ. 1) THEN + FILENAME='fort.13' + CALL READLATLON(FILENAME,DIV,MAXL,MAXB,MLEVEL,(/155/)) + END IF + + +!------------------------------------------------------------------ +! +! Calculation of etapoint --> total time derivative of +! ECMWF vertical coordinate eta multiplied by the derivative +! of pressure with respect to eta: +! \[\frac{\mathrm{d}\eta}{\mathrm{d}t}\frac{\partial p}{\partial \eta}\] +!------------------------------------------------------------------ + +!* Initialisieren Legendretransformation auf das LaT/LON Gitter +!! Without Gaussian grid calculation Legendre Polynomials are calculated +!! only for one latitude to save space + + + + DO J=1,MAXB + CALL PLGNFA(MNAUF,BREITE(J),Z(0,1)) + CALL PHGCUT(LNPS,PS(:,J,1),WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,1,1) + IF (META .EQ. 0 .OR. METADIFF .EQ. 1 ) THEN + CALL PHGRACUT(LNPS,DPSDL(:,J),DPSDM(:,J),WSAVE,IFAX,Z,H,MAUF, & + MNAUF,MAXL,1,MANF,1) + END IF + END DO + + PS=EXP(PS) + +! For debugging only + CALL STATIS(MAXL,MAXB,1,PS(:,:,1),RMS,MW,SIG) + WRITE(*,'(A,T20,3F12.4)') 'STATISTICS: ',RMS,MW,SIG + + IF (MOMEGADIFF .ne. 0) THEN + CALL OMEGA(PS,DPSDL,DPSDM,DIV,UV(:,:,1),UV(:,:,MLEVEL+1), & + BREITE,OM,MLAT,AK,BK,MAXL*MAXB,MAXB,MLEVEL) + END IF + + IF (META .EQ. 0 .OR. METADIFF .ne. 0) THEN + DPSDT=PS + CALL CONTGL(DPSDT,DPSDL,DPSDM,DIV,UV(:,:,1),UV(:,:,MLEVEL+1), & + BREITE,ETA,MLAT,AK,BK,MAXL*MAXB,MAXB,MLEVEL) + END IF + + END IF ! MGAUSS + +!! CREATE FILE VERTICAL.EC NEEDED BY POP MODEL + + OPEN(21,FILE='VERTICAL.EC') + WRITE(21,'(A)') + WRITE(21,'(A)') 'VERTICAL DISCRETIZATION OF POP MODEL' + WRITE(21,'(A)') + write(21,'(i3,a)') MLEVEL,' number of layers' + WRITE(21,'(A)') + WRITE(21,'(A)') '* A(NLEV+1)' + WRITE(21,'(A)') + DO 205 I=1,MLEVEL+1 +205 WRITE(21,'(F18.12)') AK(I) + WRITE(21,'(A)') + WRITE(21,'(A)') '* B(NLEV+1)' + WRITE(21,'(A)') + DO 210 I=1,MLEVEL+1 +210 WRITE(21,'(F18.12)') BK(I) + CLOSE(21) + +!------------------------------------------------------------------ +! READING OF OMEGA +!------------------------------------------------------------------ + + IF (MOMEGA .NE. 0 ) THEN + + ALLOCATE (OMR(MAXL, MAXB, MLEVEL)) + + FILENAME='fort.19' + CALL READLATLON(FILENAME,OMR,MAXL,MAXB,MLEVEL,(/135/)) + + IF (MOMEGADIFF .NE. 0) THEN + + DO K=1,MLEVEL + CALL STATIS(MAXL,MAXB,1,ETA(:,:,K),RMS,MW,SIG) + WRITE(*,'(A12,I3,3F12.4)') ' ETA: ',K,RMS,MW,SIG + CALL STATIS(MAXL,MAXB,1,OMR(:,:,K),RMS,MW,SIG) + WRITE(*,'(A12,I3,3F12.4)') ' OMEGA: ',K,RMS,MW,SIG + CALL STATIS(MAXL,MAXB,1,OM(:,:,K)-OMR(:,:,K),RMS,MW,SIG) + WRITE(*,'(A12,I3,3F12.4)') 'OMEGA DIFF: ',K,RMS,MW,SIG + END DO + + END IF + END IF + +!------------------------------------------------------------------ +! READING OF ETA +!------------------------------------------------------------------ + + IF (META .NE. 0 ) THEN + + ALLOCATE (ETAR(MAXL, MAXB, MLEVEL)) + + P00=101325. + FILENAME='fort.21' + CALL READLATLON(FILENAME,ETAR,MAXL,MAXB,MLEVEL,(/77/)) + + IF(MDPDETA .EQ. 1) THEN + DO K=1,MLEVEL + DAK=AK(K+1)-AK(K) + DBK=BK(K+1)-BK(K) + DO J=1,MAXB + DO I=1,MAXL + ETAR(I,J,K)=2*ETAR(I,J,K)*PS(I,J,1)*(DAK/PS(I,J,1)+DBK)/ & + (DAK/P00+DBK) + IF (K .GT. 1) ETAR(I,J,K)=ETAR(I,J,K)-ETAR(I,J,K-1) + END DO + END DO + END DO + END IF + + IF (METADIFF .NE. 0 ) THEN + + DO K=1,MLEVEL + CALL STATIS(MAXL,MAXB,1,ETA(:,:,K),RMS,MW,SIG) + WRITE(*,'(A12,I3,3F12.4)') ' ETA: ',K,RMS,MW,SIG + CALL STATIS(MAXL,MAXB,1,ETAR(:,:,K),RMS,MW,SIG) + WRITE(*,'(A12,I3,3F12.4)') ' ETAR: ',K,RMS,MW,SIG + CALL STATIS(MAXL,MAXB,1,ETA(:,:,K)-ETAR(:,:,K),RMS,MW,SIG) + WRITE(*,'(A12,I3,3F12.4)') 'ETA DIFF: ',K,RMS,MW,SIG + END DO + DO K=1,MLEVEL + WRITE(*,'(I3,2F12.4)') K,ETA(1,MAXB/2,K),ETAR(1,MAXB/2,K) + END DO + ELSE + ETA=ETAR + END IF + END IF + + ALLOCATE (T(MAXL, MAXB, MLEVEL)) + ALLOCATE (QA(MAXL, MAXB, MLEVEL)) + +!------------------------------------------------------------------ +!! READING OF T +!------------------------------------------------------------------ + +! OPENING OF UNBLOCKED GRIB FILE + + FILENAME='fort.11' + CALL READLATLON(FILENAME,T,MAXL,MAXB,MLEVEL,(/130/)) + +!------------------------------------------------------------------ +!! READING OF SPECIFIC HUMIDITY +!------------------------------------------------------------------ + + FILENAME='fort.17' + CALL READLATLON(FILENAME,QA,MAXL,MAXB,MLEVEL,(/133/)) + +!------------------------------------------------------------------ +! TEST READING OF UV from MARS (debug only) +!------------------------------------------------------------------ +! FILENAME='fort.22' +! CALL READLATLON(FILENAME,UV2,MAXL,MAXB,2*MLEVEL,2,(/131,132/)) + +!------------------------------------------------------------------ +!! WRITE MODEL LEVEL DATA TO fort.15 +!------------------------------------------------------------------ + +!! Calculation of etadot in CONTGL needed scaled winds (ucosphi,vcosphi) +!! Now we are transforming back to the usual winds. + + DO K=1,MLEVEL + DO J=2,MAXB-1 + COSB=SQRT(1.0-(BREITE(J))*(BREITE(J))) + UV(:,J,K)=UV(:,J,K)/COSB + UV(:,J,MLEVEL+K)=UV(:,J,MLEVEL+K)/COSB + END DO + +! special treatment for poles, if necessary. + DO J=1,MAXB,MAXB-1 + COSB=SQRT(1.0-(BREITE(J))*(BREITE(J))) + IF (1.0-BREITE(J)*BREITE(J) .GT. 0 .OR. MGAUSS .NE. 1) THEN + IF (RLA0 .EQ. -90.0 .AND. J .EQ. MAXB .OR. & + RLA1 .EQ. 90.0 .AND. J .EQ. 1) THEN + UV(:,J,K)=UV(:,J,K)*1.D6 + UV(:,J,MLEVEL+K)=UV(:,J,MLEVEL+K)*1.D6 + ELSE + UV(:,J,K)=UV(:,J,K)/COSB + UV(:,J,MLEVEL+K)=UV(:,J,MLEVEL+K)/COSB + END IF + ELSE + HILFUV(5:MAXL,:)=0. + HILFUV(1:2,:)=0. + IF (J.EQ.MAXB) THEN +! Suedpol + HILFUV(3:4,1)=CUA(:,4,K) + HILFUV(3:4,2)=CVA(:,4,K) + ELSE +! Nordpol + HILFUV(3:4,1)=CUA(:,2,K) + HILFUV(3:4,2)=CVA(:,2,K) + END IF + CALL RFOURTR(HILFUV(:,1),WSAVE,IFAX,MAXL/2-1,MAXL,-1) + DO I=0,MAXL-1 + IF (MANF+I .LE. MAXL) THEN + UV(I+1,J,K)=HILFUV(MANF+I,1) + ELSE + UV(I+1,J,K)=HILFUV(MANF-MAXL+I,1) + END IF + END DO + CALL RFOURTR(HILFUV(:,2),WSAVE,IFAX,MAXL/2-1,MAXL,-1) + DO I=0,MAXL-1 + IF (MANF+I .LE. MAXL) THEN + UV(I+1,J,MLEVEL+K)=HILFUV(MANF+I,2) + ELSE + UV(I+1,J,MLEVEL+K)=HILFUV(MANF-MAXL+I,2) + END IF + END DO + end if + END DO + END DO + +! open output file + call grib_open_file(LUNIT,'fort.15','w') + +! we use temperature on lat/lon on model levels as template for model level data + LUNIT2=0 + CALL GRIB_OPEN_FILE(LUNIT2,'fort.11','R') + CALL GRIB_NEW_FROM_FILE(LUNIT2,IGRIB(1), IRET) + CALL GRIB_CLOSE_FILE(LUNIT2) + + + CALL WRITELATLON & + (LUNIT,IGRIB(1),OGRIB,UV(:,:,1),MAXL,MAXB,MLEVEL,MLEVELIST,1,(/131/)) + + CALL WRITELATLON & + (LUNIT,IGRIB(1),OGRIB,UV(:,:,MLEVEL+1),MAXL,MAXB,MLEVEL,MLEVELIST,1,(/132/)) + + IF (MDPDETA .ne. 1 .AND. MGAUSS .EQ. 0 .and. META .eq. 1) THEN + CALL WRITELATLON & + (LUNIT,IGRIB(1),OGRIB,ETA,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/77/)) + ELSE + CALL WRITELATLON & + (LUNIT,IGRIB(1),OGRIB,ETA,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/METAPAR/)) + END IF + + CALL WRITELATLON(LUNIT,IGRIB(1),OGRIB,T,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/130/)) + + CALL WRITELATLON(LUNIT,IGRIB(1),OGRIB,PS,MAXL,MAXB,1,'1',1,(/134/)) + + CALL GRIB_SET(IGRIB(1),"levelType","ml") + CALL GRIB_SET(IGRIB(1),"typeOfLevel","hybrid") + CALL WRITELATLON(LUNIT,IGRIB(1),OGRIB,QA,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/133/)) + + + IF (MOMEGA .EQ. 1) THEN + CALL GRIB_OPEN_FILE(LUNIT2,'fort.25','w') + CALL WRITELATLON & + (LUNIT2,IGRIB(1),OGRIB,OMR,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/135/)) + + IF (MOMEGADIFF .EQ. 1) THEN + CALL WRITELATLON(LUNIT2,IGRIB(1),OGRIB,DPSDT,MAXL,MAXB,1,'1',1,(/158/)) + OM=OM-OMR + CALL WRITELATLON & + (LUNIT2,IGRIB(1),OGRIB,OM,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/001/)) + CALL GRIB_CLOSE_FILE(LUNIT2) + END IF + END IF + + IF (META .EQ. 1 .AND. METADIFF .EQ. 1) THEN + CALL GRIB_OPEN_FILE(LUNIT2,'fort.26','w') + CALL WRITELATLON & + (LUNIT2,IGRIB(1),OGRIB,ETAR,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/135/)) +! IF (MOMEGADIFF .EQ. 1) THEN + CALL WRITELATLON(LUNIT2,IGRIB(1),OGRIB,DPSDT,MAXL,MAXB,1,'1',1,(/158/)) + OM=ETA-ETAR + CALL WRITELATLON & + (LUNIT2,IGRIB(1),OGRIB,OM,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/001/)) + CALL GRIB_CLOSE_FILE(LUNIT2) +! END IF + END IF + + CALL GRIB_CLOSE_FILE(LUNIT) + +2000 STOP 'SUCCESSFULLY FINISHED calc_etadot: CONGRATULATIONS' +3000 STOP 'ROUTINE calc_etadot: ERROR' +9999 stop 'ROUTINE calc_etadot: ERROR' + +END + +!------------------------------------------------------------------ +INTEGER FUNCTION IA (FIELD1,NI,NJ,NK,G) + + +!------------------------------------------------------------------ +!! Calculate something that is roughly log10( maxval(field1)/g ) [PS] +!------------------------------------------------------------------ + + + IMPLICIT NONE + + INTEGER :: I,J,K + INTEGER, INTENT(IN) :: NI,NJ,NK + REAL, INTENT(IN) :: FIELD1(NI,NJ,NK) + REAL, INTENT(IN) :: G + REAL :: RMIN,RMAX,XMAX,A,A1,A2 + + RMAX=FIELD1(1,1,1) + RMIN=FIELD1(1,1,1) + + DO 100 K=1,NK + DO 100 J=1,NJ + DO 100 I=1,NI + IF (FIELD1(I,J,K) .GT. RMAX) RMAX=FIELD1(I,J,K) + IF (FIELD1(I,J,K) .LT. RMIN) RMIN=FIELD1(I,J,K) +100 CONTINUE + + IF (ABS(RMIN) .GT. RMAX .OR. ABS(RMIN) .EQ. RMAX) THEN + XMAX=ABS(RMIN) + ELSE + XMAX=RMAX + END IF + + IF (XMAX .EQ. 0) THEN + IA = 0 + RETURN + END IF + + A1=LOG10( (G/10.d0)/XMAX ) + A2=LOG10( G/XMAX ) + IF (A1 .gt. A2) THEN + A=A2 + ELSE + A=A1 + END IF + + IF (A .GT. 0) IA=INT(A) + IF (A .LT. 0) IA=INT(A-1.0) + + RETURN + +END + +SUBROUTINE STATIS (NI,NJ,NK,PHI,RMS,MW,SIG) + +!------------------------------------------------------------------ +!! calculate mean, rms, stdev +!------------------------------------------------------------------ + + IMPLICIT REAL (A-H,O-Z) + + REAL PHI(NI,NJ,NK),SIG,MW,RMS,P + + N=NI*NJ*NK + + RMS=0. + MW=0. +! 10.86 sinstead of 11.04 sec + DO 10 K=1,NK + DO 10 J=1,NJ + DO 10 I=1,NI + P=PHI(I,J,K) + RMS=RMS+P*P + MW=MW+P +10 CONTINUE + + RMS=SQRT(RMS/N) + MW=MW/N + + IF (RMS*RMS-MW*MW .LT. 0.) THEN + SIG=0.0 + ELSE + SIG=SQRT(RMS*RMS-MW*MW) + END IF + + RETURN + +END diff --git a/Source/Fortran/changelog.txt b/Source/Fortran/changelog.txt new file mode 100644 index 0000000000000000000000000000000000000000..18de918707c431461a2e93aadc56c0cb19be8e88 --- /dev/null +++ b/Source/Fortran/changelog.txt @@ -0,0 +1,25 @@ +2019-08-19 PS +rwGRIB2.f90 subroutine readlatlon: check alloc status deallocate values + - in case of empty input file + NOTE: check why we run into that at all! + Improve by realloc only if dim has changed + +2019-08-21 PS + introduce the "new" versions of source files: + all .f90 free format + code beautification + regression test is OK + + make new local gfortran makefiles, remove parameters not needed anymore + + change filenames rwgrib.f90 (all lower), preconvert to calc_etadot, + adapt messages and comments in calc_etadot.f90 + adapt all makefiles to new filenames + adapt success message of logfiles in regression test references + redo regression test OK + + provide softlinks for standards: + calc_etadot.out -> calc_etadot_fast.out + makefile_local_gfortran -> makefile_fast + + diff --git a/Source/Fortran/ftrafo.f90 b/Source/Fortran/ftrafo.f90 new file mode 100644 index 0000000000000000000000000000000000000000..7995967ac40b0002d0858dd22494cb9b9fadd4ae --- /dev/null +++ b/Source/Fortran/ftrafo.f90 @@ -0,0 +1,504 @@ +MODULE FTRAFO + +!! Implementation of the spectral transformation using reduced the Gaussian grid + +CONTAINS + +! Implementierung der spektralen Transformationsmethode unter Verwendung +! des reduzierten Gauss'schen Gitters + + + SUBROUTINE VDTOUV(XMN,XLAM,XPHI,GWSAVE,IFAX,P,MLAT,MNAUF,NI,NJ,NK) + +!! Berechnung der scale winds aus Vorticity und Divergenz +!! uebergibt man in XMN die Divergenz, so wird der divergente Anteil des +!! Windes (XPHI=Ud,XPHI=Vd) zurueckgegeben, uebergibt man die Vorticity, so +!! erhaelt man den rotationellen Wind (XLAM=Vrot,XPHI=-Urot). +!! Summiert man beide, erhaelt man den gesamten Scale wind +! GWSAVE ist ein Hilfsfeld fuer die FFT +! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung +! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis +! MNAUF gibt die spektrale Aufloesung an, +! NI = Anzahl der Gauss'schen Gitterpunkte pro Flaeche +! NJ = Anzahl der Gauss'schen Breiten, +! NK = Anzahl der Niveaus + + USE PHTOGR + + IMPLICIT NONE + INTEGER J,N,NI,NJ,NK,MNAUF,GGIND(NJ/2) + INTEGER MLAT(NJ),IFAX(10,NJ) + REAL XMN(0:(MNAUF+1)*(MNAUF+2)-1,NK) + REAL P(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) + REAL H(0:(MNAUF+2)*(MNAUF+3)/2) + REAL XLAM(NI,NK),XPHI(NI,NK) + REAL GWSAVE(8*NJ+15,NJ/2) + REAL SCR,SCI,ACR,ACI,MUSCR,MUSCI,MUACR,MUACI + REAL RT,IT + + GGIND(1)=0 + DO 4 J = 2,NJ/2 + GGIND(J)=GGIND(J-1)+MLAT(J-1) +4 CONTINUE + +!$OMP PARALLEL DO SCHEDULE(DYNAMIC) + DO 5 J = 1,NJ/2 + CALL VDUVSUB(J,XMN,XLAM,XPHI,GWSAVE,IFAX,P,GGIND(J),MLAT,MNAUF,NI,NJ,NK) +5 CONTINUE +!$OMP END PARALLEL DO + + RETURN + + END SUBROUTINE VDTOUV + + SUBROUTINE VDUVSUB(J,XMN,XLAM,XPHI,GWSAVE,IFAX,P,GGIND,MLAT,MNAUF,NI,NJ,NK) + + USE PHTOGR + + IMPLICIT NONE + + INTEGER J,K,M,N,NI,NJ,NK,MNAUF,GGIND,LL,LLP,LLH,LLS,LLPS,LLHS + INTEGER MLAT(NJ),IFAX(10,NJ) + REAL UFOUC(0:MAXAUF),MUFOUC(0:MAXAUF) + REAL VFOUC(0:MAXAUF),MVFOUC(0:MAXAUF) + REAL XMN(0:(MNAUF+1)*(MNAUF+2)-1,NK) + REAL P(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) + REAL H(0:(MNAUF+2)*(MNAUF+3)/2) + REAL XLAM(NI,NK),XPHI(NI,NK) + REAL GWSAVE(8*NJ+15,NJ/2) + REAL ERAD,SCR,SCI,ACR,ACI,MUSCR,MUSCI,MUACR,MUACI + REAL FAC(0:MNAUF),RT,IT + + ERAD = 6367470.D0 + + FAC(0)=0.D0 + DO 12 N=1,MNAUF + FAC(N)=-ERAD/DBLE(N)/DBLE(N+1) +12 CONTINUE + + CALL DPLGND(MNAUF,P(0,J),H) + DO 3 K = 1,NK + LL=0 + LLP=0 + LLH=0 + DO 2 M = 0,MNAUF + SCR=0.D0 + SCI=0.D0 + ACR=0.D0 + ACI=0.D0 + MUSCR=0.D0 + MUSCI=0.D0 + MUACR=0.D0 + MUACI=0.D0 + LLS=LL + LLPS=LLP + LLHS=LLH + IF (2*M+1 .LT. MLAT(J)) THEN + DO 1 N = M,MNAUF,2 + RT=XMN(2*LL,K)*FAC(N) + IT=XMN(2*LL+1,K)*FAC(N) + SCR =SCR+ RT*P(LLP,J) + SCI =SCI+ IT*P(LLP,J) + MUACR =MUACR+ RT*H(LLH) + MUACI =MUACI+ IT*H(LLH) + LL=LL+2 + LLP=LLP+2 + LLH=LLH+2 +1 CONTINUE + LL=LLS+1 + LLP=LLPS+1 + LLH=LLHS+1 + DO 11 N = M+1,MNAUF,2 + RT=XMN(2*LL,K)*FAC(N) + IT=XMN(2*LL+1,K)*FAC(N) + ACR =ACR+ RT*P(LLP,J) + ACI =ACI+ IT*P(LLP,J) + MUSCR =MUSCR+ RT*H(LLH) + MUSCI =MUSCI+ IT*H(LLH) + LL=LL+2 + LLP=LLP+2 + LLH=LLH+2 +11 CONTINUE + END IF + LL=LLS+(MNAUF-M+1) + LLP=LLPS+(MNAUF-M+3) + LLH=LLHS+(MNAUF-M+2) + + UFOUC(2*M)=-M*(SCI-ACI) + UFOUC(2*M+1)=M*(SCR-ACR) + VFOUC(2*M)=-M*(SCI+ACI) + VFOUC(2*M+1)=M*(SCR+ACR) + + MUFOUC(2*M)=-(MUSCR-MUACR) + MUFOUC(2*M+1)=-(MUSCI-MUACI) + MVFOUC(2*M)=-(MUSCR+MUACR) + MVFOUC(2*M+1)=-(MUSCI+MUACI) +2 CONTINUE + + CALL RFOURTR(VFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XLAM(GGIND+1:GGIND+MLAT(J),K)=VFOUC(0:MLAT(J)-1) + CALL RFOURTR(UFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XLAM(NI-GGIND-MLAT(J)+1:NI-GGIND,K)=UFOUC(0:MLAT(J)-1) + + CALL RFOURTR(MVFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XPHI(GGIND+1:GGIND+MLAT(J),K)=MVFOUC(0:MLAT(J)-1) + CALL RFOURTR(MUFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XPHI(NI-GGIND-MLAT(J)+1:NI-GGIND,K)=MUFOUC(0:MLAT(J)-1) + +3 CONTINUE + + RETURN + + END SUBROUTINE VDUVSUB + + + SUBROUTINE PHGRAD(XMN,XLAM,XPHI,GWSAVE,IFAX,P,H,MLAT,MNAUF,NI,NJ,NK) + +!! Berechnung des Gradienten eines Skalars aus dem Feld des +!! Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der +!! Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. +! GWSAVE ist ein Hilfsfeld fuer die FFT +! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung +! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis +! MNAUF gibt die spektrale Aufloesung an, +! NI = Anzahl der Gauss'schen Gitterpunkte, +! NJ = Anzahl der Gauss'schen Breiten, +! NK = Anzahl der Niveaus + + USE PHTOGR + + IMPLICIT NONE + + INTEGER J,K,M,N,NI,NJ,NK,MNAUF,GGIND,LL,LLP,LLH,LLS,LLPS,LLHS + INTEGER MLAT(NJ),IFAX(10,NJ) + REAL UFOUC(0:MAXAUF),MUFOUC(0:MAXAUF) + REAL VFOUC(0:MAXAUF),MVFOUC(0:MAXAUF) + REAL XMN(0:(MNAUF+1)*(MNAUF+2)-1,NK) + REAL P(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) + REAL H(0:(MNAUF+2)*(MNAUF+3)/2) + REAL XLAM(NI,NK),XPHI(NI,NK) + REAL GWSAVE(8*NJ+15,NJ/2) + REAL ERAD + REAL SCR,SCI,ACR,ACI,MUSCR,MUSCI,MUACR,MUACI,RT,IT + + ERAD = 6367470.0 + + GGIND=0 + DO 4 J = 1,NJ/2 + CALL DPLGND(MNAUF,P(0,J),H) + DO 3 K = 1,NK + LL=0 + LLP=0 + LLH=0 + DO 2 M = 0,MNAUF + SCR=0.D0 + SCI=0.D0 + ACR=0.D0 + ACI=0.D0 + MUSCR=0.D0 + MUSCI=0.D0 + MUACR=0.D0 + MUACI=0.D0 + LLS=LL + LLPS=LLP + LLHS=LLH + IF (2*M+1 .LT. MLAT(J)) THEN + DO 1 N = M,MNAUF,2 + RT=XMN(2*LL,K) + IT=XMN(2*LL+1,K) + SCR =SCR+ RT*P(LLP,J) + SCI =SCI+ IT*P(LLP,J) + MUACR =MUACR+RT*H(LLH) + MUACI =MUACI+ IT*H(LLH) + LL=LL+2 + LLP=LLP+2 + LLH=LLH+2 +1 CONTINUE + LL=LLS+1 + LLP=LLPS+1 + LLH=LLHS+1 + DO 11 N = M+1,MNAUF,2 + RT=XMN(2*LL,K) + IT=XMN(2*LL+1,K) + ACR =ACR+ RT*P(LLP,J) + ACI =ACI+ IT*P(LLP,J) + MUSCR =MUSCR+ RT*H(LLH) + MUSCI =MUSCI+ IT*H(LLH) + LL=LL+2 + LLP=LLP+2 + LLH=LLH+2 +11 CONTINUE + END IF + LL=LLS+(MNAUF-M+1) + LLP=LLPS+(MNAUF-M+3) + LLH=LLHS+(MNAUF-M+2) + + UFOUC(2*M)=-M*(SCI-ACI)/ERAD + UFOUC(2*M+1)=M*(SCR-ACR)/ERAD + VFOUC(2*M)=-M*(SCI+ACI)/ERAD + VFOUC(2*M+1)=M*(SCR+ACR)/ERAD + + MUFOUC(2*M)=-(MUSCR-MUACR)/ERAD + MUFOUC(2*M+1)=-(MUSCI-MUACI)/ERAD + MVFOUC(2*M)=-(MUSCR+MUACR)/ERAD + MVFOUC(2*M+1)=-(MUSCI+MUACI)/ERAD +2 CONTINUE + + CALL RFOURTR(VFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XLAM(GGIND+1:GGIND+MLAT(J),K)=VFOUC(0:MLAT(J)-1) + CALL RFOURTR(UFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XLAM(NI-GGIND-MLAT(J)+1:NI-GGIND,K)=UFOUC(0:MLAT(J)-1) + + CALL RFOURTR(MVFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XPHI(GGIND+1:GGIND+MLAT(J),K)=MVFOUC(0:MLAT(J)-1) + CALL RFOURTR(MUFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) + XPHI(NI-GGIND-MLAT(J)+1:NI-GGIND,K)=MUFOUC(0:MLAT(J)-1) + +3 CONTINUE + GGIND=GGIND+MLAT(J) +4 CONTINUE + + + RETURN + + END SUBROUTINE PHGRAD + + + SUBROUTINE PHGRACUT(XMN,XLAM,XPHI,GWSAVE,IFAX,P,H,MAUF,MNAUF,NI,NJ,MANF,NK) + +!! Berechnung des Gradienten eines Skalars aus dem Feld des +!! Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der +!! Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. +! GWSAVE ist ein Hilfsfeld fuer die FFT +! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung +! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis +! MNAUF gibt die spektrale Aufloesung an, +! NI = Anzahl der Gauss'schen Gitterpunkte, +! NJ = Anzahl der Gauss'schen Breiten, +! NK = Anzahl der Niveaus + + USE PHTOGR + + IMPLICIT NONE + + INTEGER J,K,M,N,NI,NJ,NK,MNAUF,GGIND,LL,LLP,LLH,LLS,LLPS,LLHS + INTEGER MAUF,MANF,I,IFAX(10) + REAL UFOUC(0:MAXAUF),MUFOUC(0:MAXAUF) + REAL VFOUC(0:MAXAUF),MVFOUC(0:MAXAUF) + REAL XMN(0:(MNAUF+1)*(MNAUF+2)-1,NK) + REAL P(0:(MNAUF+3)*(MNAUF+4)/2,NJ) + REAL H(0:(MNAUF+2)*(MNAUF+3)/2) + REAL XLAM(NI,NJ,NK),XPHI(NI,NJ,NK) + REAL HLAM(MAXAUF,2),HPHI(MAXAUF,2) + REAL GWSAVE(4*MAUF+15) + REAL ERAD + REAL SCR,SCI,ACR,ACI,MUSCR,MUSCI,MUACR,MUACI,RT,IT + + ERAD = 6367470.0 + + GGIND=0 + DO 4 J = 1,NJ + CALL DPLGND(MNAUF,P(0,J),H) + DO 3 K = 1,NK + LL=0 + LLP=0 + LLH=0 + DO 2 M = 0,MNAUF + SCR=0.D0 + SCI=0.D0 + ACR=0.D0 + ACI=0.D0 + MUSCR=0.D0 + MUSCI=0.D0 + MUACR=0.D0 + MUACI=0.D0 + LLS=LL + LLPS=LLP + LLHS=LLH + IF (2*M+1 .LT. MAUF) THEN + DO 1 N = M,MNAUF,2 + RT=XMN(2*LL,K) + IT=XMN(2*LL+1,K) + SCR =SCR+ RT*P(LLP,J) + SCI =SCI+ IT*P(LLP,J) + MUACR =MUACR+RT*H(LLH) + MUACI =MUACI+ IT*H(LLH) + LL=LL+2 + LLP=LLP+2 + LLH=LLH+2 +1 CONTINUE + LL=LLS+1 + LLP=LLPS+1 + LLH=LLHS+1 + DO 11 N = M+1,MNAUF,2 + RT=XMN(2*LL,K) + IT=XMN(2*LL+1,K) + ACR =ACR+ RT*P(LLP,J) + ACI =ACI+ IT*P(LLP,J) + MUSCR =MUSCR+ RT*H(LLH) + MUSCI =MUSCI+ IT*H(LLH) + LL=LL+2 + LLP=LLP+2 + LLH=LLH+2 +11 CONTINUE + END IF + LL=LLS+(MNAUF-M+1) + LLP=LLPS+(MNAUF-M+3) + LLH=LLHS+(MNAUF-M+2) + + UFOUC(2*M)=-M*(SCI-ACI)/ERAD + UFOUC(2*M+1)=M*(SCR-ACR)/ERAD + VFOUC(2*M)=-M*(SCI+ACI)/ERAD + VFOUC(2*M+1)=M*(SCR+ACR)/ERAD + + MUFOUC(2*M)=-(MUSCR-MUACR)/ERAD + MUFOUC(2*M+1)=-(MUSCI-MUACI)/ERAD + MVFOUC(2*M)=-(MUSCR+MUACR)/ERAD + MVFOUC(2*M+1)=-(MUSCI+MUACI)/ERAD +2 CONTINUE + + CALL RFOURTR(VFOUC,GWSAVE,IFAX,MNAUF,MAUF,1) + + CALL RFOURTR(MVFOUC,GWSAVE,IFAX,MNAUF,MAUF,1) + + DO 6 I=0,NI-1 + IF (MANF+I .LE. MAUF) THEN + XLAM(I+1,J,K)=VFOUC(MANF+I-1) + XPHI(I+1,J,K)=MVFOUC(MANF+I-1) + ELSE + XLAM(I+1,J,K)=VFOUC(MANF-MAUF+I-1) + XPHI(I+1,J,K)=MVFOUC(MANF-MAUF+I-1) + END IF +6 CONTINUE +3 CONTINUE + GGIND=GGIND+MAUF +4 CONTINUE + + RETURN + + END SUBROUTINE PHGRACUT + + SUBROUTINE CONTGL(PS,DPSDL,DPSDM,DIV,U,V,BREITE,ETA,MLAT,A,B,NI,NJ,NK) + +!! Berechnung der Divergenz aus dem Windfeld (U,V) +!! im Phasenraum. Zurueckgegeben werden die Felder der +!! Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. +! GWSAVE ist ein Hilfsfeld fuer die FFT +! P enthaelt die assoziierten Legendrepolynome, H deren Ableitung +! MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis +! MNAUF gibt die spektrale Aufloesung an, +! NI = Anzahl der Gauss'schen Gitterpunkte, +! NJ = Anzahl der Gauss'schen Breiten, +! NK = Anzahl der Niveaus +! Beachte, dass das Windfeld eine um 1 erhoehte Aufloesung in mu-Richtung hat. + + IMPLICIT NONE + + INTEGER NI,NJ,NK,I,J,K,MLAT(NJ),L + + REAL A(NK+1),B(NK+1) + REAL PS(NI),DPSDL(NI),DPSDM(NI) + REAL DIV(NI,NK),U(NI,NK),V(NI,NK),ETA(NI,NK) + REAL BREITE(NJ) + + REAL DIVT1,DIVT2,POB,PUN,DPSDT,COSB + + L=0 + DO 4 J=1,NJ + COSB=(1.0-BREITE(J)*BREITE(J)) + DO 3 I=1,MLAT(J) + L=L+1 + DIVT1=0.0 + DIVT2=0.0 + DO 1 K=1,NK + POB=A(K)+B(K)*PS(L) + PUN=A(K+1)+B(K+1)*PS(L) + + DIVT1=DIVT1+DIV(L,K)*(PUN-POB) + IF (COSB .GT. 0.) THEN + DIVT2=DIVT2+(B(K+1)-B(K))*PS(L)* & + (U(L,K)*DPSDL(L)+V(L,K)*DPSDM(L))/COSB + END IF + + ETA(L,K)=-DIVT1-DIVT2 +1 CONTINUE + + DPSDT=(-DIVT1-DIVT2)/PS(L) + + DO 2 K=1,NK + ETA(L,K)=ETA(L,K)-DPSDT*B(K+1)*PS(L) +2 CONTINUE + PS(L)=DPSDT*PS(L) +3 CONTINUE +4 CONTINUE + + RETURN + + END SUBROUTINE CONTGL + + SUBROUTINE OMEGA(PS,DPSDL,DPSDM,DIV,U,V,BREITE,E,MLAT,A,B,NGI,NGJ,MKK) + +!! calculates $\omega$ in the hybrid ($\eta$-) coordinate system + +! OMEGA berechnet omega im Hybridkoordinatensystem +! PS ist der Bodendruck, +! DPSDL,DPSDM sind die Komponenten des Gradienten des Logarithmus des +! Bodendrucks +! DIV,U,V sind die horizontale Divergenz und das horizontale Windfeld +! BREITE ist das Feld der Gauss'schen Breiten +! E ist omega, + + IMPLICIT NONE + + INTEGER I,J,K,L,NGI,NGJ,MKK,MLAT(NGJ) + + REAL PS(NGI),DPSDL(NGI),DPSDM(NGI),A(MKK+1),B(MKK+1) + REAL DIV(NGI,MKK),U(NGI,MKK),V(NGI,MKK),E(NGI,MKK) + REAL BREITE(NGJ) + + REAL DIVT1,DIVT2,POB,PUN,DP,X,Y,COSB + REAL DIVT3(MKK+2) + + L=0 + DO 4 J=1,NGJ + COSB=(1.0-BREITE(J)*BREITE(J)) + DO 3 I=1,MLAT(J) + L=L+1 + DIVT1=0.0 + DIVT2=0.0 + DIVT3(1)=0.0 + DO 1 K=1,MKK + POB=A(K)+B(K)*PS(L) + PUN=A(K+1)+B(K+1)*PS(L) + DP=PUN-POB + + Y=PS(L)*(U(L,K)*DPSDL(L)+V(L,K)*DPSDM(L))/COSB + IF (K .LT. 3) THEN + X=0.0 + ELSE + X=(B(K+1)-B(K))*Y + END IF + + DIVT1=DIVT1+DIV(L,K)*DP + DIVT2=DIVT2+X + + DIVT3(K+1)=-DIVT1-DIVT2 + + IF (K .GT. 1) THEN + E(L,K) = 0.5*(POB+PUN)/ & + DP*Y*((B(K+1)-B(K))+(A(K+1)*B(K)-A(K)*B(K+1))/DP*LOG(PUN/POB)) + ELSE + E(L,K) = 0.0 + END IF + + E(L,K) = E(L,K)+0.5*(DIVT3(K)+DIVT3(K+1)) + +1 CONTINUE +3 CONTINUE +4 CONTINUE + + RETURN + + END SUBROUTINE OMEGA + +END MODULE FTRAFO diff --git a/Source/Fortran/grphreal.f90 b/Source/Fortran/grphreal.f90 new file mode 100644 index 0000000000000000000000000000000000000000..b9e61f20736dfffe4c8db64bb65b74581c59f9f7 --- /dev/null +++ b/Source/Fortran/grphreal.f90 @@ -0,0 +1,185 @@ +MODULE GRTOPH + + USE PHTOGR + +CONTAINS + + SUBROUTINE GRPH213(CXMN,FELD,WSAVE,IFAX,Z,W,MLAT,MNAUF,MAXL,MAXB,MLEVEL) + +!! WRONG>>> DIE ROUTINE F]HRT EINE TRANSFORMATION EINER +!! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN +!! RAUM AUF KUGELKOORDINATEN DURCH + +! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE +! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF +! CXM = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld +! FELD = FELD DER METEOROLOGISCHEN VARIABLEN +! WSAVE = Working Array fuer Fouriertransformation +! Z = LEGENDREFUNKTIONSWERTE +! +! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN +! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN +! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN +! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN + + IMPLICIT REAL (A-H,O-Z) + +! Anzahl der Gitterpunkte pro Breitenkreis des reduzierten +! Gauss'schen Gitters + INTEGER MLAT(MAXB),ISIZE,IFAX(10,MAXB) + +! FELD DER LEGENDREPOLYNOME FUER EINE BREITE + REAL Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) + +! LOGICAL*1 USED(((216*217)/2+1)*160) + + DIMENSION CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) + REAL FELD(MAXL,MLEVEL) + DIMENSION WSAVE(8*MAXB+15,MAXB/2) + REAL W(MAXB) + DIMENSION IND(MAXB) + + IND(1)=0 + DO 6 J=2,MAXB/2 + IND(j)=IND(J-1)+MLAT(J-1) +6 CONTINUE +!$OMP PARALLEL DO SCHEDULE(DYNAMIC) + DO 16 L=1,MLEVEL + CALL GRPHSUB(L,IND,CXMN,FELD,WSAVE,IFAX,Z,W,MLAT,MNAUF,MAXL,MAXB,MLEVEL) +16 CONTINUE +!$omp end parallel do + + RETURN + + END SUBROUTINE GRPH213 + + SUBROUTINE GRPHSUB(L,IND,CXMN,FELD,WSAVE,IFAX,Z,W,MLAT,MNAUF,MAXL,MAXB,MLEVEL) + +!! DIE ROUTINE F]HRT EINE TRANSFORMATION EINER +!! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN +!! RAUM AUF KUGELKOORDINATEN DURCH +! +! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE +! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF +! CXM = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld +! FELD = FELD DER METEOROLOGISCHEN VARIABLEN +! WSAVE = Working Array fuer Fouriertransformation +! Z = LEGENDREFUNKTIONSWERTE +! +! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN +! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN +! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN +! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN + + IMPLICIT REAL (A-H,O-Z) + +! FELD DER FOURIERKOEFFIZIENTEN + REAL CXMS(4*(MNAUF+1)) + REAL CXMA(4*(MNAUF+1)) + REAL,ALLOCATABLE :: CXM(:,:) + +! Anzahl der Gitterpunkte pro Breitenkreis des reduzierten +! Gauss'schen Gitters + INTEGER MLAT(MAXB),ISIZE + +! FELD DER LEGENDREPOLYNOME FUER EINE BREITE + REAL Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) + +! LOGICAL*1 USED(((216*217)/2+1)*160) + + REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) + REAL FELD(MAXL,MLEVEL) + REAL WSAVE(8*MAXB+15,MAXB/2) + INTEGER IFAX(10,MAXB) + REAL W(MAXB) + INTEGER IND(MAXB) + + ALLOCATE(CXM( 4*MAXB,MAXB)) + DO 5 J=1,MAXB/2 + CXMS(1:MLAT(J))=FELD(IND(J)+1:IND(J)+MLAT(J),L) + CALL RFOUFTR(CXMS,WSAVE(1,J),IFAX(:,J),MNAUF,MLAT(J),1) + CXMA(1:MLAT(J))=FELD(MAXL-IND(J)-MLAT(J)+1:MAXL-IND(J),L) + CALL RFOUFTR(CXMA,WSAVE(1,J),IFAX(:,J),MNAUF,MLAT(J),1) + DO 4 I=1,2*(MNAUF+1) + CXM(I,J)=CXMS(I)+CXMA(I) + CXM(I,MAXB+1-J)=CXMS(I)-CXMA(I) +4 CONTINUE +5 CONTINUE + CALL LGTR213(CXMN(0,L),CXM,Z,W,MLAT,MNAUF,MAXB) + + DEALLOCATE(CXM) + + RETURN + + END SUBROUTINE GRPHSUB +! + SUBROUTINE LGTR213(CXMN,CXM,Z,W,MLAT,MNAUF,MAXB) + +!! DIESE ROUTINE BERECHNET DIE KFFKs CXMN + + IMPLICIT REAL (A-H,O-Z) + INTEGER MLAT(MAXB) + DIMENSION CXM(0:4*MAXB-1,MAXB) + DIMENSION CXMN(0:2*(((MNAUF+1)*MNAUF)/2+MNAUF)+1) + REAL*8 Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) + REAL*8 W(MAXB),CR,CI,HILF + LOGICAL EVEN + + + LL=0 + LLP=0 + DO 1 I=0,MNAUF + KM=0 +9 KM=KM+1 + IF (MLAT(KM) .LE. 2*I) THEN + GOTO 9 + END IF + DO 2 J=I,MNAUF + CR=0 + CI=0 + EVEN=MOD(I+J,2) .EQ. 0 + IF (EVEN) THEN + DO 3 K=KM,MAXB/2 + HILF=W(K)*Z(K,LLP) + CR=CR+CXM(2*I,K)*HILF + CI=CI+CXM(2*I+1,K)*HILF +3 CONTINUE + ELSE + DO 4 K=KM,MAXB/2 + HILF=W(K)*Z(K,LLP) + CR=CR+CXM(2*I,MAXB+1-K)*HILF + CI=CI+CXM(2*I+1,MAXB+1-K)*HILF +4 CONTINUE + END IF +5 CXMN(2*LL)=CR + CXMN(2*LL+1)=CI + LL=LL+1 + LLP=LLP+1 +2 CONTINUE + LLP=LLP+2 +1 CONTINUE + RETURN + + END SUBROUTINE LGTR213 + + SUBROUTINE RFOUFTR(CXM,TRIGS,IFAX,MNAUF,MAXL,ISIGN) +! +! BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS + + IMPLICIT REAL (A-H,O-Z) + DIMENSION CXM(0:2*MAXL-1) + DIMENSION FELD(MAXL),TRIGS(2*MAXL) + DIMENSION WSAVE(MAXAUF) + INTEGER IFAX(10) + +! NORMIERUNG... + WSAVE(1)=CXM(MAXL-1) + + CXM(1:MAXL)=CXM(0:MAXL-1)/2 + CXM(0)=WSAVE(1)/2 +! CALL CFFTF(MAXL,CXM,WSAVE) + CALL FFT99(CXM,WSAVE,TRIGS,IFAX,1,1,MAXL,1,-1) + RETURN + END SUBROUTINE RFOUFTR + +END MODULE GRTOPH diff --git a/src/jparams.h b/Source/Fortran/jparams.h similarity index 100% rename from src/jparams.h rename to Source/Fortran/jparams.h diff --git a/src/Makefile.CRAY b/Source/Fortran/makefile_cray similarity index 81% rename from src/Makefile.CRAY rename to Source/Fortran/makefile_cray index 09b13b6071c35a5e2f7ebfb023839954ba5491a2..329fad55612498c574aa964e988acfc3bcafedc5 100644 --- a/src/Makefile.CRAY +++ b/Source/Fortran/makefile_cray @@ -24,7 +24,7 @@ LDFLAGS = $(OPT) BINDIR = . -EXE = CONVERT2 +EXE = calc_etadot .f.o: @@ -35,7 +35,7 @@ EXE = CONVERT2 all: ${EXE} clean: - rm *.o + rm *.o *.mod ${EXE} phgrreal.o: phgrreal.f $(F90C) -c -g -O3 phgrreal.f @@ -46,8 +46,8 @@ grphreal.o: grphreal.f ftrafo.o: ftrafo.f $(F90C) -c -g -O3 ftrafo.f -$(BINDIR)/$(EXE): phgrreal.o grphreal.o ftrafo.o rwGRIB2.o posnam.o preconvert.o - $(F90C) $(DEBUG) $(OPT) -o $(BINDIR)/$(EXE) ftrafo.o phgrreal.o grphreal.o rwGRIB2.o posnam.o preconvert.o ${LIB} +$(BINDIR)/${EXE}: phgrreal.o grphreal.o ftrafo.o rwgrib2.o posnam.o calc_etadot.o + $(F90C) $(DEBUG) $(OPT) -o $(BINDIR)/${EXE} ftrafo.o phgrreal.o grphreal.o rwgrib2.o posnam.o calc_etadot.o ${LIB} ############################################################################### diff --git a/Source/Fortran/makefile_debug b/Source/Fortran/makefile_debug new file mode 100644 index 0000000000000000000000000000000000000000..e87cf2f190ebb1787184dc7c53bc1434e8eee8f3 --- /dev/null +++ b/Source/Fortran/makefile_debug @@ -0,0 +1,52 @@ +############################################################################### +# +# Makefile for flex_extract, Fortran code to calculate etadot +# Makefile created using by mkmf 19.3.0 +# +# Copyright: Leopold Haimberger, Petra Seibert +# SPDX-License-Identifier: GPL-2.0 +# +# Version for a machine with grib_api and emoslib installed on standard paths +# full debugging +# +############################################################################### + + +EXE = calc_etadot_debug.out + +GRIB_API_LIB= -Bstatic -lgrib_api_f90 -lgrib_api -Bdynamic -lm -ljasper +EMOSLIB=-lemosR64 +LIB = $(GRIB_API_LIB) $(EMOSLIB) + +GRIB_API_INCLUDE_DIR=/usr/include +INC = -I. -I$(GRIB_API_INCLUDE_DIR) + +FC = gfortran +OPT = -g -Og -fbacktrace -fcheck=all +FFLAGS = $(OPT) $(LIB) $(INC) -fdefault-real-8 -fopenmp -fconvert=big-endian +LDFLAGS = $(OPT) $(LIB) -fopenmp +SRC = ./rwgrib2.f90 ./calc_etadot.f90 ./ftrafo.f90 ./grphreal.f90 ./posnam.f90 ./phgrreal.f90 +OBJ = rwgrib2.o calc_etadot.o ftrafo.o grphreal.o posnam.o phgrreal.o +MOD = ftrafo.mod grtoph.mod phtogr.mod rwgrib2.mod + +.DEFAULT: + -echo $@ does not exist. + +all: ${EXE} +ftrafo.o: ./ftrafo.f90 phgrreal.o + $(FC) $(FFLAGS) -c ./ftrafo.f90 +grphreal.o: ./grphreal.f90 phgrreal.o + $(FC) $(FFLAGS) -c ./grphreal.f90 +phgrreal.o: ./phgrreal.f90 + $(FC) $(FFLAGS) -c ./phgrreal.f90 +posnam.o: ./posnam.f90 + $(FC) $(FFLAGS) -c ./posnam.f90 +calc_etadot.o: ./calc_etadot.f90 phgrreal.o grphreal.o ftrafo.o rwgrib2.o + $(FC) $(FFLAGS) -c ./calc_etadot.f90 +rwgrib2.o: ./rwgrib2.f90 + $(FC) $(FFLAGS) -c ./rwgrib2.f90 + +clean: -rm -f $(OBJ) ${EXE} $(MOD) + +${EXE}: $(OBJ) + $(FC) $(OBJ) -o ${EXE} $(LDFLAGS) diff --git a/src/Makefile.gfortran b/Source/Fortran/makefile_ecgate similarity index 80% rename from src/Makefile.gfortran rename to Source/Fortran/makefile_ecgate index da5ea1c3eb27f9a865db630c97fbd3b50261a6e8..dace8ad8983469b8549da1c07665dd3eee9cfb7c 100644 --- a/src/Makefile.gfortran +++ b/Source/Fortran/makefile_ecgate @@ -10,21 +10,22 @@ .SUFFIXES: .o .c .c~ .f .f~ .F90 .f90 .f90~ .f95 .f95~ .F .F~ .y .y~ .l .l~ \ .s .s~ .sh .sh~ .h .h~ .C .C~ .a -OPT = -g +OPT = -O3 DEBUG = -g -LIB = $(GRIB_API_LIB) $(EMOSLIB) +LIB = $(ECCODES_LIB) $(EMOSLIB) FC=gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian F90C=gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -FFLAGS = $(OPT) -I. -I$(GRIB_API_INCLUDE_DIR) -F90FLAGS = $(OPT) -I. -I$(GRIB_API_INCLUDE_DIR) +FFLAGS = $(OPT) -I. -I$(ECCODES_INCLUDE_DIR) + +F90FLAGS = $(OPT) -I. -I$(ECCODES_INCLUDE_DIR) LDFLAGS = $(OPT) BINDIR = . -EXE = CONVERT2 +EXE = calc_etadot .f.o: @@ -46,8 +47,8 @@ grphreal.o: grphreal.f ftrafo.o: ftrafo.f $(F90C) -c -g -O3 -fopenmp ftrafo.f -$(BINDIR)/${EXE}: phgrreal.o grphreal.o ftrafo.o rwGRIB2.o posnam.o preconvert.o - $(F90C) $(DEBUG) $(OPT) -o $(BINDIR)/${EXE} ftrafo.o phgrreal.o grphreal.o rwGRIB2.o posnam.o preconvert.o ${LIB} +$(BINDIR)/${EXE}: phgrreal.o grphreal.o ftrafo.o rwgrib2.o posnam.o calc_etadot.o + $(F90C) $(DEBUG) $(OPT) -o $(BINDIR)/${EXE} ftrafo.o phgrreal.o grphreal.o rwgrib2.o posnam.o calc_etadot.o ${LIB} ############################################################################### diff --git a/Source/Fortran/makefile_fast b/Source/Fortran/makefile_fast new file mode 100644 index 0000000000000000000000000000000000000000..478b37b77c3b2d563c7377753b92353e7108dd4c --- /dev/null +++ b/Source/Fortran/makefile_fast @@ -0,0 +1,54 @@ +############################################################################### +# +# Makefile for flex_extract, Fortran code to calculate etadot +# Makefile created using by mkmf 19.3.0 +# +# Copyright: Leopold Haimberger, Petra Seibert +# SPDX-License-Identifier: GPL-2.0 +# +# Version for a machine with grib_api and emoslib installed on standard paths +# full debugging +# +############################################################################### + + +EXE = calc_etadot + +#GRIB_API_LIB= -Bstatic -lgrib_api_f90 -lgrib_api -Bdynamic -lm -ljasper +ECCODES_LIB= -L/usr/local/lib -leccodes_f90 -leccodes -lm +EMOSLIB=-lemosR64 +LIB = $(ECCODES_LIB) $(EMOSLIB) + +ECCODES_INCLUDE_DIR=/usr/local/include +INC = -I. -I$(ECCODES_INCLUDE_DIR) + +FC = gfortran +OPT = -O3 -march=native +FFLAGS = $(OPT) $(LIB) $(INC) -fdefault-real-8 -fopenmp -fconvert=big-endian +LDFLAGS = $(OPT) $(LIB) -fopenmp +SRC = ./rwgrib2.f90 ./calc_etadot.f90 ./ftrafo.f90 ./grphreal.f90 ./posnam.f90 ./phgrreal.f90 +OBJ = rwgrib2.o calc_etadot.o ftrafo.o grphreal.o posnam.o phgrreal.o +MOD = ftrafo.mod grtoph.mod phtogr.mod rwgrib2.mod + +.DEFAULT: + -echo $@ does not exist. + +all: ${EXE} +ftrafo.o: ./ftrafo.f90 phgrreal.o + $(FC) $(FFLAGS) -c ./ftrafo.f90 +grphreal.o: ./grphreal.f90 phgrreal.o + $(FC) $(FFLAGS) -c ./grphreal.f90 +phgrreal.o: ./phgrreal.f90 + $(FC) $(FFLAGS) -c ./phgrreal.f90 +posnam.o: ./posnam.f90 + $(FC) $(FFLAGS) -c ./posnam.f90 +calc_etadot.o: ./calc_etadot.f90 phgrreal.o grphreal.o ftrafo.o rwgrib2.o + $(FC) $(FFLAGS) -c ./calc_etadot.f90 +rwgrib2.o: ./rwgrib2.f90 + $(FC) $(FFLAGS) -c ./rwgrib2.f90 + +clean: + -rm -f $(OBJ) ${EXE} $(MOD) + +${EXE}: $(OBJ) + $(FC) $(OBJ) -o ${EXE} $(LDFLAGS) diff --git a/Source/Fortran/makefile_local_gfortran b/Source/Fortran/makefile_local_gfortran new file mode 120000 index 0000000000000000000000000000000000000000..052b83a4d088620dabe01455d0094404382e9acd --- /dev/null +++ b/Source/Fortran/makefile_local_gfortran @@ -0,0 +1 @@ +makefile_fast \ No newline at end of file diff --git a/src/Makefile.local.ifort b/Source/Fortran/makefile_local_ifort similarity index 62% rename from src/Makefile.local.ifort rename to Source/Fortran/makefile_local_ifort index 4d5e70e9694c218d13fcdf0aa2cd132c4a4dd9a0..310dc9b728d9621b44ca99a5f687f7c59741e3a2 100644 --- a/src/Makefile.local.ifort +++ b/Source/Fortran/makefile_local_ifort @@ -10,16 +10,16 @@ .SUFFIXES: .o .c .c~ .f .f~ .F90 .f90 .f90~ .f95 .f95~ .F .F~ .y .y~ .l .l~ \ .s .s~ .sh .sh~ .h .h~ .C .C~ .a +GRIB_API_INCLUDE_DIR=/usr/local/include +GRIB_API_LIB= -L/usr/local/lib -leccodes_f90 -leccodes -lm -ljasper -GRIB_API_INCLUDE_DIR=/home/srvx1/tmc/TestEnv/Libraries/grib_api-1.12.3_ifort/include -GRIB_API_LIB=-fopenmp -L/home/srvx1/tmc/TestEnv/Libraries/grib_api-1.12.3_ifort/lib -Bstatic -lgrib_api_f77 -lgrib_api_f90 -lgrib_api -Bdynamic -lm -ljasper -OPT = -g -DEBUG = -g +OPT = -g -O3 -mcmodel=medium -unroll -inline -heap-arrays 32 +DEBUG = '' LIB = $(GRIB_API_LIB) -lemosR64 -lgfortran -FC=/opt/intel/bin/ifort -132 -traceback -r8 -F90C=/opt/intel/bin/ifort -132 -traceback -r8 +FC=/opt/intel/composerxe/bin/ifort -132 -traceback -r8 +F90C=/opt/intel/composerxe/bin/ifort -132 -traceback -r8 FFLAGS = $(OPT) -I. -I$(GRIB_API_INCLUDE_DIR) F90FLAGS = $(OPT) -I. -I$(GRIB_API_INCLUDE_DIR) @@ -28,7 +28,7 @@ LDFLAGS = $(OPT) BINDIR = . -EXE = CONVERT2 +EXE = calc_etadot.s8.ifort .f.o: @@ -42,16 +42,16 @@ clean: rm *.o *.mod ${EXE} phgrreal.o: phgrreal.f - $(F90C) -c -g -O3 -fopenmp phgrreal.f + $(F90C) -c -g -O3 phgrreal.f grphreal.o: grphreal.f - $(F90C) -c -g -O3 -fopenmp grphreal.f + $(F90C) -c -g -O3 grphreal.f ftrafo.o: ftrafo.f - $(F90C) -c -g -O3 -fopenmp ftrafo.f + $(F90C) -c -g -O3 ftrafo.f -$(BINDIR)/${EXE}: phgrreal.o grphreal.o ftrafo.o rwGRIB2.o posnam.o preconvert.o - $(F90C) $(DEBUG) $(OPT) -o $(BINDIR)/${EXE} ftrafo.o phgrreal.o grphreal.o rwGRIB2.o posnam.o preconvert.o ${LIB} +$(BINDIR)/${EXE}: phgrreal.o grphreal.o ftrafo.o rwgrib2.o posnam.o calc_etadot.o + $(F90C) $(DEBUG) $(OPT) -o $(BINDIR)/${EXE} ftrafo.o phgrreal.o grphreal.o rwgrib2.o posnam.o calc_etadot.o ${LIB} ############################################################################### diff --git a/Source/Fortran/phgrreal.f90 b/Source/Fortran/phgrreal.f90 new file mode 100644 index 0000000000000000000000000000000000000000..64a7d308d9177a3b4282e08915c12e60e814b20c --- /dev/null +++ b/Source/Fortran/phgrreal.f90 @@ -0,0 +1,516 @@ +MODULE PHTOGR + + INTEGER, PARAMETER :: MAXAUF=36000 + +CONTAINS + + SUBROUTINE PHGR213(CXMN,FELD,WSAVE,IFAX,Z,MLAT,MNAUF,MAXL,MAXB,MLEVEL) + +!! DIE ROUTINE F]HRT EINE TRANSFORMATION EINER +!! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN +!! RAUM AUF DAS REDUZIERTE GAUSS'SCHE GITTER DURCH +! +! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE +! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF +! FELD = FELD DER METEOROLOGISCHEN VARIABLEN +! WSAVE = Working Array fuer Fouriertransformation +! Z = LEGENDREFUNKTIONSWERTE +! +! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN +! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN +! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN +! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN + + IMPLICIT NONE + +! Anzahl der Gitterpunkte auf jedem Breitenkreis + INTEGER MLAT(MAXB/2) + INTEGER K,MAXL,MAXB,MLEVEL,MNAUF + INTEGER IND(MAXB) + +! FELD DER LEGENDREPOLYNOME FUER EINE BREITE + REAL Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2) + + REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) + REAL FELD(MAXL,MLEVEL) + REAL WSAVE(8*MAXB+15,MAXB/2) + INTEGER :: IFAX(10,MAXB) + + IND(1)=0 + DO 7 K=2,MAXB/2 + IND(K)=IND(K-1)+MLAT(K-1) +7 CONTINUE + +!$OMP PARALLEL DO SCHEDULE(DYNAMIC) + DO 17 K=1,MAXB/2 + CALL PHSYM(K,IND,CXMN,FELD,Z,WSAVE,IFAX,MLAT,MNAUF,MAXL,MAXB,MLEVEL) +17 CONTINUE +!$OMP END PARALLEL DO + + RETURN + + END SUBROUTINE PHGR213 + + SUBROUTINE PHSYM(K,IND,CXMN,FELD,Z,WSAVE,IFAX,MLAT,MNAUF,MAXL,MAXB,MLEVEL) + + IMPLICIT NONE + + INTEGER MLAT(MAXB/2) + INTEGER K,L,I,J,LLS,LLPS,LL,LLP,MAXL,MAXB,MLEVEL,MNAUF + INTEGER IND(MAXB) + INTEGER :: IFAX(10,MAXB) + + +! FELD DER FOURIERKOEFFIZIENTEN + REAL :: CXMS(0:MAXAUF-1),CXMA(0:MAXAUF-1) + +! FELD DER LEGENDREPOLYNOME FUER EINE BREITE + REAL Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2) + REAL ACR,ACI,SCR,SCI + + REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) + REAL FELD(MAXL,MLEVEL) + REAL WSAVE(8*MAXB+15,MAXB/2) + + DO 6 L=1,MLEVEL + LL=0 + LLP=0 + DO 1 I=0,MNAUF + SCR=0.D0 + SCI=0.D0 + ACR=0.D0 + ACI=0.D0 + LLS=LL + LLPS=LLP + IF (2*I+1 .LT. MLAT(K)) THEN +! Innerste Schleife aufgespalten um if-Abfrage zu sparen + DO 18 J=I,MNAUF,2 + SCR=SCR+Z(LLP,K)*CXMN(2*LL,L) + SCI=SCI+Z(LLP,K)*CXMN(2*LL+1,L) + LL=LL+2 + LLP=LLP+2 +18 CONTINUE + LL=LLS+1 + LLP=LLPS+1 + DO 19 J=I+1,MNAUF,2 + ACR=ACR+Z(LLP,K)*CXMN(2*LL,L) + ACI=ACI+Z(LLP,K)*CXMN(2*LL+1,L) + LL=LL+2 + LLP=LLP+2 +19 CONTINUE + END IF + LL=LLS+(MNAUF-I+1) + LLP=LLPS+(MNAUF-I+3) + CXMS(2*I)=SCR+ACR + CXMS(2*I+1)=SCI+ACI + CXMA(2*I)=SCR-ACR + CXMA(2*I+1)=SCI-ACI +1 CONTINUE +! CALL FOURTR(CXMS,FELD(IND(k)+1,L),WSAVE(:,K),MNAUF,*MLAT(K),1) +! CALL FOURTR(CXMA,FELD(MAXL-IND(k)-MLAT(K)+1,L),WSAVE(:,K),MNAUF,MLAT(K),1) + CALL RFOURTR(CXMS,WSAVE(:,K),IFAX(:,K),MNAUF,MLAT(K),1) + FELD(IND(k)+1:IND(K)+MLAT(K),L)=CXMS(0:MLAT(K)-1) + CALL RFOURTR(CXMA,WSAVE(:,K),IFAX(:,K),MNAUF,MLAT(K),1) + FELD(MAXL-IND(k)-MLAT(K)+1:MAXL-IND(k),L)=CXMA(0:MLAT(K)-1) +! WRITE(*,*) IND+1,FELD(IND+1,L) +6 CONTINUE + + END SUBROUTINE PHSYM + + SUBROUTINE PHGCUT(CXMN,FELD,WSAVE,IFAX,Z, & + MNAUF,MMAX,MAUF,MANF,MAXL,MAXB,MLEVEL) + +!! DIE ROUTINE FUEHRT EINE TRANSFORMATION EINER +!! FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN +!! RAUM AUF KUGELKOORDINATEN DURCH. Es kann ein Teilausschnitt +!! Der Erde angegeben werden. Diese Routine ist langsamer als phgrph + +! CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE +! CX00,CX01,CX11,CX02,....CXMNAUFMNAUF +! FELD = FELD DER METEOROLOGISCHEN VARIABLEN +! BREITE = SINUS DER GEOGRAFISCHEN BREITEN +! +! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN +! MAUF ANZAHL DER LAENGEN UND DER FOURIERKOEFFIZIENTEN +! MANF ANFANG DES LAENGENBEREICHS FUER DAS GITTER, +! AUF DAS INTERPOLIERT WERDEN SOLL +! MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN +! MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN +! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN + + IMPLICIT REAL (A-H,O-Z) + +! FELD DER FOURIERKOEFFIZIENTEN + +! FELD DER LEGENDREPOLYNOME FUER EINE BREITE + REAL Z(0:((MMAX+3)*(MMAX+4))/2,MAXB) + + DIMENSION CXMN(0:(MMAX+1)*(MMAX+2)-1,MLEVEL) + REAL FELD(MAXL,MAXB,MLEVEL) + DIMENSION WSAVE(4*MAUF+15) + INTEGER:: IFAX(10) + + LOGICAL SYM + +! write(*,*)mauf,mnauf,manf,maxl + + IF (MAUF .LE. MNAUF) WRITE(*,*) 'TOO COARSE LONGITUDE RESOLUTION' + IF (MANF .LT. 1 .OR. MAXL .LT. 1 .OR. & + MANF .GT. MAUF .OR. MAXL .GT. MAUF) THEN + WRITE(*,*) 'WRONG LONGITUDE RANGE',MANF,MAXL + STOP + END IF + +! Pruefe, ob Ausgabegitter symmetrisch zum Aequator ist +! Wenn ja soll Symmetrie der Legendrepolynome ausgenutzt werden + IF (MAXB .GT. 4) THEN + SYM=.TRUE. + DO 11 J=5,5 + IF (ABS(ABS(Z(100,J))-ABS(Z(100,MAXB+1-J))) .GT. 1E-11) SYM=.FALSE. +! WRITE(*,*) ABS(Z(100,J)),ABS(Z(100,MAXB+1-J)) +11 CONTINUE +!! WRITE(*,*) 'Symmetrisch: ',SYM + ELSE + SYM=.FALSE. + END IF + + + IF (SYM) THEN + +!$OMP PARALLEL DO + DO J=1,(MAXB+1)/2 + CALL PHSYMCUT(J,CXMN,FELD,Z,WSAVE,IFAX,MAUF,MNAUF,MAXL,MAXB,MLEVEL,MANF) + END DO +!$OMP END PARALLEL DO + + ELSE + +!$OMP PARALLEL DO + DO J=1,MAXB + CALL PHGPNS(CXMN,FELD,Z,WSAVE,IFAX,J,MNAUF,MAUF,MANF,MAXL,MAXB,MLEVEL) + END DO +!$OMP END PARALLEL DO + + END IF + + RETURN + + END SUBROUTINE PHGCUT + + SUBROUTINE PHSYMCUT(J,CXMN,FELD,Z,WSAVE,IFAX,MAUF,MNAUF,MAXL,MAXB,MLEVEL,MANF) + + IMPLICIT REAL (A-H,O-Z) + +! FELD DER FOURIERKOEFFIZIENTEN + + REAL :: CXM(0:MAXAUF-1),CXMA(0:MAXAUF-1) + +! FELD DER LEGENDREPOLYNOME FUER EINE BREITE + REAL Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB) + REAL SCR,SCI,ACR,ACI + + DIMENSION CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) + REAL FELD(MAXL,MAXB,MLEVEL) + DIMENSION WSAVE(4*MAUF+15) + INTEGER :: IFAX(10) + + DO 16 L=1,MLEVEL + LL=0 + LLP=0 + DO 17 I=0,MNAUF + SCR=0.D0 + SCI=0.D0 + ACR=0.D0 + ACI=0.D0 + LLS=LL + LLPS=LLP +! Innerste Schleife aufgespalten um if-Abfrage zu sparen + DO 18 K=I,MNAUF,2 + SCR=SCR+Z(LLP,J)*CXMN(2*LL,L) + SCI=SCI+Z(LLP,J)*CXMN(2*LL+1,L) + LL=LL+2 + LLP=LLP+2 +18 CONTINUE + LL=LLS+1 + LLP=LLPS+1 + DO 19 K=I+1,MNAUF,2 + ACR=ACR+Z(LLP,J)*CXMN(2*LL,L) + ACI=ACI +Z(LLP,J)*CXMN(2*LL+1,L) + LL=LL+2 + LLP=LLP+2 +19 CONTINUE + LL=LLS+MNAUF-I+1 + LLP=LLPS+MNAUF-I+3 + CXM(2*I)=SCR+ACR + CXM(2*I+1)=SCI+ACI + CXMA(2*I)=SCR-ACR + CXMA(2*I+1)=SCI-ACI +17 CONTINUE + + CALL RFOURTR(CXM,WSAVE,IFAX,MNAUF,MAUF,1) + DO 26 I=0,MAXL-1 + IF (MANF+I .LE. MAUF) THEN + FELD(I+1,J,L)=CXM(MANF+I-1) + ELSE + FELD(I+1,J,L)=CXM(MANF-MAUF+I-1) + END IF +26 CONTINUE + CALL RFOURTR(CXMA,WSAVE,IFAX,MNAUF,MAUF,1) + DO 36 I=0,MAXL-1 + IF (MANF+I .LE. MAUF) THEN + FELD(I+1,MAXB+1-J,L)=CXMA(MANF+I-1) + ELSE + FELD(I+1,MAXB+1-J,L)=CXMA(MANF-MAUF+I-1) + END IF +36 CONTINUE +16 CONTINUE + + END SUBROUTINE PHSYMCUT + + SUBROUTINE PHGPNS(CXMN,FELD,Z,WSAVE,IFAX,J,MNAUF,MAUF,MANF,MAXL,MAXB,MLEVEL) + + IMPLICIT NONE + + INTEGER,INTENT(IN) :: MNAUF,MAUF,MANF,J,MAXL,MAXB,MLEVEL + + REAL :: CXM(0:MAXAUF-1) + REAL,INTENT(IN) :: Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB) + REAL,INTENT(IN) :: CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) + REAL,INTENT(IN) :: WSAVE(4*MAUF+15) + REAL :: FELD(MAXL,MAXB,MLEVEL) + + INTEGER :: IFAX(10) + INTEGER I,L + + DO L=1,MLEVEL + CALL LEGTR(CXMN(:,L),CXM,Z(:,J),MNAUF,MAUF) + CALL RFOURTR(CXM,WSAVE,IFAX,MNAUF,MAUF,1) + + DO I=0,MAXL-1 + IF (MANF+I .LE. MAUF) THEN + FELD(I+1,J,L)=CXM(MANF+I-1) + ELSE + FELD(I+1,J,L)=CXM(MANF-MAUF+I-1) + END IF + END DO + END DO + END SUBROUTINE PHGPNS + + SUBROUTINE LEGTR(CXMN,CXM,Z,MNAUF,MAUF) + +!! DIESE ROUTINE BERECHNET DIE FOURIERKOEFFIZIENTEN CXM + + + IMPLICIT NONE + + INTEGER MNAUF,MAUF,LL,LLP,I,J + REAL CXM(0:MAXAUF-1) + REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1) + REAL Z(0:((MNAUF+3)*(MNAUF+4))/2) + REAL CI,CR + + LL=0 + LLP=0 + DO 1 I=0,MNAUF + CR=0.D0 + CI=0.D0 + DO 2 J=I,MNAUF + CR=CR+Z(LLP)*CXMN(2*LL) + CI=CI+Z(LLP)*CXMN(2*LL+1) + LL=LL+1 + LLP=LLP+1 +2 CONTINUE + LLP=LLP+2 + CXM(2*I)=CR + CXM(2*I+1)=CI +1 CONTINUE + RETURN + + END SUBROUTINE LEGTR + + SUBROUTINE RFOURTR(CXM,TRIGS,IFAX,MNAUF,MAXL,ISIGN) + +!! BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS + + IMPLICIT REAL (A-H,O-Z) + + DIMENSION CXM(0:MAXAUF-1) + REAL :: WSAVE(2*MAXL),TRIGS(2*MAXL) + INTEGER IFAX(10) + + DO I=MNAUF+1,MAXL-1 + CXM(2*I)=0.0 + CXM(2*I+1)=0.0 + END DO + + CALL FFT99(CXM,WSAVE,TRIGS,IFAX,1,1,MAXL,1,1) + + DO I=0,MAXL-1 + CXM(I)=CXM(I+1) + END DO + + RETURN + + END SUBROUTINE RFOURTR + + SUBROUTINE GAULEG(X1,X2,X,W,N) + +!! BERECHNET DIE GAUSS+SCHEN BREITEN + + IMPLICIT REAL (A-H,O-Z) + + DIMENSION X(N),W(N) + PARAMETER (EPS=3.D-14) + + M=(N+1)/2 + XM=0.5D0*(X2+X1) + XL=0.5D0*(X2-X1) + DO 12 I=1,M + Z=DCOS(3.141592654D0*(I-.25D0)/(N+.5D0)) +1 CONTINUE + P1=1.D0 + P2=0.D0 + DO 11 J=1,N + P3=P2 + P2=P1 + P1=((2.D0*J-1.D0)*Z*P2-(J-1.D0)*P3)/J +11 CONTINUE + PP=N*(Z*P1-P2)/(Z*Z-1.D0) + Z1=Z + Z=Z1-P1/PP + IF (ABS(Z-Z1) .GT. EPS)GO TO 1 + X(I)=XM-XL*Z + X(N+1-I)=XM+XL*Z + W(I)=2.D0*XL/((1.D0-Z*Z)*PP*PP) + W(N+1-I)=W(I) +12 CONTINUE + + RETURN + + END SUBROUTINE GAULEG + + + SUBROUTINE PLGNFA(LL,X,Z) + +!! PLGNDN BERECHNET ALLE NORMIERTEN ASSOZIIERTEN +!! LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) +!! UND SCHREIBT SIE IN DAS FELD Z +! Die Polynome sind wie im ECMWF indiziert, d.h. +! P00,P10,P11,P20,P21,P22,... +! Ansonsten ist die Routine analog zu PLGNDN +! X IST DER COSINUS DES ZENITWINKELS ODER +! DER SINUS DER GEOGRAFISCHEN BREITE + + IMPLICIT REAL (A-H,O-Z) + + DIMENSION Z(0:((LL+3)*(LL+4))/2) + + L=LL+2 + I=1 + Z(0)=1.D0 + FACT=1.D0 + POT=1.D0 + SOMX2=DSQRT(1.D0-X*X) + DO 14 J=0,L + DJ=DBLE(J) + IF (J .GT. 0) THEN + FACT=FACT*(2.D0*DJ-1.D0)/(2.D0*DJ) + POT=POT*SOMX2 + Z(I)=DSQRT((2.D0*DJ+1.D0)*FACT)*POT + I=I+1 + END IF + IF (J .LT. L) THEN + Z(I)=X*DSQRT((4.D0*DJ*DJ+8.D0*DJ+3.D0)/(2.D0*DJ+1.D0))*Z(I-1) + I=I+1 + END IF + DK=DJ+2.D0 + DO 14 K=J+2,L + DDK=(DK*DK-DJ*DJ) + Z(I)=X*DSQRT((4.D0*DK*DK-1.D0)/DDK)*Z(I-1)- & + DSQRT(((2.D0*DK+1.D0)*(DK-DJ-1.D0)*(DK+DJ-1.D0))/ & + ((2.D0*DK-3.D0)*DDK))*Z(I-2) + DK=DK+1.D0 + I=I+1 +14 CONTINUE + + RETURN + + END SUBROUTINE PLGNFA + + SUBROUTINE DPLGND(MNAUF,Z,DZ) + +!! DPLGND BERECHNET DIE ABLEITUNG DER NORMIERTEN ASSOZIIERTEN +!! LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) +!! UND SCHREIBT SIE IN DAS FELD DZ +! DIE REIHENFOLGE IST +! P00(X),P01(X),P11(X),P02(X),P12(X),P22(X),..PLL(X) + + IMPLICIT REAL (A-H,O-Z) + + DIMENSION Z(0:((MNAUF+3)*(MNAUF+4))/2) + DIMENSION DZ(0:((MNAUF+2)*(MNAUF+3))/2) + + IF (Z(0) .NE. 1.D0) THEN + WRITE(*,*) 'DPLGND: Z(0) must be 1.0' + STOP + END IF + + LLP=0 + LLH=0 + DO 1 I=0,MNAUF+1 + DO 2 J=I,MNAUF+1 + IF (I .EQ. J) THEN + WURZELA=DSQRT(DBLE((J+1)*(J+1)-I*I)/DBLE(4*(J+1)*(J+1)-1)) + DZ(LLH)=DBLE(J)*WURZELA*Z(LLP+1) + ELSE + WURZELB=DSQRT(DBLE((J+1)*(J+1)-I*I)/DBLE(4*(J+1)*(J+1)-1)) + DZ(LLH)=DBLE(J)*WURZELB*Z(LLP+1)-DBLE(J+1)*WURZELA*Z(LLP-1) + WURZELA=WURZELB + END IF + LLH=LLH+1 + LLP=LLP+1 +2 CONTINUE + LLP=LLP+1 +1 CONTINUE + + RETURN + + END SUBROUTINE DPLGND + + + SUBROUTINE SPFILTER(FELDMN,MM,MMAX) + +!! Spectral Filter of Sardeshmukh and Hoskins (1984, MWR) +! MM=Spectral truncation of field +! MMAX= Spectral truncation of filter + + IMPLICIT NONE + + INTEGER MM,MMAX,I,J,K,L + REAL FELDMN(0:(MM+1)*(MM+2)-1) + REAL KMAX,SMAX,FAK + + SMAX=0.1 + KMAX=-ALOG(SMAX) + KMAX=KMAX/(float(MMAX)*float(MMAX+1))**2 +! WRITE(*,*)'alogsmax',alog(smax),'KMAX:',KMAX + L=0 + DO I=0,MM + DO J=I,MM +! WRITE(*,*) I,J,FELD(K),FELD(K)*EXP(-KMAX*(J*(J+1))**2) + IF(J .LE. MMAX) THEN +! FAK=EXP(-KMAX*(J*(J+1))**2) + FAK=1.0 + FELDMN(2*L)=FELDMN(2*L)*FAK + FELDMN(2*L+1)=FELDMN(2*L+1)*FAK + ELSE + FELDMN(2*L)=0. + FELDMN(2*L+1)=0. + END IF + L=L+1 + END DO + END DO + + END SUBROUTINE SPFILTER + +END MODULE PHTOGR diff --git a/Source/Fortran/posnam.f90 b/Source/Fortran/posnam.f90 new file mode 100644 index 0000000000000000000000000000000000000000..614bf7f843c6be4c6ae599d8e14a0b5d630174cd --- /dev/null +++ b/Source/Fortran/posnam.f90 @@ -0,0 +1,25 @@ + SUBROUTINE POSNAM(KULNAM,CDNAML) + + !! position in namelist file. + ! author: Mats Hamrud, ECMWF + + INTEGER, INTENT(IN) :: KULNAM + CHARACTER*(*), INTENT(IN) :: CDNAML + CHARACTER*120 CLINE + CHARACTER*1 CLTEST + + REWIND(KULNAM) + ILEN = LEN(CDNAML) +102 CONTINUE + CLINE = ' ' + READ(KULNAM,'(A)') CLINE + IND1 = INDEX(CLINE,'&'//CDNAML) + IF (IND1 .EQ. 0) GO TO 102 + CLTEST = CLINE(IND1+ILEN+1:IND1+ILEN+1) + IF (LGE(CLTEST,'0') .AND. LLE(CLTEST,'9') .OR. & + LGE(CLTEST,'A') .AND. LLE(CLTEST,'Z')) GOTO 102 + BACKSPACE(KULNAM) + + RETURN + + END SUBROUTINE POSNAM diff --git a/Source/Fortran/rwgrib2.f90 b/Source/Fortran/rwgrib2.f90 new file mode 100644 index 0000000000000000000000000000000000000000..b90d94b575c1fd94a2a095639baaee40c2951ffe --- /dev/null +++ b/Source/Fortran/rwgrib2.f90 @@ -0,0 +1,265 @@ + MODULE RWGRIB2 + + CONTAINS + + SUBROUTINE READLATLON(FILENAME,FELD,MAXL,MAXB,MLEVEL,MPAR) + +!! Read a field from GRIB file on lat-lon grid + + USE GRIB_API + + IMPLICIT NONE + + integer :: ifile + integer :: iret + integer :: n,mk,parid,nm + integer :: i,k + integer,dimension(:),allocatable :: igrib + integer :: numberOfPointsAlongAParallel + integer :: numberOfPointsAlongAMeridian + real, dimension(:), allocatable :: values + integer :: numberOfValues + real,dimension(maxl,maxb,mlevel) :: feld + integer:: maxl,maxb,mlevel,mstride,mpar(:),irest,div,level + integer :: l(size(mpar)) + character*(*):: filename + + feld=0. + + call grib_open_file(ifile, TRIM(FILENAME),'r') + + ! count the messages in the file + call grib_count_in_file(ifile,n) + allocate(igrib(n)) + igrib=-1 + + ! Load the messages from the file. + DO i=1,n + call grib_new_from_file(ifile,igrib(i), iret) + END DO + + ! we can close the file + call grib_close_file(ifile) + + nm=size(mpar) + div=mlevel/nm + l=0 + + ! Loop on all the messages in memory + iloop: DO i=1,n +! write(*,*) 'processing message number ',i + ! get as a integer + call grib_get(igrib(i),'numberOfPointsAlongAParallel', & + numberOfPointsAlongAParallel) + + ! get as a integer + call grib_get(igrib(i),'numberOfPointsAlongAMeridian', & + numberOfPointsAlongAMeridian) + + call grib_get(igrib(i),'numberOfVerticalCoordinateValues',mk) + + call grib_get_size(igrib(i),'values',numberOfValues) +! write(*,*) 'numberOfValues=',numberOfValues + + allocate(values(numberOfValues), stat=iret) + ! get data values + call grib_get(igrib(i),'values',values) + + call grib_get(igrib(i),'paramId',parid) + call grib_get(igrib(i),'level',level) + + kloop: do k=1,nm + if (parid .eq. mpar(k)) then +! l(k)=l(k)+1 + feld(:,:,(k-1)*div+level)=reshape(values,(/maxl,maxb/)) +! print*,(k-1)*div+l(k),parid + exit kloop + end if + end do kloop + if (k .gt. nm .and. parid .ne. mpar(nm)) then + write(*,*) k,nm,parid,mpar(nm) + write(*,*) 'ERROR readlatlon: parameter ',parid,'is not',mpar + stop + end if + +! print*,i + END DO iloop +!! write(*,*) 'readlatlon: ',i-1,' records read' + + DO i=1,n + call grib_release(igrib(i)) + END DO + + if (allocated(values)) deallocate(values) + deallocate(igrib) + + END SUBROUTINE READLATLON + + SUBROUTINE WRITELATLON(iunit,igrib,ogrib,FELD,MAXL,MAXB,MLEVEL,& + MLEVELIST,MSTRIDE,MPAR) + +!! write a field on lat-lon grid to GRIB file + + USE GRIB_API + + IMPLICIT NONE + + INTEGER IFIELD,MLEVEL,MNAUF,I,J,K,L,MSTRIDE,IERR,JOUT + INTEGER MPAR(MSTRIDE),MAXL,MAXB,LEVMIN,LEVMAX + INTEGER IUNIT,igrib,ogrib + REAL ZSEC4(MAXL*MAXB) + REAL FELD(MAXL,MAXB,MLEVEL) + CHARACTER*(*) MLEVELIST + INTEGER ILEVEL(MLEVEL),MLINDEX(MLEVEL+1),LLEN + + ! parse MLEVELIST + + LLEN=len(trim(MLEVELIST)) + if (index(MLEVELIST,'to') .ne. 0 .or. index(MLEVELIST,'TO') .ne. 0) THEN + i=index(MLEVELIST,'/') + read(MLEVELIST(1:i-1),*) LEVMIN + i=index(MLEVELIST,'/',.true.) + read(MLEVELIST(i+1:LLEN),*) LEVMAX + l=0 + do i=LEVMIN,LEVMAX + l=l+1 + ILEVEL(l)=i + end do + else + l=1 + MLINDEX(1)=0 + do i=1,LLEN + if (MLEVELIST(i:i) .eq. '/') THEN + l=l+1 + MLINDEX(l)=i + end if + end do + MLINDEX(l+1)=LLEN+1 + do i=1,l + read(MLEVELIST(MLINDEX(i)+1:MLINDEX(i+1)-1),*) ILEVEL(i) + end do + end if + + DO k=1,l + call grib_set(igrib,"level",ILEVEL(k)) + DO j=1,MSTRIDE + call grib_set(igrib,"paramId",MPAR(j)) +! if (MPAR(j) .eq. 87) then +! call grib_set(igrib,"shortName","etadot") +! call grib_set(igrib,"units","Pa,s**-1") +! end if +! if (MPAR(j) .eq. 77) then +! call grib_set(igrib,"shortName","etadot") +! call grib_set(igrib,"units","s**-1") +! end if + if (l .ne. mlevel) then + zsec4(1:maxl*maxb)=RESHAPE(FELD(:,:,ILEVEL(k)),(/maxl*maxb/)) + else + zsec4(1:maxl*maxb)=RESHAPE(FELD(:,:,k),(/maxl*maxb/)) + end if + call grib_set(igrib,"values",zsec4) + + call grib_write(igrib,iunit) + + END DO + END DO + + END SUBROUTINE WRITELATLON + + SUBROUTINE READSPECTRAL(FILENAME,CXMN,MNAUF,MLEVEL,MAXLEV,MPAR,A,B) + +!! read a GRIB file in spherical harmonics + + USE GRIB_API + + IMPLICIT NONE + + integer :: ifile + integer :: iret + integer :: n,mk,div,nm,k + integer :: i,j,parid + integer,dimension(:),allocatable :: igrib + real, dimension(:), allocatable :: values + integer :: numberOfValues,maxlev + REAL :: A(MAXLEV+1),B(MAXLEV+1),pv(2*MAXLEV+2) + REAL:: CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) + integer:: maxl,maxb,mlevel,mstride,mpar(:),mnauf,ioffset,ipar,ilev,l(size(mpar)) + character*(*):: filename + + call grib_open_file(ifile, TRIM(FILENAME),'r') + + ! count the messages in the file + call grib_count_in_file(ifile,n) + allocate(igrib(n)) + igrib=-1 + + ! Load the messages from the file. + DO i=1,n + call grib_new_from_file(ifile,igrib(i), iret) + END DO + + ! we can close the file + call grib_close_file(ifile) + + l=0 + ! Loop on all the messages in memory + iloop: DO i=1,n + ! write(*,*) 'processing message number ',i + ! get as a integer + call grib_get(igrib(i),'pentagonalResolutionParameterJ', j) + + call grib_get_size(igrib(i),'values',numberOfValues) + ! write(*,*) 'numberOfValues=',numberOfValues + + call grib_get(igrib(i),'numberOfVerticalCoordinateValues',mk) + + call grib_get(igrib(i),'level',ilev) + + + + call grib_get(igrib(i),'pv',pv) + + allocate(values(numberOfValues), stat=iret) + ! get data values + call grib_get(igrib(i),'values',values) + +! IOFFSET=mod(i-1,MSTRIDE)*(mk/2-1) +! CXMN(:,IOFFSET+ilev)=values(1:(MNAUF+1)*(MNAUF+2)) + + call grib_get(igrib(i),'paramId',parid) + nm=size(mpar) + div=mlevel/nm + kloop: do k=1,nm + if (parid .eq. mpar(k)) then + l(k)=l(k)+1 + cxmn(:,(k-1)*div+l(k))=values(1:(MNAUF+1)*(MNAUF+2)) +! print*,(k-1)*div+l(k),parid + exit kloop + end if + + end do kloop + if (k .gt. nm .and. parid .ne. mpar(nm)) then + write(*,*) k,nm,parid,mpar(nm) + write(*,*) 'ERROR readspectral: parameter ',parid,'is not',mpar + stop + end if + +! print*,i + + END DO iloop + +!! write(*,*) 'readspectral: ',i-1,' records read' + + DO i=1,n + call grib_release(igrib(i)) + END DO + + deallocate(values) + deallocate(igrib) + + A=pv(1:1+MAXLEV) + B=pv(2+MAXLEV:2*MAXLEV+2) + + END SUBROUTINE READSPECTRAL + +END MODULE RWGRIB2 diff --git a/Source/Python/Classes/ControlFile.py b/Source/Python/Classes/ControlFile.py new file mode 100644 index 0000000000000000000000000000000000000000..ba795f21d16b25adc152edf82e884643100116b7 --- /dev/null +++ b/Source/Python/Classes/ControlFile.py @@ -0,0 +1,692 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Leopold Haimberger (University of Vienna) +# +# @Date: November 2015 +# +# @Change History: +# +# February 2018 - Anne Philipp (University of Vienna): +# - applied PEP8 style guide +# - added documentation +# - applied some minor modifications in programming style/structure +# - changed name of class Control to ControlFile for more +# self-explanation naming +# - outsource of class ControlFile +# - initialisation of class attributes ( to avoid high number of +# conditional statements and set default values ) +# - divided assignment of attributes and the check of conditions +# - outsourced the commandline argument assignments to control attributes +# +# @License: +# (C) Copyright 2014-2019. +# Anne Philipp, Leopold Haimberger +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +#******************************************************************************* + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +from __future__ import print_function + +import os +import sys + +# software specific classes and modules from flex_extract +#pylint: disable=wrong-import-position +sys.path.append('../') +import _config +from Mods.tools import my_error +from Mods.checks import (check_grid, check_area, check_levels, check_purefc, + check_step, check_mail, check_queue, check_pathes, + check_dates, check_maxstep, check_type, check_request, + check_basetime, check_public, check_acctype, + check_acctime, check_accmaxstep, check_time, + check_logicals_type, check_len_type_time_step, + check_addpar, check_job_chunk, check_number) +#pylint: enable=wrong-import-position + +# ------------------------------------------------------------------------------ +# CLASS +# ------------------------------------------------------------------------------ +class ControlFile(object): + ''' + Contains the information which are stored in the CONTROL files. + + The CONTROL file is the steering part of the FLEXPART extraction + software. All necessary parameters needed to retrieve the data fields + from the MARS archive for driving FLEXPART are set in a CONTROL file. + Some specific parameters like the start and end dates can be overwritten + 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. + + Attributes + ---------- + controlfile : str + The name of the control file to be processed. Default value is the + filename passed to the init function when initialised. + + start_date : str + The first day of the retrieval period. Default value is None. + + end_date :str + The last day of the retrieval period. Default value is None. + + date_chunk : int + Length of period for a single mars retrieval. Default value is 3. + + dtime :str + The time step in hours. Default value is None. + + basetime : int + The time for a half day retrieval. The 12 hours upfront are to be + retrieved. Default value is None. + + maxstep : int + The maximum forecast step for non flux data. Default value is None. + + type : list of str + List of field type per retrieving hour. Default value is None. + + time : list of str + List of retrieving times in hours. Default valuer is None. + + step : list of str or str + List of forecast time steps in hours for non flux data. + Default value is None. + + acctype : str + The field type for the accumulated forecast fields. + Default value is None. + + acctime : str + The starting time of the accumulated forecasts. Default value is None. + + accmaxstep : int + The maximum forecast step for the accumulated forecast fields + (flux data). Default value is None. + + marsclass : str + Characterisation of dataset. Default value is None. + + dataset : str + 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. + + stream : str + Identifies the forecasting system used to generate the data. + Default value is None. + + number : str + Selects the member in ensemble forecast run. Default value is 'OFF'. + + expver : str + The version number of the dataset. Default value is '1'. + + gaussian : str + 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 ''. + + grid : str + Specifies the output grid which can be either a Gaussian grid + or a Latitude/Longitude grid. Default value is None. + + area : str + Specifies the desired sub-area of data to be extracted. + Default value is None. + + left : str + The western most longitude of the area to be extracted. + Default value is None. + + lower : str + The southern most latitude of the area to be extracted. + Default value is None. + + upper : str + The northern most latitued of the area to be extracted. + Default value is None. + + right : str + The eastern most longitude of the area to be extracted. + Default value is None. + + level : str + Specifies the maximum level. Default value is None. + + levelist : str + Specifies the required level list. Default value is None. + + resol : str + Specifies the desired triangular truncation of retrieved data, + before carrying out any other selected post-processing. + Default value is None. + + gauss : int + Switch to select gaussian fields (1) or regular lat/lon (0). + Default value is 0. + + accuracy : int + Specifies the number of bits per value to be used in the + generated GRIB coded fields. Default value is 24. + + omega : int + Switch to select omega retrieval (1) or not (0). Default value is 0. + + omegadiff : int + Switch to decide to calculate Omega and Dps/Dt from continuity + equation for diagnostic purposes (1) or not (0). Default value is 0. + + eta : int + Switch to select direct retrieval of etadot from MARS (1) or + wether it has to be calculated (0). Then Default value is 0. + + etadiff : int + Switch to select calculation of etadot and Dps/Dt from continuity + equation for diagnostic purposes (1) or not (0). Default value is 0. + + etapar : int + GRIB parameter Id for etadot fields. Default value is 77. + + dpdeta : int + Switch to select multiplication of etadot with dpdeta. + Default value is 1. + + smooth : int + Spectral truncation of ETADOT after calculation on Gaussian grid. + Default value is 0. + + format : str + The format of the GRIB data. Default value is 'GRIB1'. + + addpar : str + List of additional surface level ECMWF parameter to be retrieved. + Default value is None. + + prefix : str + Prefix string for the final FLEXPART/FLEXTRA ready input files. + Default value is 'EN'. + + cwc : int + Switch to select wether the sum of cloud liquid water content and + cloud ice water content should be retrieved. Default value is 0. + + wrf : int + Switch to select further parameters for retrievment to support + WRF simulations. Default value is 0. + + ecfsdir : str + Path to the ECMWF storage 'ectmp:/${USER}/econdemand/' + + mailfail : list of str + Email list for sending error log files from ECMWF servers. + The email addresses should be seperated by a comma. + Default value is ['${USER}']. + + mailops : list of str + Email list for sending operational log files from ECMWF servers. + The email addresses should be seperated by a comma. + Default value is ['${USER}']. + + ecstorage : int + Switch to select storage of FLEXPART ready output files + in the ECFS file system. Default value is 0. + + ectrans : int + Switch to select the transfer of FLEXPART ready output files + to the gateway server. Default value is 0. + + inputdir : str + Path to the temporary directory for the retrieval grib files and + other processing files. Default value is _config.PATH_INPUT_DIR. + + outputdir : str + Path to the final directory where the final FLEXPART ready input + files are stored. Default value is None. + + flexextractdir : str + Path to the flex_extract root directory. Default value is + _config.PATH_FLEXEXTRACT_DIR. + + exedir : str + Path to the FORTRAN executable file. Default value is + _config.PATH_FORTRAN_SRC. + + installdir : str + Path to a FLEXPART root directory. Default value is None. + + makefile : str + Name of the makefile to be used for the Fortran program. + Default value is 'Makefile.gfortran'. + + destination : str + The remote destination which is used to transfer files + from ECMWF server to local gateway server. Default value is None. + + gateway : str + The gateway server the user is using. Default value is None. + + ecuid : str + The user id on ECMWF server. Default value is None. + + ecgid : str + The group id on ECMWF server. Default value is None. + + install_target : str + Defines the location where the installation is to be done. + Default value is None. + + debug : int + 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. + + oper : int + Switch to prepare the operational job script. Start date, end date and + basetime will be prepared with environment variables. + Default value is 0. + + request : int + 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. + + public : int + 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. + + ec_api : boolean + Tells wether the ECMWF Web API was able to load or not. + Default value is None. + + cds_api : boolean + Tells wether the CDS API was able to load or not. + Default value is None. + + purefc : int + Switch to decide wether the job is a pure forecast retrieval or + coupled with analysis data. Default value is 0. + + rrint : int + Switch to select between old precipitation disaggregation method (0) + or the new IA3 disaggegration method (1). Default value is 0. + + doubleelda : int + Switch to select the calculation of extra ensemble members for the + ELDA stream. It doubles the amount of retrieved ensemble members. + + logicals : list of str + 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'] + ''' + + def __init__(self, filename): + '''Initialises the instance of ControlFile class and defines + all class attributes with default values. Afterwards calls + function __read_controlfile__ to read parameter from Control file. + + Parameters + ---------- + filename : str + Name of CONTROL file. + + Return + ------ + + ''' + + # list of all possible class attributes and their default values + self.controlfile = filename + self.start_date = None + self.end_date = None + self.date_chunk = 3 + self.job_chunk = None + self.dtime = None + self.basetime = None + self.maxstep = None + self.type = None + self.time = None + self.step = None + self.acctype = None + self.acctime = None + self.accmaxstep = None + self.marsclass = None + self.dataset = None + self.stream = None + self.number = 'OFF' + self.expver = '1' + self.gaussian = '' + self.grid = None + self.area = '' + self.left = None + self.lower = None + self.upper = None + self.right = None + self.level = None + self.levelist = None + self.resol = None + self.gauss = 0 + self.accuracy = 24 + self.omega = 0 + self.omegadiff = 0 + self.eta = 0 + self.etadiff = 0 + self.etapar = 77 + self.dpdeta = 1 + self.smooth = 0 + self.format = 'GRIB1' + self.addpar = None + self.prefix = 'EN' + self.cwc = 0 + self.wrf = 0 + self.ecfsdir = 'ectmp:/${USER}/econdemand/' + self.mailfail = ['${USER}'] + self.mailops = ['${USER}'] + self.ecstorage = 0 + self.ectrans = 0 + self.inputdir = _config.PATH_INPUT_DIR + self.outputdir = None + self.flexextractdir = _config.PATH_FLEXEXTRACT_DIR + self.exedir = _config.PATH_FORTRAN_SRC + self.installdir = None + self.makefile = 'Makefile.gfortran' + self.destination = None + self.gateway = None + self.ecuid = None + self.ecgid = None + self.install_target = None + self.debug = 0 + self.oper = 0 + self.request = 0 + self.public = 0 + self.ec_api = None + self.cds_api = None + self.purefc = 0 + self.rrint = 0 + self.doubleelda = 0 + + self.logicals = ['gauss', 'omega', 'omegadiff', 'eta', 'etadiff', + 'dpdeta', 'cwc', 'wrf', 'ecstorage', + 'ectrans', 'debug', 'oper', 'request', 'public', + 'purefc', 'rrint', 'doubleelda'] + + self._read_controlfile() + + return + + def _read_controlfile(self): + '''Read CONTROL file and assign all CONTROL file variables. + + Parameters + ---------- + + Return + ------ + + ''' + + try: + cfile = os.path.join(_config.PATH_CONTROLFILES, self.controlfile) + with open(cfile) as f: + fdata = f.read().split('\n') + except IOError: + print('Could not read CONTROL file "' + cfile + '"') + print('Either it does not exist or its syntax is wrong.') + print('Try "' + sys.argv[0].split('/')[-1] + \ + ' -h" to print usage information') + sys.exit(1) + + # go through every line and store parameter + for ldata in fdata: + if ldata and ldata[0] == '#': + # ignore comment line in control file + continue + if '#' in ldata: + # cut off comment + ldata = ldata.split('#')[0] + data = ldata.split() + if len(data) > 1: + if 'm_' in data[0].lower(): + data[0] = data[0][2:] + if data[0].lower() == 'class': + data[0] = 'marsclass' + if data[0].lower() == 'day1': + data[0] = 'start_date' + if data[0].lower() == 'day2': + data[0] = 'end_date' + if len(data) == 2: + if '$' in data[1]: + setattr(self, data[0].lower(), data[1]) + while '$' in data[1]: + i = data[1].index('$') + j = data[1].find('{') + k = data[1].find('}') + var = os.getenv(data[1][j+1:k]) + if var is not None: + data[1] = data[1][:i] + var + data[1][k+1:] + else: + my_error('Could not find variable ' + + data[1][j+1:k] + ' while reading ' + + self.controlfile) + setattr(self, data[0].lower() + '_expanded', data[1]) + else: + if data[1].lower() != 'none': + setattr(self, data[0].lower(), data[1]) + else: + setattr(self, data[0].lower(), None) + elif len(data) > 2: + setattr(self, data[0].lower(), (data[1:])) + else: + pass + + return + + def __str__(self): + '''Prepares a string which have all the ControlFile class attributes + with its associated values. Each attribute is printed in one line and + in alphabetical order. + + Example + ------- + 'age': 10 + 'color': 'Spotted' + 'kids': 0 + 'legs': 2 + 'name': 'Dog' + 'smell': 'Alot' + + Parameters + ---------- + + Return + ------ + string + Single string of concatenated ControlFile class attributes + with their values + ''' + import collections + + attrs = vars(self).copy() + attrs = collections.OrderedDict(sorted(attrs.items())) + + return '\n'.join("%s: %s" % item for item in attrs.items()) + + def assign_args_to_control(self, args): + '''Overwrites the existing ControlFile instance attributes with + the command line arguments. + + Parameters + ---------- + args : Namespace + Contains the commandline arguments from script/program call. + + Return + ------ + + ''' + + # get dictionary of command line parameters and eliminate all + # parameters which are None (were not specified) + args_dict = vars(args) + arguments = {k : args_dict[k] for k in args_dict + if args_dict[k] != None} + + # assign all passed command line arguments to ControlFile instance + for k, v in arguments.items(): + setattr(self, str(k), v) + + return + + def assign_envs_to_control(self, envs): + '''Assigns the ECMWF environment parameter. + + Parameters + ---------- + envs : dict of str + Contains the ECMWF environment parameternames "ECUID", "ECGID", + "DESTINATION" and "GATEWAY" with its corresponding values. + They were read from the file "ECMWF_ENV". + + Return + ------ + + ''' + + for k, v in envs.items(): + setattr(self, str(k).lower(), str(v)) + + return + + def check_conditions(self, queue): + '''Checks a couple of necessary attributes and conditions, + such as if they exist and contain values. + Otherwise set default values. + + Parameters + ---------- + queue : str + 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. + + Return + ------ + + ''' + check_logicals_type(self, self.logicals) + + self.mailfail = check_mail(self.mailfail) + + self.mailops = check_mail(self.mailops) + + check_queue(queue, self.gateway, self.destination, + self.ecuid, self.ecgid) + + self.outputdir, self.installdir = check_pathes(self.inputdir, + self.outputdir, + self.installdir, + self.flexextractdir) + + self.start_date, self.end_date = check_dates(self.start_date, + self.end_date) + + self.basetime = check_basetime(self.basetime) + + self.levelist, self.level = check_levels(self.levelist, self.level) + + self.step = check_step(self.step) + + self.maxstep = check_maxstep(self.maxstep, self.step) + + check_request(self.request, + os.path.join(self.inputdir, _config.FILE_MARS_REQUESTS)) + + check_public(self.public, self.dataset) + + self.type = check_type(self.type, self.step) + + self.time = check_time(self.time) + + self.purefc = check_purefc(self.type) + + self.type, self.time, self.step = check_len_type_time_step(self.type, + self.time, + self.step, + self.maxstep, + self.purefc) + + self.acctype = check_acctype(self.acctype, self.type) + + self.acctime = check_acctime(self.acctime, self.marsclass, + self.purefc, self.time) + + self.accmaxstep = check_accmaxstep(self.accmaxstep, self.marsclass, + self.purefc, self.maxstep) + + self.grid = check_grid(self.grid) + + self.area = check_area(self.grid, self.area, self.upper, self.lower, + self.left, self.right) + + self.addpar = check_addpar(self.addpar) + + self.job_chunk = check_job_chunk(self.job_chunk) + + self.number = check_number(self.number) + + return + + def to_list(self): + '''Just generates a list of strings containing the attributes and + assigned values except the attributes "_expanded", "exedir", + "flexextractdir" and "installdir". + + Parameters + ---------- + + Return + ------ + l : list of * + A sorted list of the all ControlFile class attributes with + their values except the attributes "_expanded", "exedir", + "flexextractdir" and "installdir". + ''' + + import collections + + attrs = collections.OrderedDict(sorted(vars(self).copy().items())) + + l = list() + + for item in attrs.items(): + if '_expanded' in item[0]: + pass + elif 'exedir' in item[0]: + pass + elif 'installdir' in item[0]: + pass + elif 'flexextractdir' in item[0]: + pass + else: + if isinstance(item[1], list): + stot = '' + for s in item[1]: + stot += s + ' ' + + l.append("%s %s\n" % (item[0], stot)) + else: + l.append("%s %s\n" % item) + + return sorted(l) diff --git a/Source/Python/Classes/EcFlexpart.py b/Source/Python/Classes/EcFlexpart.py new file mode 100644 index 0000000000000000000000000000000000000000..067806772e1dd6a9d0770439f42da7ea8715084b --- /dev/null +++ b/Source/Python/Classes/EcFlexpart.py @@ -0,0 +1,1915 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Anne Fouilloux (University of Oslo) +# +# @Date: October 2014 +# +# @Change History: +# +# November 2015 - Leopold Haimberger (University of Vienna): +# - extended with class Control +# - removed functions mkdir_p, daterange, years_between, months_between +# - added functions darain, dapoly, to_param_id, init128, normal_exit, +# my_error, clean_up, install_args_and_control, +# interpret_args_and_control, +# - removed function __del__ in class EIFLexpart +# - added the following functions in EIFlexpart: +# - create_namelist +# - process_output +# - deacc_fluxes +# - modified existing EIFlexpart - functions for the use in +# flex_extract +# - retrieve also longer term forecasts, not only analyses and +# short term forecast data +# - added conversion into GRIB2 +# +# February 2018 - Anne Philipp (University of Vienna): +# - applied PEP8 style guide +# - added documentation +# - removed function getFlexpartTime in class EcFlexpart +# - outsourced class ControlFile +# - outsourced class MarsRetrieval +# - changed class name from EIFlexpart to EcFlexpart +# - applied minor code changes (style) +# - removed "dead code" , e.g. retrieval of Q since it is not needed +# - removed "times" parameter from retrieve-method since it is not used +# - seperated function "retrieve" into smaller functions (less code +# duplication, easier testing) +# +# @License: +# (C) Copyright 2014-2019. +# Anne Philipp, Leopold Haimberger +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +#******************************************************************************* +#pylint: disable=unsupported-assignment-operation +# this is disabled because for this specific case its an error in pylint +#pylint: disable=consider-using-enumerate +# this is not useful in this case +#pylint: disable=unsubscriptable-object +# this error is a bug +#pylint: disable=ungrouped-imports +# not necessary that we group the imports +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +from __future__ import print_function + +import os +import sys +import glob +import shutil +from datetime import datetime, timedelta + +# software specific classes and modules from flex_extract +#pylint: disable=wrong-import-position +sys.path.append('../') +import _config +from Classes.GribUtil import GribUtil +from Mods.tools import (init128, to_param_id, silent_remove, product, + my_error, get_informations, get_dimensions, + execute_subprocess, to_param_id_with_tablenumber, + generate_retrieval_period_boundary) +from Classes.MarsRetrieval import MarsRetrieval +from Classes.UioFiles import UioFiles +import Mods.disaggregation as disaggregation +#pylint: enable=wrong-import-position +# ------------------------------------------------------------------------------ +# CLASS +# ------------------------------------------------------------------------------ +class EcFlexpart(object): + ''' + Class to represent FLEXPART specific ECMWF data. + + 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 + instance with all the parameter and settings necessary for retrieving + MARS data and modifing them so they are fitting FLEXPART needs. The class + is able to disaggregate the fluxes and convert grid types to the one needed + by FLEXPART, therefore using the FORTRAN program. + + Attributes + ---------- + mreq_count : int + Counter for the number of generated mars requests. + + inputdir : str + Path to the directory where the retrieved data is stored. + + dataset : str + For public datasets there is the specific naming and parameter + dataset which has to be used to characterize the type of + data. + + basetime : int + The time for a half day retrieval. The 12 hours upfront are to be + retrieved. + + dtime : str + Time step in hours. + + acctype : str + The field type for the accumulated forecast fields. + + acctime : str + The starting time from the accumulated forecasts. + + accmaxstep : str + The maximum forecast step for the accumulated forecast fields. + + marsclass : str + Characterisation of dataset. + + stream : str + Identifies the forecasting system used to generate the data. + + number : str + Selects the member in ensemble forecast run. + + resol : str + Specifies the desired triangular truncation of retrieved data, + before carrying out any other selected post-processing. + + accuracy : str + Specifies the number of bits per value to be used in the + generated GRIB coded fields. + + addpar : str + List of additional parameters to be retrieved. + + level : str + Specifies the maximum level. + + expver : str + The version of the dataset. + + levelist : str + Specifies the required levels. + + glevelist : str + Specifies the required levels for gaussian grids. + + gaussian : str + This parameter is deprecated and should no longer be used. + Specifies the desired type of Gaussian grid for the output. + + grid : str + Specifies the output grid which can be either a Gaussian grid + or a Latitude/Longitude grid. + + area : str + Specifies the desired sub-area of data to be extracted. + + purefc : int + Switch for definition of pure forecast mode or not. + + outputfilelist : list of str + The final list of FLEXPART ready input files. + + types : dictionary + Determines the combination of type of fields, time and forecast step + to be retrieved. + + params : dictionary + Collection of grid types and their corresponding parameters, + levels, level types and the grid definition. + + server : ECMWFService or ECMWFDataServer + This is the connection to the ECMWF data servers. + + public : int + Decides which Web API Server version is used. + + dates : str + Contains start and end date of the retrieval in the format + "YYYYMMDD/to/YYYYMMDD" + ''' + + # -------------------------------------------------------------------------- + # CLASS FUNCTIONS + # -------------------------------------------------------------------------- + def __init__(self, c, fluxes=False): + '''Creates an object/instance of EcFlexpart with the associated + settings of its attributes for the retrieval. + + Parameters: + ----------- + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + fluxes : boolean, optional + Decides if the flux parameter settings are stored or + the rest of the parameter list. + Default value is False. + + Return + ------ + + ''' + # set a counter for the number of generated mars requests + self.mreq_count = 0 + + self.inputdir = c.inputdir + self.dataset = c.dataset + self.basetime = c.basetime + self.dtime = c.dtime + self.acctype = c.acctype + self.acctime = c.acctime + self.accmaxstep = c.accmaxstep + self.marsclass = c.marsclass + self.stream = c.stream + self.number = c.number + self.resol = c.resol + self.accuracy = c.accuracy + self.addpar = c.addpar + self.level = c.level + self.expver = c.expver + self.levelist = c.levelist + self.glevelist = '1/to/' + c.level # in case of gaussian grid + self.gaussian = c.gaussian + self.grid = c.grid + self.area = c.area + self.purefc = c.purefc + self.outputfilelist = [] + + # Define the different types of field combinations (type, time, step) + self.types = {} + # Define the parameters and their level types, level list and + # grid resolution for the retrieval job + self.params = {} + + if fluxes: + self._create_params_fluxes() + else: + self._create_params(c.gauss, c.eta, c.omega, c.cwc, c.wrf) + + if fluxes:# and not c.purefc: + self._create_field_types_fluxes() + else: + self._create_field_types(c.type, c.time, c.step) + return + + def _create_field_types(self, ftype, ftime, fstep): + '''Create the combination of field type, time and forecast step. + + Parameters: + ----------- + ftype : list of str + List of field types. + + ftime : list of str + The time in hours of the field. + + fstep : str + Specifies the forecast time step from forecast base time. + Valid values are hours (HH) from forecast base time. + + Return + ------ + + ''' + i = 0 + for ty, st, ti in zip(ftype, fstep, ftime): + btlist = list(range(len(ftime))) + if self.basetime == 12: + btlist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + if self.basetime == 0: + btlist = [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0] + + # if ((ty.upper() == 'AN' and (int(c.time[i]) % int(c.dtime)) == 0) or + # (ty.upper() != 'AN' and (int(c.step[i]) % int(c.dtime)) == 0 and + # (int(c.step[i]) % int(c.dtime) == 0)) ) and \ + # (int(c.time[i]) in btlist or c.purefc): + + if (i in btlist) or self.purefc: + + if ((ty.upper() == 'AN' and (int(ti) % int(self.dtime)) == 0) or + (ty.upper() != 'AN' and (int(st) % int(self.dtime)) == 0)): + + if ty not in self.types.keys(): + self.types[ty] = {'times': '', 'steps': ''} + + if ti not in self.types[ty]['times']: + if self.types[ty]['times']: + self.types[ty]['times'] += '/' + self.types[ty]['times'] += ti + + if st not in self.types[ty]['steps']: + if self.types[ty]['steps']: + self.types[ty]['steps'] += '/' + self.types[ty]['steps'] += st + i += 1 + + return + + def _create_field_types_fluxes(self): + '''Create the combination of field type, time and forecast step + for the flux data. + + Parameters: + ----------- + + Return + ------ + + ''' + if self.purefc: + # need to retrieve forecasts for step 000 in case of pure forecast + steps = '{}/to/{}/by/{}'.format(0, self.accmaxstep, self.dtime) + else: + steps = '{}/to/{}/by/{}'.format(self.dtime, + self.accmaxstep, + self.dtime) + + self.types[str(self.acctype)] = {'times': str(self.acctime), + 'steps': steps} + return + + def _create_params(self, gauss, eta, omega, cwc, wrf): + '''Define the specific parameter settings for retrievment. + + The different parameters need specific grid types and level types + for retrievement. We might get following combination of types + (depending on selection and availability): + (These are short cuts for the grib file names (leading sequence) + SH__ML, OG__ML, GG__ML, SH__SL, OG__SL, GG__SL, OG_OROLSM_SL + where: + SH = Spherical Harmonics, GG = Gaussian Grid, OG = Output Grid, + ML = Model Level, SL = Surface Level + + For each of this combination there is a list of parameter names, + the level type, the level list and the grid resolution. + + There are different scenarios for data extraction from MARS: + 1) Retrieval of etadot + eta=1, gauss=0, omega=0 + 2) Calculation of etadot from divergence + eta=0, gauss=1, omega=0 + 3) Calculation of etadot from omega (for makes sense for debugging) + eta=0, gauss=0, omega=1 + 4) Retrieval and Calculation of etadot (only for debugging) + eta=1, gauss=1, omega=0 + 5) Download also specific model and surface level data for FLEXPART-WRF + + Parameters: + ----------- + gauss : int + Gaussian grid is retrieved. + + eta : int + Etadot parameter will be directly retrieved. + + omega : int + The omega paramterwill be retrieved. + + cwc : int + The cloud liquid and ice water content will be retrieved. + + wrf : int + Additional model level and surface level data will be retrieved for + WRF/FLEXPART-WRF simulations. + + Return + ------ + + ''' + # SURFACE FIELDS + #----------------------------------------------------------------------- + self.params['SH__SL'] = ['LNSP', 'ML', '1', 'OFF'] + self.params['OG__SL'] = ['SD/MSL/TCC/10U/10V/2T/2D/Z/LSM', \ + 'SFC', '1', self.grid] + if self.addpar: + self.params['OG__SL'][0] += self.addpar + + if self.marsclass.upper() == 'EA' or self.marsclass.upper() == 'EP': + self.params['OG_OROLSM__SL'] = ["SDOR/CVL/CVH/FSR", + 'SFC', '1', self.grid] + else: + self.params['OG_OROLSM__SL'] = ["SDOR/CVL/CVH/SR", \ + 'SFC', '1', self.grid] + + # MODEL LEVEL FIELDS + #----------------------------------------------------------------------- + self.params['OG__ML'] = ['T/Q', 'ML', self.levelist, self.grid] + + if not gauss and eta: + self.params['OG__ML'][0] += '/U/V/ETADOT' + elif gauss and not eta: + self.params['GG__SL'] = ['Q', 'ML', '1', + '{}'.format((int(self.resol) + 1) // 2)] + self.params['SH__ML'] = ['U/V/D', 'ML', self.glevelist, 'OFF'] + elif not gauss and not eta: + self.params['OG__ML'][0] += '/U/V' + else: # GAUSS and ETA + print('Warning: Collecting etadot and parameters for gaussian grid ' + 'is a very costly parameter combination, ' + 'use this combination only for debugging!') + self.params['GG__SL'] = ['Q', 'ML', '1', + '{}'.format((int(self.resol) + 1) // 2)] + self.params['GG__ML'] = ['U/V/D/ETADOT', 'ML', self.glevelist, + '{}'.format((int(self.resol) + 1) // 2)] + + if omega: + self.params['OG__ML'][0] += '/W' + + if cwc: + self.params['OG__ML'][0] += '/CLWC/CIWC' + + # ADDITIONAL FIELDS FOR FLEXPART-WRF MODEL (IF QUESTIONED) + # ---------------------------------------------------------------------- + if wrf: + # @WRF + # THIS IS NOT YET CORRECTLY IMPLEMENTED !!! + # + # UNDER CONSTRUCTION !!! + # + + print('WRF VERSION IS UNDER CONSTRUCTION!') # dummy argument + + #self.params['OG__ML'][0] += '/Z/VO' + #if '/D' not in self.params['OG__ML'][0]: + # self.params['OG__ML'][0] += '/D' + + #wrf_sfc = ['SP','SKT','SST','CI','STL1','STL2', 'STL3','STL4', + # 'SWVL1','SWVL2','SWVL3','SWVL4'] + #for par in wrf_sfc: + # if par not in self.params['OG__SL'][0]: + # self.params['OG__SL'][0] += '/' + par + + return + + + def _create_params_fluxes(self): + '''Define the parameter setting for flux data. + + Flux data are accumulated fields in time and are stored on the + surface level. The leading short cut name for the grib files is: + "OG_acc_SL" with OG for Regular Output Grid, SL for Surface Level, and + acc for Accumulated Grid. + The params dictionary stores a list of parameter names, the level type, + the level list and the grid resolution. + + The flux data are: LSP/CP/SSHF/EWSS/NSSS/SSR + + Parameters: + ----------- + + Return + ------ + + ''' + self.params['OG_acc_SL'] = ["LSP/CP/SSHF/EWSS/NSSS/SSR", + 'SFC', '1', self.grid] + return + + + def _mk_targetname(self, ftype, param, date): + '''Creates the filename for the requested grib data to be stored in. + This name is passed as the "target" parameter in the request. + + Parameters + ---------- + ftype : str + Shortcut name of the type of the field. E.g. AN, FC, PF, ... + + param : str + Shortcut of the grid type. E.g. SH__ML, SH__SL, GG__ML, + GG__SL, OG__ML, OG__SL, OG_OROLSM_SL, OG_acc_SL + + date : str + The date period of the grib data to be stored in this file. + + Return + ------ + targetname : str + The target filename for the grib data. + ''' + targetname = (self.inputdir + '/' + ftype + param + '.' + date + '.' + + str(os.getppid()) + '.' + str(os.getpid()) + '.grb') + + return targetname + + + def _start_retrievement(self, request, par_dict): + '''Creates the Mars Retrieval and prints or submits the request + depending on the status of the request variable. + + Parameters + ---------- + request : int + 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. + + par_dict : dictionary + Contains all parameter which have to be set for creating the + Mars Retrievals. The parameter are: + marsclass, dataset, stream, type, levtype, levelist, resol, + gaussian, accuracy, grid, target, area, date, time, number, + step, expver, param + + Return + ------ + + ''' + # increase number of mars requests + self.mreq_count += 1 + + MR = MarsRetrieval(self.server, + self.public, + marsclass=par_dict['marsclass'], + dataset=par_dict['dataset'], + stream=par_dict['stream'], + type=par_dict['type'], + levtype=par_dict['levtype'], + levelist=par_dict['levelist'], + resol=par_dict['resol'], + gaussian=par_dict['gaussian'], + accuracy=par_dict['accuracy'], + grid=par_dict['grid'], + target=par_dict['target'], + area=par_dict['area'], + date=par_dict['date'], + time=par_dict['time'], + number=par_dict['number'], + step=par_dict['step'], + expver=par_dict['expver'], + param=par_dict['param']) + + if request == 0: + MR.display_info() + MR.data_retrieve() + elif request == 1: + MR.print_infodata_csv(self.inputdir, self.mreq_count) + elif request == 2: + MR.print_infodata_csv(self.inputdir, self.mreq_count) + MR.display_info() + MR.data_retrieve() + else: + print('Failure') + + return + + + def _mk_index_values(self, inputdir, inputfiles, keys): + '''Creates an index file for a set of grib parameter keys. + The values from the index keys are returned in a list. + + Parameters + ---------- + keys : dictionary + List of parameter names which serves as index. + + inputfiles : UioFiles + Contains a list of files. + + Return + ------ + iid : codes_index + This is a grib specific index structure to access + messages in a file. + + index_vals : list of list of str + 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 + ''' + from eccodes import codes_index_get + + iid = None + index_keys = keys + + indexfile = os.path.join(inputdir, _config.FILE_GRIB_INDEX) + silent_remove(indexfile) + grib = GribUtil(inputfiles.files) + # creates new index file + iid = grib.index(index_keys=index_keys, index_file=indexfile) + + # read the values of index keys + index_vals = [] + for key in index_keys: + key_vals = codes_index_get(iid, key) + # have to sort the key values for correct order, + # therefore convert to int first + key_vals = [int(k) for k in key_vals] + key_vals.sort() + key_vals = [str(k) for k in key_vals] + index_vals.append(key_vals) + # index_vals looks for example like: + # index_vals[0]: ('20171106', '20171107', '20171108') ; date + # index_vals[1]: ('0', '1200') ; time + # index_vals[2]: (3', '6', '9', '12') ; stepRange + + return iid, index_vals + + + def retrieve(self, server, dates, public, request, inputdir='.'): + '''Finalizing the retrieval information by setting final details + depending on grid type. + Prepares MARS retrievals per grid type and submits them. + + Parameters + ---------- + server : ECMWFService or ECMWFDataServer + 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) + + dates : str + Contains start and end date of the retrieval in the format + "YYYYMMDD/to/YYYYMMDD" + + request : int + 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. + + inputdir : str, optional + Path to the directory where the retrieved data is about + to be stored. The default is the current directory ('.'). + + Return + ------ + + ''' + self.dates = dates + self.server = server + self.public = public + self.inputdir = inputdir + oro = False + + # define times with datetime module + t12h = timedelta(hours=12) + t24h = timedelta(hours=24) + + # dictionary which contains all parameter for the mars request, + # entries with a "None" will change in different requests and will + # therefore be set in each request seperately + retr_param_dict = {'marsclass':self.marsclass, + 'dataset':self.dataset, + 'stream':None, + 'type':None, + 'levtype':None, + 'levelist':None, + 'resol':self.resol, + 'gaussian':None, + 'accuracy':self.accuracy, + 'grid':None, + 'target':None, + 'area':None, + 'date':None, + 'time':None, + 'number':self.number, + 'step':None, + 'expver':self.expver, + 'param':None} + + for ftype in sorted(self.types): + # ftype contains field types such as + # [AN, FC, PF, CV] + for pk, pv in sorted(self.params.items()): + # pk contains one of these keys of params + # [SH__ML, SH__SL, GG__ML, GG__SL, OG__ML, OG__SL, + # OG_OROLSM_SL, OG_acc_SL] + # pv contains all of the items of the belonging key + # [param, levtype, levelist, grid] + if isinstance(pv, str): + continue + retr_param_dict['type'] = ftype + retr_param_dict['time'] = self.types[ftype]['times'] + retr_param_dict['step'] = self.types[ftype]['steps'] + retr_param_dict['date'] = self.dates + retr_param_dict['stream'] = self.stream + retr_param_dict['target'] = \ + self._mk_targetname(ftype, + pk, + retr_param_dict['date'].split('/')[0]) + table128 = init128(_config.PATH_GRIBTABLE) + ids = to_param_id_with_tablenumber(pv[0], table128) + retr_param_dict['param'] = ids + retr_param_dict['levtype'] = pv[1] + retr_param_dict['levelist'] = pv[2] + retr_param_dict['grid'] = pv[3] + retr_param_dict['area'] = self.area + retr_param_dict['gaussian'] = self.gaussian + + if pk == 'OG_OROLSM__SL' and not oro: + oro = True + # in CERA20C (class EP) there is no stream "OPER"! + if self.marsclass.upper() != 'EP': + retr_param_dict['stream'] = 'OPER' + retr_param_dict['type'] = 'AN' + retr_param_dict['time'] = '00' + retr_param_dict['step'] = '000' + retr_param_dict['date'] = self.dates.split('/')[0] + retr_param_dict['target'] = self._mk_targetname('', + pk, + retr_param_dict['date']) + elif pk == 'OG_OROLSM__SL' and oro: + continue + if pk == 'GG__SL' and pv[0] == 'Q': + retr_param_dict['area'] = "" + retr_param_dict['gaussian'] = 'reduced' + if ftype.upper() == 'FC' and \ + 'acc' not in retr_param_dict['target']: + if (int(retr_param_dict['time'][0]) + + int(retr_param_dict['step'][0])) > 23: + dates = retr_param_dict['date'].split('/') + sdate = datetime.strptime(dates[0], '%Y%m%d%H') + sdate = sdate - timedelta(days=1) + retr_param_dict['date'] = '/'.join( + [sdate.strftime("%Y%m%d")] + + retr_param_dict['date'][1:]) + + print('CHANGED FC start date to ' + + sdate.strftime("%Y%m%d") + + ' to accomodate TIME=' + + retr_param_dict['time'][0] + + ', STEP=' + + retr_param_dict['time'][0]) + + # ------ on demand path -------------------------------------------------- + if self.basetime is None: + # ******* start retrievement + self._start_retrievement(request, retr_param_dict) + # ------ operational path ------------------------------------------------ + else: + # check if mars job requests fields beyond basetime. + # if yes eliminate those fields since they may not + # be accessible with user's credentials + + enddate = retr_param_dict['date'].split('/')[-1] + elimit = datetime.strptime(enddate + str(self.basetime), + '%Y%m%d%H') + + if self.basetime == 12: + # -------------- flux data ---------------------------- + if 'acc' in pk: + startdate = retr_param_dict['date'].split('/')[0] + enddate = datetime.strftime(elimit - t24h, '%Y%m%d') + retr_param_dict['date'] = '/'.join([startdate, + 'to', + enddate]) + + # ******* start retrievement + self._start_retrievement(request, retr_param_dict) + + retr_param_dict['date'] = \ + datetime.strftime(elimit - t12h, '%Y%m%d') + retr_param_dict['time'] = '00' + retr_param_dict['target'] = \ + self._mk_targetname(ftype, pk, + retr_param_dict['date']) + + # ******* start retrievement + self._start_retrievement(request, retr_param_dict) + + # -------------- non flux data ------------------------ + else: + # ******* start retrievement + self._start_retrievement(request, retr_param_dict) + + elif self.basetime == 0: +# retr_param_dict['date'] = \ +# datetime.strftime(elimit - t24h, '%Y%m%d') + + timesave = ''.join(retr_param_dict['time']) + + if all(['/' in retr_param_dict['time'], + pk != 'OG_OROLSM__SL', + 'acc' not in pk]): + times = retr_param_dict['time'].split('/') + steps = retr_param_dict['step'].split('/') + + while int(times[0]) + int(steps[0]) <= 12: + times = times[1:] + if len(times) > 1: + retr_param_dict['time'] = '/'.join(times) + else: + retr_param_dict['time'] = times[0] + + if all([pk != 'OG_OROLSM__SL', + int(retr_param_dict['step'].split('/')[0]) == 0, + int(timesave.split('/')[0]) == 0]): + + retr_param_dict['date'] = \ + datetime.strftime(elimit, '%Y%m%d') + retr_param_dict['time'] = '00' + retr_param_dict['step'] = '000' + retr_param_dict['target'] = \ + self._mk_targetname(ftype, pk, + retr_param_dict['date']) + + # ******* start retrievement + self._start_retrievement(request, retr_param_dict) + else: + raise ValueError('ERROR: Basetime has an invalid value ' + '-> {}'.format(str(self.basetime))) + + if request == 0 or request == 2: + print('MARS retrieve done ... ') + elif request == 1: + print('MARS request printed ...') + + return + + + def write_namelist(self, c): + '''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 + + Parameters + ---------- + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + filename : str + Name of the namelist file. + + Return + ------ + + ''' + + from genshi.template.text import NewTextTemplate + from genshi.template import TemplateLoader + from genshi.template.eval import UndefinedError + import numpy as np + + try: + loader = TemplateLoader(_config.PATH_TEMPLATES, auto_reload=False) + namelist_template = loader.load(_config.TEMPFILE_NAMELIST, + cls=NewTextTemplate) + + self.inputdir = c.inputdir + area = np.asarray(self.area.split('/')).astype(float) + grid = np.asarray(self.grid.split('/')).astype(float) + + if area[1] > area[3]: + area[1] -= 360 + maxl = int(round((area[3] - area[1]) / grid[1])) + 1 + maxb = int(round((area[0] - area[2]) / grid[0])) + 1 + + stream = namelist_template.generate( + maxl=str(maxl), + maxb=str(maxb), + mlevel=str(self.level), + mlevelist=str(self.levelist), + mnauf=str(self.resol), + metapar='77', + rlo0=str(area[1]), + rlo1=str(area[3]), + rla0=str(area[2]), + rla1=str(area[0]), + momega=str(c.omega), + momegadiff=str(c.omegadiff), + mgauss=str(c.gauss), + msmooth=str(c.smooth), + meta=str(c.eta), + metadiff=str(c.etadiff), + mdpdeta=str(c.dpdeta) + ) + except UndefinedError as e: + print('... ERROR ' + str(e)) + + sys.exit('\n... error occured while trying to generate namelist ' + + _config.TEMPFILE_NAMELIST) + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + sys.exit('\n... error occured while trying to generate template ' + + _config.TEMPFILE_NAMELIST) + + try: + namelistfile = os.path.join(self.inputdir, _config.FILE_NAMELIST) + + with open(namelistfile, 'w') as f: + f.write(stream.render('text')) + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + sys.exit('\n... error occured while trying to write ' + + namelistfile) + + return + + + def deacc_fluxes(self, inputfiles, c): + '''De-accumulate and disaggregate flux data. + + 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). + + Parameters + ---------- + inputfiles : UioFiles + Contains the list of files that contain flux data. + + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + Return + ------ + + ''' + import numpy as np + from eccodes import (codes_index_select, codes_get, + codes_get_values, codes_set_values, codes_set, + codes_write, codes_release, codes_new_from_index, + codes_index_release) + + table128 = init128(_config.PATH_GRIBTABLE) + # get ids from the flux parameter names + pars = to_param_id(self.params['OG_acc_SL'][0], table128) + + iid = None + index_vals = None + + # get the values of the keys which are used for distinct access + # of grib messages via product and save the maximum number of + # ensemble members if there is more than one + if '/' in self.number: + # more than one ensemble member is selected + index_keys = ["number", "date", "time", "step"] + # maximum ensemble number retrieved + # + 1 for the control run (ensemble number 0) + maxnum = int(self.number.split('/')[-1]) + 1 + # remember the index of the number values + index_number = index_keys.index('number') + # empty set to save ensemble numbers which were already processed + ens_numbers = set() + # index for the ensemble number + inumb = 0 + else: + index_keys = ["date", "time", "step"] + # maximum ensemble number + maxnum = None + + # get sorted lists of the index values + # this is very important for disaggregating + # the flux data in correct order + iid, index_vals = self._mk_index_values(c.inputdir, + inputfiles, + index_keys) + # index_vals looks like e.g.: + # index_vals[0]: ('20171106', '20171107', '20171108') ; date + # index_vals[1]: ('0', '600', '1200', '1800') ; time + # index_vals[2]: ('0', '3', '6', '9', '12') ; stepRange + + if c.rrint: + # set start and end timestamps for retrieval period + if not c.purefc: + start_date = datetime.strptime(c.start_date + '00', '%Y%m%d%H') + end_date = datetime.strptime(c.end_date + '23', '%Y%m%d%H') + else: + sdate_str = c.start_date + '{:0>2}'.format(index_vals[1][0]) + start_date = datetime.strptime(sdate_str, '%Y%m%d%H') + edate_str = c.end_date + '{:0>2}'.format(index_vals[1][-1]) + end_date = datetime.strptime(edate_str, '%Y%m%d%H') + end_date = end_date + timedelta(hours=c.maxstep) + + # get necessary grid dimensions from grib files for storing the + # precipitation fields + info = get_informations(os.path.join(c.inputdir, + inputfiles.files[0])) + dims = get_dimensions(info, c.purefc, c.dtime, index_vals, + start_date, end_date) + + # create empty numpy arrays + if not maxnum: + lsp_np = np.zeros((dims[1] * dims[0], dims[2]), dtype=np.float64) + cp_np = np.zeros((dims[1] * dims[0], dims[2]), dtype=np.float64) + else: + lsp_np = np.zeros((maxnum, dims[1] * dims[0], dims[2]), dtype=np.float64) + cp_np = np.zeros((maxnum, dims[1] * dims[0], dims[2]), dtype=np.float64) + + # index counter for time line + it_lsp = 0 + it_cp = 0 + + # store the order of date and step + date_list = [] + step_list = [] + + # initialize dictionaries to store flux values per parameter + orig_vals = {} + deac_vals = {} + for p in pars: + orig_vals[p] = [] + deac_vals[p] = [] + + # "product" genereates each possible combination between the + # values of the index keys + for prod in product(*index_vals): + # e.g. prod = ('20170505', '0', '12') + # ( date ,time, step) + + print('CURRENT PRODUCT: ', prod) + + # the whole process has to be done for each seperate ensemble member + # therefore, for each new ensemble member we delete old flux values + # and start collecting flux data from the beginning time step + if maxnum and prod[index_number] not in ens_numbers: + ens_numbers.add(prod[index_number]) + inumb = len(ens_numbers) - 1 + # re-initialize dictionaries to store flux values per parameter + # for the next ensemble member + it_lsp = 0 + it_cp = 0 + orig_vals = {} + deac_vals = {} + for p in pars: + orig_vals[p] = [] + deac_vals[p] = [] + + for i in range(len(index_keys)): + codes_index_select(iid, index_keys[i], prod[i]) + + # get first id from current product + gid = codes_new_from_index(iid) + + # if there is no data for this specific time combination / product + # skip the rest of the for loop and start with next timestep/product + if not gid: + continue + + # create correct timestamp from the three time informations + cdate = str(codes_get(gid, 'date')) + time = codes_get(gid, 'time') // 100 # integer + step = codes_get(gid, 'step') # integer + ctime = '{:0>2}'.format(time) + + t_date = datetime.strptime(cdate + ctime, '%Y%m%d%H') + t_dt = t_date + timedelta(hours=step) + t_m1dt = t_date + timedelta(hours=step-int(c.dtime)) + t_m2dt = t_date + timedelta(hours=step-2*int(c.dtime)) + if c.basetime is not None: + t_enddate = datetime.strptime(c.end_date + str(c.basetime), + '%Y%m%d%H') + else: + t_enddate = t_date + timedelta(2*int(c.dtime)) + + # if necessary, add ensemble member number to filename suffix + # otherwise, add empty string + if maxnum: + numbersuffix = '.N{:0>3}'.format(int(prod[index_number])) + else: + numbersuffix = '' + + if c.purefc: + fnout = os.path.join(c.inputdir, 'flux' + + t_date.strftime('%Y%m%d.%H') + + '.{:0>3}'.format(step-2*int(c.dtime)) + + numbersuffix) + gnout = os.path.join(c.inputdir, 'flux' + + t_date.strftime('%Y%m%d.%H') + + '.{:0>3}'.format(step-int(c.dtime)) + + numbersuffix) + hnout = os.path.join(c.inputdir, 'flux' + + t_date.strftime('%Y%m%d.%H') + + '.{:0>3}'.format(step) + + numbersuffix) + else: + fnout = os.path.join(c.inputdir, 'flux' + + t_m2dt.strftime('%Y%m%d%H') + numbersuffix) + gnout = os.path.join(c.inputdir, 'flux' + + t_m1dt.strftime('%Y%m%d%H') + numbersuffix) + hnout = os.path.join(c.inputdir, 'flux' + + t_dt.strftime('%Y%m%d%H') + numbersuffix) + + print("outputfile = " + fnout) + f_handle = open(fnout, 'wb') + h_handle = open(hnout, 'wb') + g_handle = open(gnout, 'wb') + + # read message for message and store relevant data fields, where + # data keywords are stored in pars + while True: + if not gid: + break + parId = codes_get(gid, 'paramId') # integer + step = codes_get(gid, 'step') # integer + time = codes_get(gid, 'time') # integer + ni = codes_get(gid, 'Ni') # integer + nj = codes_get(gid, 'Nj') # integer + if parId not in orig_vals.keys(): + # parameter is not a flux, find next one + continue + + # define conversion factor + if parId == 142 or parId == 143: + fak = 1. / 1000. + else: + fak = 3600. + + # get parameter values and reshape + values = codes_get_values(gid) + values = (np.reshape(values, (nj, ni))).flatten() / fak + + # save the original and accumulated values + orig_vals[parId].append(values[:]) + + if c.marsclass.upper() == 'EA' or step <= int(c.dtime): + # no de-accumulation needed + deac_vals[parId].append(values[:] / int(c.dtime)) + else: + # do de-accumulation + deac_vals[parId].append( + (orig_vals[parId][-1] - orig_vals[parId][-2]) / + int(c.dtime)) + + # store precipitation if new disaggregation method is selected + # only the exact days are needed + if c.rrint: + if start_date <= t_dt <= end_date: + if not c.purefc: + if t_dt not in date_list: + date_list.append(t_dt) + step_list = [0] + else: + if t_date not in date_list: + date_list.append(t_date) + if step not in step_list: + step_list.append(step) + # store precipitation values + if maxnum and parId == 142: + lsp_np[inumb, :, it_lsp] = deac_vals[parId][-1][:] + it_lsp += 1 + elif not maxnum and parId == 142: + lsp_np[:, it_lsp] = deac_vals[parId][-1][:] + it_lsp += 1 + elif maxnum and parId == 143: + cp_np[inumb, :, it_cp] = deac_vals[parId][-1][:] + it_cp += 1 + elif not maxnum and parId == 143: + cp_np[:, it_cp] = deac_vals[parId][-1][:] + it_cp += 1 + + # information printout + print(parId, time, step, len(values), values[0], np.std(values)) + + # length of deac_vals[parId] corresponds to the + # number of time steps, max. 4 are needed for disaggegration + # with the old and original method + # run over all grib messages and perform + # shifting in time + if len(deac_vals[parId]) >= 3: + if len(deac_vals[parId]) > 3: + if not c.rrint and (parId == 142 or parId == 143): + values = disaggregation.darain(deac_vals[parId]) + else: + values = disaggregation.dapoly(deac_vals[parId]) + + if not (step == c.maxstep and c.purefc \ + or t_dt == t_enddate): + # remove first time step in list to shift + # time line + orig_vals[parId].pop(0) + deac_vals[parId].pop(0) + else: + # if the third time step is read (per parId), + # write out the first one as a boundary value + if c.purefc: + values = deac_vals[parId][1] + else: + values = deac_vals[parId][0] + + if not (c.rrint and (parId == 142 or parId == 143)): + codes_set_values(gid, values) + + if c.purefc: + codes_set(gid, 'stepRange', max(0, step-2*int(c.dtime))) + else: + codes_set(gid, 'stepRange', 0) + codes_set(gid, 'time', t_m2dt.hour*100) + codes_set(gid, 'date', int(t_m2dt.strftime('%Y%m%d'))) + + codes_write(gid, f_handle) + + # squeeze out information of last two steps + # contained in deac_vals[parId] + # Note that deac_vals[parId][0] has not been popped + # in this case + + if step == c.maxstep and c.purefc or \ + t_dt == t_enddate: + # last step + if c.purefc: + values = deac_vals[parId][3] + codes_set_values(gid, values) + codes_set(gid, 'stepRange', step) + #truedatetime = t_m2dt + timedelta(hours=2*int(c.dtime)) + codes_write(gid, h_handle) + else: + values = deac_vals[parId][3] + codes_set_values(gid, values) + codes_set(gid, 'stepRange', 0) + truedatetime = t_m2dt + timedelta(hours=2*int(c.dtime)) + codes_set(gid, 'time', truedatetime.hour * 100) + codes_set(gid, 'date', int(truedatetime.strftime('%Y%m%d'))) + codes_write(gid, h_handle) + + if parId == 142 or parId == 143: + values = disaggregation.darain(list(reversed(deac_vals[parId]))) + else: + values = disaggregation.dapoly(list(reversed(deac_vals[parId]))) + + # step before last step + if c.purefc: + codes_set(gid, 'stepRange', step-int(c.dtime)) + #truedatetime = t_m2dt + timedelta(hours=int(c.dtime)) + codes_set_values(gid, values) + codes_write(gid, g_handle) + else: + codes_set(gid, 'stepRange', 0) + truedatetime = t_m2dt + timedelta(hours=int(c.dtime)) + codes_set(gid, 'time', truedatetime.hour * 100) + codes_set(gid, 'date', int(truedatetime.strftime('%Y%m%d'))) + codes_set_values(gid, values) + codes_write(gid, g_handle) + + codes_release(gid) + + gid = codes_new_from_index(iid) + + f_handle.close() + g_handle.close() + h_handle.close() + + codes_index_release(iid) + + if c.rrint: + self._create_rr_grib_dummy(inputfiles.files[0], c.inputdir) + + self._prep_new_rrint(dims[0], dims[1], dims[2], lsp_np, + cp_np, maxnum, index_keys, index_vals, c) + + return + + def _prep_new_rrint(self, ni, nj, nt, lsp_np, cp_np, maxnum, index_keys, index_vals, c): + '''Calculates and writes out the disaggregated precipitation fields. + + Disaggregation is done in time and original times are written to the + flux files, while the additional subgrid times are written to + extra files output files. They are named like the original files with + suffixes "_1" and "_2" for the first and second subgrid point. + + Parameters + ---------- + ni : int + Amount of zonal grid points. + + nj : int + Amount of meridional grid points. + + nt : int + Number of time steps. + + lsp_np : numpy array of float + The large scale precipitation fields for each time step. + Shape (ni * nj, nt). + + cp_np : numpy array of float + The convective precipitation fields for each time step. + Shape (ni * nj, nt). + + maxnum : int + The maximum number of ensemble members. It is None + if there are no or just one ensemble. + + index_keys : dictionary + List of parameter names which serves as index. + + index_vals : list of list of str + 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 + + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + Return + ------ + + ''' + import numpy as np + + print('... disaggregation of precipitation with new method.') + + tmpfile = os.path.join(c.inputdir, 'rr_grib_dummy.grb') + + # initialize new numpy arrays for disaggregated fields + if maxnum: + lsp_new_np = np.zeros((maxnum, ni * nj, nt * 3), dtype=np.float64) + cp_new_np = np.zeros((maxnum, ni * nj, nt * 3), dtype=np.float64) + else: + lsp_new_np = np.zeros((1, ni * nj, nt * 3), dtype=np.float64) + cp_new_np = np.zeros((1, ni * nj, nt * 3), dtype=np.float64) + + # do the disaggregation, but neglect the last value of the + # original time series. This one corresponds for example to + # 24 hour, which we don't need. we use 0 - 23 UTC for a day. + if maxnum: + for inum in range(maxnum): + for ix in range(ni*nj): + lsp_new_np[inum, ix, :] = disaggregation.IA3(lsp_np[inum, ix, :])[:-1] + cp_new_np[inum, ix, :] = disaggregation.IA3(cp_np[inum, ix, :])[:-1] + else: + for ix in range(ni*nj): + lsp_new_np[0, ix, :] = disaggregation.IA3(lsp_np[ix, :])[:-1] + cp_new_np[0, ix, :] = disaggregation.IA3(cp_np[ix, :])[:-1] + + # write to grib files (full/orig times to flux file and inbetween + # times with step 1 and 2, respectively) + print('... write disaggregated precipitation to files.') + + if maxnum: + # remember the index of the number values + index_number = index_keys.index('number') + # empty set to save unique ensemble numbers which were already processed + ens_numbers = set() + # index for the ensemble number + inumb = 0 + else: + inumb = 0 + + # index variable of disaggregated fields + it = 0 + + # "product" genereates each possible combination between the + # values of the index keys + for prod in product(*index_vals): + # e.g. prod = ('20170505', '0', '12') + # ( date ,time, step) + # or prod = ('0' , '20170505', '0', '12') + # (number, date ,time, step) + + cdate = prod[index_keys.index('date')] + ctime = '{:0>2}'.format(int(prod[index_keys.index('time')])//100) + cstep = '{:0>3}'.format(int(prod[index_keys.index('step')])) + + date = datetime.strptime(cdate + ctime, '%Y%m%d%H') + date += timedelta(hours=int(cstep)) + + start_period, end_period = generate_retrieval_period_boundary(c) + # skip all temporary times + # which are outside the retrieval period + if date < start_period or \ + date > end_period: + continue + + # the whole process has to be done for each seperate ensemble member + # therefore, for each new ensemble member we delete old flux values + # and start collecting flux data from the beginning time step + if maxnum and prod[index_number] not in ens_numbers: + ens_numbers.add(prod[index_number]) + inumb = int(prod[index_number]) + it = 0 + + # if necessary, add ensemble member number to filename suffix + # otherwise, add empty string + if maxnum: + numbersuffix = '.N{:0>3}'.format(int(prod[index_number])) + else: + numbersuffix = '' + + # per original time stamp: write original time step and + # the two newly generated sub time steps + if c.purefc: + fluxfilename = 'flux' + date.strftime('%Y%m%d.%H') + '.' + cstep + else: + fluxfilename = 'flux' + date.strftime('%Y%m%d%H') + numbersuffix + + # write original time step to flux file as usual + fluxfile = GribUtil(os.path.join(c.inputdir, fluxfilename)) + fluxfile.set_keys(tmpfile, filemode='ab', + wherekeynames=['paramId'], wherekeyvalues=[142], + keynames=['perturbationNumber', 'date', 'time', + 'stepRange', 'values'], + keyvalues=[inumb, int(date.strftime('%Y%m%d')), + date.hour*100, 0, lsp_new_np[inumb, :, it]], + ) + fluxfile.set_keys(tmpfile, filemode='ab', + wherekeynames=['paramId'], wherekeyvalues=[143], + keynames=['perturbationNumber', 'date', 'time', + 'stepRange', 'values'], + keyvalues=[inumb, int(date.strftime('%Y%m%d')), + date.hour*100, 0, cp_new_np[inumb, :, it]] + ) + + # rr for first subgrid point is identified by step = 1 + fluxfile.set_keys(tmpfile, filemode='ab', + wherekeynames=['paramId'], wherekeyvalues=[142], + keynames=['perturbationNumber', 'date', 'time', + 'stepRange', 'values'], + keyvalues=[inumb, int(date.strftime('%Y%m%d')), + date.hour*100, '1', lsp_new_np[inumb, :, it+1]] + ) + fluxfile.set_keys(tmpfile, filemode='ab', + wherekeynames=['paramId'], wherekeyvalues=[143], + keynames=['perturbationNumber', 'date', 'time', + 'stepRange', 'values'], + keyvalues=[inumb, int(date.strftime('%Y%m%d')), + date.hour*100, '1', cp_new_np[inumb, :, it+1]] + ) + + # rr for second subgrid point is identified by step = 2 + fluxfile.set_keys(tmpfile, filemode='ab', + wherekeynames=['paramId'], wherekeyvalues=[142], + keynames=['perturbationNumber', 'date', 'time', + 'stepRange', 'values'], + keyvalues=[inumb, int(date.strftime('%Y%m%d')), + date.hour*100, '2', lsp_new_np[inumb, :, it+2]] + ) + fluxfile.set_keys(tmpfile, filemode='ab', + wherekeynames=['paramId'], wherekeyvalues=[143], + keynames=['perturbationNumber', 'date', 'time', + 'stepRange', 'values'], + keyvalues=[inumb, int(date.strftime('%Y%m%d')), + date.hour*100, '2', cp_new_np[inumb, :, it+2]] + ) + + it = it + 3 # jump to next original time step in rr fields + return + + def _create_rr_grib_dummy(self, ifile, inputdir): + '''Creates a grib file with a dummy message for the two precipitation + types lsp and cp each. + + Parameters + ---------- + ifile : str + Filename of the input file to read the grib messages from. + + inputdir : str, optional + Path to the directory where the retrieved data is stored. + + Return + ------ + + ''' + + gribfile = GribUtil(os.path.join(inputdir, 'rr_grib_dummy.grb')) + + gribfile.copy_dummy_msg(ifile, keynames=['paramId'], + keyvalues=[142], filemode='wb') + + gribfile.copy_dummy_msg(ifile, keynames=['paramId'], + keyvalues=[143], filemode='ab') + + return + + def create(self, inputfiles, c): + '''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 + parameter "inputfiles" to seperate specific parameters into fort.* + files. Afterwards the FORTRAN program is called to convert + the data fields all to the same grid and put them in one file + per unique time step (combination of "date", "time" and + "stepRange"). + + Note + ---- + This method is based on the ECMWF example index.py + https://software.ecmwf.int/wiki/display/GRIB/index.py + + Parameters + ---------- + inputfiles : UioFiles + Contains a list of files. + + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + Return + ------ + + ''' + from eccodes import (codes_index_select, codes_get, + codes_get_values, codes_set_values, codes_set, + codes_write, codes_release, codes_new_from_index, + codes_index_release) + + # generate start and end timestamp of the retrieval period + start_period = datetime.strptime(c.start_date + c.time[0], '%Y%m%d%H') + start_period = start_period + timedelta(hours=int(c.step[0])) + end_period = datetime.strptime(c.end_date + c.time[-1], '%Y%m%d%H') + end_period = end_period + timedelta(hours=int(c.step[-1])) + + # @WRF + # THIS IS NOT YET CORRECTLY IMPLEMENTED !!! + # + # UNDER CONSTRUCTION !!! + # + #if c.wrf: + # table128 = init128(_config.PATH_GRIBTABLE) + # wrfpars = to_param_id('sp/mslp/skt/2t/10u/10v/2d/z/lsm/sst/ci/sd/\ + # stl1/stl2/stl3/stl4/swvl1/swvl2/swvl3/swvl4', + # table128) + + # these numbers are indices for the temporary files "fort.xx" + # which are used to seperate the grib fields to, + # for the Fortran program input + # 10: U,V | 11: T | 12: lnsp | 13: D | 16: sfc fields + # 17: Q | 18: Q, SL, GG| 19: omega | 21: etadot | 22: clwc+ciwc + fdict = {'10':None, '11':None, '12':None, '13':None, '16':None, + '17':None, '18':None, '19':None, '21':None, '22':None} + + iid = None + index_vals = None + + # get the values of the keys which are used for distinct access + # of grib messages via product + if '/' in self.number: + # more than one ensemble member is selected + index_keys = ["number", "date", "time", "step"] + else: + index_keys = ["date", "time", "step"] + iid, index_vals = self._mk_index_values(c.inputdir, + inputfiles, + index_keys) + # index_vals looks like e.g.: + # index_vals[0]: ('20171106', '20171107', '20171108') ; date + # index_vals[1]: ('0', '600', '1200', '1800') ; time + # index_vals[2]: ('0', '12', '3', '6', '9') ; stepRange + + # "product" genereates each possible combination between the + # values of the index keys + for prod in product(*index_vals): + # e.g. prod = ('20170505', '0', '12') + # ( date ,time, step) + + print('current product: ', prod) + + for i in range(len(index_keys)): + codes_index_select(iid, index_keys[i], prod[i]) + + # get first id from current product + gid = codes_new_from_index(iid) + + # if there is no data for this specific time combination / product + # skip the rest of the for loop and start with next timestep/product + if not gid: + continue +#============================================================================================ + # remove old fort.* files and open new ones + # they are just valid for a single product + for k, f in fdict.items(): + fortfile = os.path.join(c.inputdir, 'fort.' + k) + silent_remove(fortfile) + fdict[k] = open(fortfile, 'wb') +#============================================================================================ + # create correct timestamp from the three time informations + cdate = str(codes_get(gid, 'date')) + ctime = '{:0>2}'.format(codes_get(gid, 'time') // 100) + cstep = '{:0>3}'.format(codes_get(gid, 'step')) + timestamp = datetime.strptime(cdate + ctime, '%Y%m%d%H') + timestamp += timedelta(hours=int(cstep)) + cdate_hour = datetime.strftime(timestamp, '%Y%m%d%H') + + # if basetime is used, adapt start/end date period + if c.basetime is not None: + time_delta = timedelta(hours=12-int(c.dtime)) + start_period = datetime.strptime(c.end_date + str(c.basetime), + '%Y%m%d%H') - time_delta + end_period = datetime.strptime(c.end_date + str(c.basetime), + '%Y%m%d%H') + + # skip all temporary times + # which are outside the retrieval period + if timestamp < start_period or \ + timestamp > end_period: + continue + + + # @WRF + # THIS IS NOT YET CORRECTLY IMPLEMENTED !!! + # + # UNDER CONSTRUCTION !!! + # + #if c.wrf: + # if 'olddate' not in locals() or cdate != olddate: + # fwrf = open(os.path.join(c.outputdir, + # 'WRF' + cdate + '.' + ctime + '.000.grb2'), 'wb') + # olddate = cdate[:] +#============================================================================================ + # savedfields remembers which fields were already used. + savedfields = [] + # sum of cloud liquid and ice water content + scwc = None + while 1: + if not gid: + break + paramId = codes_get(gid, 'paramId') + gridtype = codes_get(gid, 'gridType') + if paramId == 77: # ETADOT + codes_write(gid, fdict['21']) + elif paramId == 130: # T + codes_write(gid, fdict['11']) + elif paramId == 131 or paramId == 132: # U, V wind component + codes_write(gid, fdict['10']) + elif paramId == 133 and gridtype != 'reduced_gg': # Q + codes_write(gid, fdict['17']) + elif paramId == 133 and gridtype == 'reduced_gg': # Q, gaussian + codes_write(gid, fdict['18']) + elif paramId == 135: # W + codes_write(gid, fdict['19']) + elif paramId == 152: # LNSP + codes_write(gid, fdict['12']) + elif paramId == 155 and gridtype == 'sh': # D + codes_write(gid, fdict['13']) + elif paramId == 246 or paramId == 247: # CLWC, CIWC + # sum cloud liquid water and ice + if scwc is None: + scwc = codes_get_values(gid) + else: + scwc += codes_get_values(gid) + codes_set_values(gid, scwc) + codes_set(gid, 'paramId', 201031) + codes_write(gid, fdict['22']) + scwc = None + # @WRF + # THIS IS NOT YET CORRECTLY IMPLEMENTED !!! + # + # UNDER CONSTRUCTION !!! + # + #elif c.wrf and paramId in [129, 138, 155] and \ + # levtype == 'hybrid': # Z, VO, D + # # do not do anything right now + # # these are specific parameter for WRF + # pass + else: + if paramId not in savedfields: + # SD/MSL/TCC/10U/10V/2T/2D/Z/LSM/SDOR/CVL/CVH/SR + # and all ADDPAR parameter + codes_write(gid, fdict['16']) + savedfields.append(paramId) + else: + print('duplicate ' + str(paramId) + ' not written') + # @WRF + # THIS IS NOT YET CORRECTLY IMPLEMENTED !!! + # + # UNDER CONSTRUCTION !!! + # + #try: + # if c.wrf: + # # model layer + # if levtype == 'hybrid' and \ + # paramId in [129, 130, 131, 132, 133, 138, 155]: + # codes_write(gid, fwrf) + # # sfc layer + # elif paramId in wrfpars: + # codes_write(gid, fwrf) + #except AttributeError: + # pass + + codes_release(gid) + gid = codes_new_from_index(iid) +#============================================================================================ + for f in fdict.values(): + f.close() +#============================================================================================ + # call for Fortran program to convert e.g. reduced_gg grids to + # regular_ll and calculate detadot/dp + pwd = os.getcwd() + os.chdir(c.inputdir) + if os.stat('fort.21').st_size == 0 and c.eta: + print('Parameter 77 (etadot) is missing, most likely it is ' + 'not available for this type or date / time\n') + print('Check parameters CLASS, TYPE, STREAM, START_DATE\n') + my_error('fort.21 is empty while parameter eta ' + 'is set to 1 in CONTROL file') +# ============================================================================================ + # write out all output to log file before starting fortran programm + sys.stdout.flush() + + # Fortran program creates file fort.15 (with u,v,etadot,t,sp,q) + execute_subprocess([os.path.join(c.exedir, + _config.FORTRAN_EXECUTABLE)], + error_msg='FORTRAN PROGRAM FAILED!')#shell=True) + + os.chdir(pwd) +# ============================================================================================ + # create name of final output file, e.g. EN13040500 (ENYYMMDDHH) + if c.purefc: + suffix = cdate[2:8] + '.' + ctime + '.' + cstep + else: + suffix = cdate_hour[2:10] + + # if necessary, add ensemble member number to filename suffix + if 'number' in index_keys: + index_number = index_keys.index('number') + if len(index_vals[index_number]) > 1: + suffix = suffix + '.N{:0>3}'.format(int(prod[index_number])) + + fnout = os.path.join(c.inputdir, c.prefix + suffix) + print("outputfile = " + fnout) + # collect for final processing + self.outputfilelist.append(os.path.basename(fnout)) + # # get additional precipitation subgrid data if available + # if c.rrint: + # self.outputfilelist.append(os.path.basename(fnout + '_1')) + # self.outputfilelist.append(os.path.basename(fnout + '_2')) +# ============================================================================================ + # create outputfile and copy all data from intermediate files + # to the outputfile (final GRIB input files for FLEXPART) + orolsm = os.path.basename(glob.glob(c.inputdir + + '/OG_OROLSM__SL.*.' + + c.ppid + + '*')[0]) + fluxfile = 'flux' + cdate[0:2] + suffix + if not c.cwc: + flist = ['fort.15', fluxfile, 'fort.16', orolsm] + else: + flist = ['fort.15', 'fort.22', fluxfile, 'fort.16', orolsm] + + with open(fnout, 'wb') as fout: + for f in flist: + shutil.copyfileobj(open(os.path.join(c.inputdir, f), 'rb'), + fout) + + if c.omega: + with open(os.path.join(c.outputdir, 'OMEGA'), 'wb') as fout: + shutil.copyfileobj(open(os.path.join(c.inputdir, 'fort.25'), + 'rb'), fout) +# ============================================================================================ + + # @WRF + # THIS IS NOT YET CORRECTLY IMPLEMENTED !!! + # + # UNDER CONSTRUCTION !!! + # + #if c.wrf: + # fwrf.close() + + codes_index_release(iid) + + return + + + def calc_extra_elda(self, path, prefix): + ''' Calculates extra ensemble members for ELDA - Stream. + + This is a specific feature which doubles the number of ensemble members + for the ELDA Stream. + + Parameters + ---------- + path : str + Path to the output files. + + prefix : str + The prefix of the output filenames as defined in Control file. + + Return + ------ + + ''' + from eccodes import (codes_grib_new_from_file, codes_get_array, + codes_set_array, codes_release, + codes_set, codes_write) + + # max number + maxnum = int(self.number.split('/')[-1]) + + # get a list of all prepared output files with control forecast (CF) + cf_filelist = UioFiles(path, prefix + '*.N000') + cf_filelist.files = sorted(cf_filelist.files) + + for cffile in cf_filelist.files: + with open(cffile, 'rb') as f: + cfvalues = [] + while True: + fid = codes_grib_new_from_file(f) + if fid is None: + break + cfvalues.append(codes_get_array(fid, 'values')) + codes_release(fid) + + filename = cffile.split('N000')[0] + for i in range(1, maxnum + 1): + # read an ensemble member + g = open(filename + 'N{:0>3}'.format(i), 'rb') + # create file for newly calculated ensemble member + h = open(filename + 'N{:0>3}'.format(i+maxnum), 'wb') + # number of message in grib file + j = 0 + while True: + gid = codes_grib_new_from_file(g) + if gid is None: + break + values = codes_get_array(gid, 'values') + # generate a new ensemble member by subtracting + # 2 * ( current time step value - last time step value ) + codes_set_array(gid, 'values', + values-2*(values-cfvalues[j])) + codes_set(gid, 'number', i+maxnum) + codes_write(gid, h) + codes_release(gid) + j += 1 + + g.close() + h.close() + print('wrote ' + filename + 'N{:0>3}'.format(i+maxnum)) + self.outputfilelist.append( + os.path.basename(filename + 'N{:0>3}'.format(i+maxnum))) + + return + + + def process_output(self, c): + '''Postprocessing of FLEXPART input files. + + The grib files are postprocessed depending on the selection in + CONTROL file. The resulting files are moved to the output + directory if its not equal to the input directory. + The following modifications might be done if + properly switched in CONTROL file: + GRIB2 - Conversion to GRIB2 + ECTRANS - Transfer of files to gateway server + ECSTORAGE - Storage at ECMWF server + + Parameters + ---------- + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + Return + ------ + + ''' + + print('\n\nPostprocessing:\n Format: {}\n'.format(c.format)) + + if _config.FLAG_ON_ECMWFSERVER: + print('ecstorage: {}\n ecfsdir: {}\n'. + format(c.ecstorage, c.ecfsdir)) + print('ectrans: {}\n gateway: {}\n destination: {}\n ' + .format(c.ectrans, c.gateway, c.destination)) + + print('Output filelist: ') + print(sorted(self.outputfilelist)) + + for ofile in self.outputfilelist: + ofile = os.path.join(self.inputdir, ofile) + + if c.format.lower() == 'grib2': + execute_subprocess(['grib_set', '-s', 'edition=2,' + + 'productDefinitionTemplateNumber=8', + ofile, ofile + '_2'], + error_msg='GRIB2 CONVERSION FAILED!') + + execute_subprocess(['mv', ofile + '_2', ofile], + error_msg='RENAMING FOR NEW GRIB2 FORMAT ' + 'FILES FAILED!') + + if c.ectrans and _config.FLAG_ON_ECMWFSERVER: + execute_subprocess(['ectrans', '-overwrite', '-gateway', + c.gateway, '-remote', c.destination, + '-source', ofile], + error_msg='TRANSFER TO LOCAL SERVER FAILED!') + + if c.ecstorage and _config.FLAG_ON_ECMWFSERVER: + execute_subprocess(['ecp', '-o', ofile, + os.path.expandvars(c.ecfsdir)], + error_msg='COPY OF FILES TO ECSTORAGE ' + 'AREA FAILED!') + + if c.outputdir != c.inputdir: + execute_subprocess(['mv', os.path.join(c.inputdir, ofile), + c.outputdir], + error_msg='RELOCATION OF OUTPUT FILES ' + 'TO OUTPUTDIR FAILED!') + + return diff --git a/Source/Python/Classes/GribUtil.py b/Source/Python/Classes/GribUtil.py new file mode 100644 index 0000000000000000000000000000000000000000..809544e0397b28a2ea32735421add16746ab0bec --- /dev/null +++ b/Source/Python/Classes/GribUtil.py @@ -0,0 +1,308 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Anne Fouilloux (University of Oslo) +# +# @Date: July 2014 +# +# @Change History: +# February 2018 - Anne Philipp (University of Vienna): +# - applied PEP8 style guide +# - added documentation +# - changed some naming +# +# @License: +# (C) Copyright 2014-2019. +# Anne Philipp, Leopold Haimberger +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +#******************************************************************************* + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +from __future__ import print_function + +import os + +# ------------------------------------------------------------------------------ +# CLASS +# ------------------------------------------------------------------------------ +class GribUtil(object): + ''' + Class for GRIB utilities (new methods) based on GRIB API + + 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 + direct connection with the grib files. This class provides some higher + functions which apply a set of GRIB API tools together in the respective + context. So, the class initially contains a list of grib files (their + names) and the using program then applies the methods directly on the + class objects without having to think about how the actual GRIB API + tools have to be arranged. + ''' + # -------------------------------------------------------------------------- + # CLASS FUNCTIONS + # -------------------------------------------------------------------------- + def __init__(self, filenames): + '''Initialise an object of GribUtil and assign a list of filenames. + + Parameters + ---------- + filenames : :obj:`list` of :obj:`strings` + A list of filenames. + + Return + ------ + + ''' + + self.filenames = filenames + + return + + + def get_keys(self, keynames, wherekeynames, wherekeyvalues): + '''Get keyvalues for a given list of keynames a where statement + can be given (list of key and list of values) + + Parameters + ---------- + keynames : :obj:`list` of :obj:`string` + List of keynames. + + wherekeynames : :obj:`list` of :obj:`string` + List of key names for indexing grib message parameter. + + wherekeyvalues : :obj:`list` of :obj:`string` + List of key values corresponding the key names. + + Return + ------ + return_list : :obj:`list` of :obj:`string` + List of keyvalues for given keynames. + ''' + from eccodes import (codes_new_from_file, codes_is_defined, codes_get, + codes_release) + + return_list = [] + + with open(self.filenames, 'rb') as fileid: + + gid = codes_new_from_file(fileid) + + if len(wherekeynames) != len(wherekeyvalues): + raise Exception("Number of key values and key names must be \ + the same. Give a value for each keyname!") + + select = True + i = 0 + for wherekey in wherekeynames: + if not codes_is_defined(gid, wherekey): + raise Exception("where key was not defined") + + select = (select and (str(wherekeyvalues[i]) == + str(codes_get(gid, wherekey)))) + i += 1 + + if select: + llist = [] + for key in keynames: + llist.extend([str(codes_get(gid, key))]) + return_list.append(llist) + + codes_release(gid) + + return return_list + + + def set_keys(self, fromfile, keynames, keyvalues, wherekeynames, + wherekeyvalues, filemode='wb'): + '''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. + + Parameters + ---------- + fromfile : :obj:`string` + Filename of the input file to read the grib messages from. + + keynames : :obj:`list` of :obj:`string` + List of keynames to set in the selected messages. + Default is an empty list. + + keyvalues : :obj:`list` of :obj:`string` + List of keyvalues to set in the selected messages. + Default is an empty list. + + wherekeynames : :obj:`list` of :obj:`string` + List of keynames to select correct message. + + wherekeyvalues : :obj:`list` of :obj:`string` + List of keyvalues for keynames to select correct message. + + filemode : :obj:`string`, optional + Sets the mode for the output file. Default is "wb". + + Return + ------ + + ''' + from eccodes import (codes_grib_new_from_file, codes_is_defined, + codes_get, codes_set, codes_write, + codes_set_values, codes_release) + + if len(wherekeynames) != len(wherekeyvalues): + raise Exception("Give a value for each keyname!") + + fout = open(self.filenames, filemode) + + with open(fromfile, 'rb') as fin: + gid = codes_grib_new_from_file(fin) + + select = True + i = 0 + for wherekey in wherekeynames: + if not codes_is_defined(gid, wherekey): + raise Exception("wherekey was not defined") + + select = (select and (str(wherekeyvalues[i]) == + str(codes_get(gid, wherekey)))) + i += 1 + + if select: + i = 0 + for key in keynames: + if key == 'values': + codes_set_values(gid, keyvalues[i]) + else: + codes_set(gid, key, keyvalues[i]) + i += 1 + + codes_write(gid, fout) + + codes_release(gid) + + fout.close() + + return + + def copy_dummy_msg(self, filename_in, keynames, keyvalues, + selectwhere=True, filemode='wb'): + '''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. + + Parameters + ---------- + filename_in : :obj:`string` + Filename of the input file to read the grib messages from. + + selectwhere : :obj:`boolean`, 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. + + keynames : :obj:`list` of :obj:`string` + List of keynames. + + keyvalues : :obj:`list` of :obj:`string` + List of keyvalues. + + filemode : :obj:`string`, optional + Sets the mode for the output file. Default is "wb". + + Return + ------ + + ''' + from eccodes import (codes_grib_new_from_file, codes_is_defined, + codes_get, codes_release, codes_write) + + if len(keynames) != len(keyvalues): + raise Exception("Give a value for each keyname!") + + + fout = open(self.filenames, filemode) + + fields = 0 + + with open(filename_in, 'rb') as fin: + if fields >= 1: + fout.close() + return + + gid = codes_grib_new_from_file(fin) + + select = True + i = 0 + for key in keynames: + if not codes_is_defined(gid, key): + raise Exception("Key was not defined") + + if selectwhere: + select = (select and (str(keyvalues[i]) == + str(codes_get(gid, key)))) + else: + select = (select and (str(keyvalues[i]) != + str(codes_get(gid, key)))) + i += 1 + + if select: + fields = fields + 1 + codes_write(gid, fout) + + codes_release(gid) + + fout.close() + + return + + def index(self, index_keys, index_file="my.idx"): + '''Create index file from a list of files if it does not exist or + read an index file. + + Parameters + ---------- + index_keys: :obj:`list` of :obj:`string` + Contains the list of key parameter names from + which the index is to be created. + + index_file: :obj:`string`, optional + Filename where the indices are stored. + Default is "my.idx". + + Return + ------ + iid: :obj:`integer` + Grib index id. + ''' + from eccodes import (codes_index_read, codes_index_new_from_file, + codes_index_add_file, codes_index_write) + + print("... index will be done") + iid = None + + if os.path.exists(index_file): + iid = codes_index_read(index_file) + print("Use existing index file: %s " % (index_file)) + else: + for filename in self.filenames: + print("Inputfile: %s " % (filename)) + if iid is None: + iid = codes_index_new_from_file(filename, index_keys) + else: + codes_index_add_file(iid, filename) + + if iid is not None: + codes_index_write(iid, index_file) + + print('... index done') + + return iid diff --git a/Source/Python/Classes/MarsRetrieval.py b/Source/Python/Classes/MarsRetrieval.py new file mode 100644 index 0000000000000000000000000000000000000000..105f9b95b5d9f1f23752b81b946295be038ad8a3 --- /dev/null +++ b/Source/Python/Classes/MarsRetrieval.py @@ -0,0 +1,540 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Anne Fouilloux (University of Oslo) +# +# @Date: October 2014 +# +# @Change History: +# +# November 2015 - Leopold Haimberger (University of Vienna): +# - optimized display_info +# - optimized data_retrieve and seperate between python and shell +# script call +# +# February 2018 - Anne Philipp (University of Vienna): +# - applied PEP8 style guide +# - added documentation +# - applied some minor modifications in programming style/structure +# - added writing of mars request attributes to a csv file +# +# @License: +# (C) Copyright 2014-2019. +# Anne Philipp, Leopold Haimberger +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +#******************************************************************************* + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +from __future__ import print_function + +import os +import sys +import subprocess +import traceback + +# software specific classes and modules from flex_extract +#pylint: disable=wrong-import-position +sys.path.append('../') +import _config +#pylint: disable=invalid-name +try: + ec_api = True + import ecmwfapi +except ImportError: + ec_api = False + +try: + cds_api = True + import cdsapi +except ImportError: + cds_api = False +#pylint: enable=invalid-name +#pylint: enable=wrong-import-position +# ------------------------------------------------------------------------------ +# CLASS +# ------------------------------------------------------------------------------ +class MarsRetrieval(object): + '''Specific syntax and content for submission of MARS retrievals. + + A MARS revtrieval has a specific syntax with a selection of keywords and + their corresponding values. This class provides the necessary functions + by displaying the selected parameters and their values and the actual + retrievement of the data through a mars request or a Python web api + interface. The initialization already expects all the keyword values. + + A description of MARS keywords/arguments and examples of their + values can be found here: + https://software.ecmwf.int/wiki/display/UDOC/\ + Identification+keywords#Identificationkeywords-class + + Attributes + ---------- + server : ECMWFService or ECMWFDataServer + This is the connection to the ECMWF data servers. + + public : int + Decides which Web API Server version is used. + + marsclass : str, optional + Characterisation of dataset. + + dataset : str, optional + For public datasets there is the specific naming and parameter + dataset which has to be used to characterize the type of + data. + + type : str, optional + Determines the type of fields to be retrieved. + + levtype : str, optional + Denotes type of level. + + levelist : str, optional + Specifies the required levels. + + repres : str, optional + Selects the representation of the archived data. + + date : str, optional + Specifies the Analysis date, the Forecast base date or + Observations date. + + resol : str, optional + Specifies the desired triangular truncation of retrieved data, + before carrying out any other selected post-processing. + + stream : str, optional + Identifies the forecasting system used to generate the data. + + area : str, optional + Specifies the desired sub-area of data to be extracted. + + time : str, optional + Specifies the time of the data in hours and minutes. + + step : str, optional + Specifies the forecast time step from forecast base time. + + expver : str, optional + The version of the dataset. + + number : str, optional + Selects the member in ensemble forecast run. + + accuracy : str, optional + Specifies the number of bits per value to be used in the + generated GRIB coded fields. + + grid : str, optional + Specifies the output grid which can be either a Gaussian grid + or a Latitude/Longitude grid. + + gaussian : str, optional + This parameter is deprecated and should no longer be used. + Specifies the desired type of Gaussian grid for the output. + + target : str, optional + Specifies a file into which data is to be written after + retrieval or manipulation. + + param : str, optional + Specifies the meteorological parameter. + ''' + + def __init__(self, server, public, marsclass="EA", dataset="", type="", + levtype="", levelist="", repres="", date="", resol="", + stream="", area="", time="", step="", expver="1", + number="", accuracy="", grid="", gaussian="", target="", + param=""): + '''Initialises the instance of the MarsRetrieval class and + defines and assigns a set of the necessary retrieval parameters + for the FLEXPART input data. + A description of MARS keywords/arguments, their dependencies + on each other and examples of their values can be found here: + + https://software.ecmwf.int/wiki/display/UDOC/MARS+keywords + + Parameters + ---------- + server : ECMWFService or ECMWFDataServer + This is the connection to the ECMWF data servers. + It is needed for the pythonic access of ECMWF data. + + public : int + Decides which Web API version is used: + 0: member-state users and full archive access + 1: public access and limited access to the public server and + datasets. Needs the parameter dataset. + Default is "0" and for member-state users. + + marsclass : str, optional + Characterisation of dataset. E.g. EI (ERA-Interim), + E4 (ERA40), OD (Operational archive), EA (ERA5). + Default is the ERA5 dataset "EA". + + dataset : str, optional + For public datasets there is the specific naming and parameter + dataset which has to be used to characterize the type of + data. Usually there is less data available, either in times, + domain or parameter. + Default is an empty string. + + type : str, optional + Determines the type of fields to be retrieved. + Selects between observations, images or fields. + Examples for fields: Analysis (an), Forecast (fc), + Perturbed Forecast (pf), Control Forecast (cf) and so on. + Default is an empty string. + + levtype : str, optional + Denotes type of level. Has a direct implication on valid + levelist values! + E.g. model level (ml), pressure level (pl), surface (sfc), + potential vorticity (pv), potential temperature (pt) + and depth (dp). + Default is an empty string. + + levelist : str, optional + 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 + Default is an empty string. + + repres : str, optional + Selects the representation of the archived data. + E.g. sh - spherical harmonics, gg - Gaussian grid, + ll - latitude/longitude, ... + Default is an empty string. + + date : str, optional + Specifies the Analysis date, the Forecast base date or + Observations date. Valid formats are: + Absolute as YYYY-MM-DD or YYYYMMDD. + Default is an empty string. + + resol : str, optional + Specifies the desired triangular truncation of retrieved data, + before carrying out any other selected post-processing. + The default is automatic truncation (auto), by which the lowest + resolution compatible with the value specified in grid is + automatically selected for the retrieval. + Users wanting to perform post-processing from full spectral + resolution should specify Archived Value (av). + The following are examples of existing resolutions found in + the archive: 63, 106, 159, 213, 255, 319, 399, 511, 799 or 1279. + This keyword has no meaning/effect if the archived data is + not in spherical harmonics representation. + The best selection can be found here: + https://software.ecmwf.int/wiki/display/UDOC/\ + Retrieve#Retrieve-Truncationbeforeinterpolation + Default is an empty string. + + stream : str, optional + Identifies the forecasting system used to generate the data. + E.g. oper (Atmospheric model), enfo (Ensemble forecats), ... + Default is an empty string. + + area : str, optional + Specifies the desired sub-area of data to be extracted. + Areas can be defined to wrap around the globe. + + Latitude values must be given as signed numbers, with: + north latitudes (i.e. north of the equator) + being positive (e.g: 40.5) + south latitutes (i.e. south of the equator) + being negative (e.g: -50.5) + Longtitude values must be given as signed numbers, with: + east longitudes (i.e. east of the 0 degree meridian) + being positive (e.g: 35.0) + west longitudes (i.e. west of the 0 degree meridian) + being negative (e.g: -20.5) + + E.g.: North/West/South/East + Default is an empty string. + + time : str, optional + Specifies the time of the data in hours and minutes. + Valid values depend on the type of data: Analysis time, + Forecast base time or First guess verification time + (all usually at synoptic hours: 00, 06, 12 and 18 ). + Observation time (any combination in hours and minutes is valid, + subject to data availability in the archive). + The syntax is HHMM or HH:MM. If MM is omitted it defaults to 00. + Default is an empty string. + + step : str, optional + Specifies the forecast time step from forecast base time. + Valid values are hours (HH) from forecast base time. It also + specifies the length of the forecast which verifies at + First Guess time. + E.g. 1/3/6-hourly + Default is an empty string. + + expver : str, optional + The version of the dataset. Each experiment is assigned a + unique code (version). Production data is assigned 1 or 2, + and experimental data in Operations 11, 12 ,... + Research or Member State's experiments have a four letter + experiment identifier. + Default is "1". + + number : str, optional + Selects the member in ensemble forecast run. (Only then it + is necessary.) It has a different meaning depending on + the type of data. + E.g. Perturbed Forecasts: specifies the Ensemble forecast member + Default is an empty string. + + accuracy : str, optional + Specifies the number of bits per value to be used in the + generated GRIB coded fields. + A positive integer may be given to specify the preferred number + of bits per packed value. This must not be greater than the + number of bits normally used for a Fortran integer on the + processor handling the request (typically 32 or 64 bit). + Within a compute request the accuracy of the original fields + can be passed to the result field by specifying accuracy=av. + Default is an empty string. + + grid : str, optional + Specifies the output grid which can be either a Gaussian grid + or a Latitude/Longitude grid. MARS requests specifying + grid=av will return the archived model grid. + + Lat/Lon grid: The grid spacing needs to be an integer + fraction of 90 degrees e.g. grid = 0.5/0.5 + + Gaussian grid: specified by a letter denoting the type of + Gaussian grid followed by an integer (the grid number) + representing the number of lines between the Pole and Equator, + e.g. + grid = F160 - full (or regular) Gaussian grid with + 160 latitude lines between the pole and equator + grid = N320 - ECMWF original reduced Gaussian grid with + 320 latitude lines between the pole and equator, + see Reduced Gaussian Grids for grid numbers used at ECMWF + grid = O640 - ECMWF octahedral (reduced) Gaussian grid with + 640 latitude lines between the pole and equator + Default is an empty string. + + gaussian : str, optional + This parameter is deprecated and should no longer be used. + Specifies the desired type of Gaussian grid for the output. + Valid Gaussian grids are quasi-regular (reduced) or regular. + Keyword gaussian can only be specified together with + keyword grid. Gaussian without grid has no effect. + Default is an empty string. + + target : str, optional + Specifies a file into which data is to be written after + retrieval or manipulation. Path names should always be + enclosed in double quotes. The MARS client supports automatic + generation of multiple target files using MARS keywords + enclosed in square brackets [ ]. If the environment variable + MARS_MULTITARGET_STRICT_FORMAT is set to 1 before calling mars, + the keyword values will be used in the filename as shown by + the ecCodes GRIB tool grib_ls -m, e.g. with + MARS_MULTITARGET_STRICT_FORMAT set to 1 the keywords time, + expver and param will be formatted as 0600, 0001 and 129.128 + rather than 600, 1 and 129. + Default is an empty string. + + param : str, optional + Specifies the meteorological parameter. + The list of meteorological parameters in MARS is extensive. + Their availability is directly related to their meteorological + meaning and, therefore, the rest of directives specified + in the MARS request. + Meteorological parameters can be specified by their + GRIB code (param=130), their mnemonic (param=t) or + full name (param=temperature). + The list of parameter should be seperated by a "/"-sign. + E.g. 130/131/133 + Default is an empty string. + + Return + ------ + + ''' + + self.server = server + self.public = public + self.marsclass = marsclass + self.dataset = dataset + self.type = type + self.levtype = levtype + self.levelist = levelist + self.repres = repres + self.date = date + self.resol = resol + self.stream = stream + self.area = area + self.time = time + self.step = step + self.expver = expver + self.number = number + self.accuracy = accuracy + self.grid = grid + self.gaussian = gaussian + self.target = target + self.param = param + + return + + + def display_info(self): + '''Prints all class attributes and their values to the + standard output. + + Parameters + ---------- + + Return + ------ + + ''' + # Get all class attributes and their values as a dictionary + attrs = vars(self).copy() + + # iterate through all attributes and print them + # with their corresponding values + for item in attrs.items(): + if item[0] in ['server', 'public']: + pass + else: + print(item[0] + ': ' + str(item[1])) + + return + + + def print_infodata_csv(self, inputdir, request_number): + '''Write all request parameter in alpabetical order into a "csv" file. + + Parameters + ---------- + inputdir : str + The path where all data from the retrievals are stored. + + request_number : int + Number of mars requests for flux and non-flux data. + + Return + ------ + + ''' + + # Get all class attributes and their values as a dictionary + attrs = vars(self).copy() + del attrs['server'] + del attrs['public'] + + # open a file to store all requests to + with open(os.path.join(inputdir, + _config.FILE_MARS_REQUESTS), 'a') as f: + f.write(str(request_number) + ', ') + f.write(', '.join(str(attrs[key]) + for key in sorted(attrs.keys()))) + f.write('\n') + + return + + def data_retrieve(self): + '''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 + are taken from the defined class attributes. + + Parameters + ---------- + + Return + ------ + + ''' + # Get all class attributes and their values as a dictionary + attrs = vars(self).copy() + + # eliminate unnecessary attributes from the dictionary attrs + del attrs['server'] + del attrs['public'] + + # exchange parameter name for marsclass + mclass = attrs.get('marsclass') + del attrs['marsclass'] + attrs['class'] = mclass + + # prepare target variable as needed for the Web API or CDS API mode + # within the dictionary for full access + # as a single variable for public access + target = attrs.get('target') + if not int(self.public): + del attrs['target'] + print('target: ' + target) + + # find all keys without a value and convert all other values to strings + empty_keys = [] + for key, value in attrs.items(): + if value == '': + empty_keys.append(str(key)) + else: + attrs[key] = str(value) + + # delete all empty parameter from the dictionary + for key in empty_keys: + del attrs[key] + +# attrs['ppengine'] = 'emos' + + # MARS request via Python script + if self.server: + try: + if cds_api and isinstance(self.server, cdsapi.Client): + print('RETRIEVE ERA5 WITH CDS API!') + self.server.retrieve(_config.CDS_DATASET, + attrs, target) + elif ec_api and isinstance(self.server, ecmwfapi.ECMWFDataServer): + print('RETRIEVE PUBLIC DATA (NOT ERA5)!') + self.server.retrieve(attrs) + elif ec_api and isinstance(self.server, ecmwfapi.ECMWFService): + print('EXECUTE NON-PUBLIC RETRIEVAL (NOT ERA5)!') + self.server.execute(attrs, target) + else: + print('ERROR:') + print('No match for Web API instance!') + raise IOError + except Exception as e: + print('\n\nMARS Request failed!') + print(e) + print(traceback.format_exc()) + sys.exit() + + # MARS request via call in shell + else: + request_str = 'ret' + for key, value in attrs.items(): + request_str = request_str + ',' + key + '=' + str(value) + request_str += ',target="' + target + '"' + p = subprocess.Popen(['mars'], #'-e'], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + bufsize=1) + pout = p.communicate(input=request_str.encode())[0] + print(pout.decode()) + + if 'Some errors reported' in pout.decode(): + print('MARS Request failed - please check request') + raise IOError + elif os.stat(target).st_size == 0: + print('MARS Request returned no data - please check request') + raise IOError + + return diff --git a/Source/Python/Classes/UioFiles.py b/Source/Python/Classes/UioFiles.py new file mode 100644 index 0000000000000000000000000000000000000000..0fe9448a9b97d4192688f3ba21e14eb9236235dd --- /dev/null +++ b/Source/Python/Classes/UioFiles.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Anne Fouilloux (University of Oslo) +# +# @Date: October 2014 +# +# @Change History: +# +# November 2015 - Leopold Haimberger (University of Vienna): +# - modified method list_files to work with glob instead of listdir +# - added pattern search in method list_files +# +# February - December 2018 - Anne Philipp (University of Vienna): +# - applied PEP8 style guide +# - added documentation +# - optimisation of method list_files since it didn't work correctly +# for sub directories +# - additional speed up of method list_files +# - modified the class so that it is initiated with a pattern instead +# of suffixes. Gives more precision in selection of files. +# - added delete method +# +# @License: +# (C) Copyright 2014-2019. +# Anne Philipp, Leopold Haimberger +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +#******************************************************************************* + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +import os +import sys +import fnmatch + +# software specific modules from flex_extract +#pylint: disable=wrong-import-position +sys.path.append('../') +from Mods.tools import silent_remove, get_list_as_string +#pylint: enable=wrong-import-position + +# ------------------------------------------------------------------------------ +# CLASS +# ------------------------------------------------------------------------------ + +class UioFiles(object): + """Collection of files matching a specific pattern. + + 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. + + Attributes + ---------- + path : str + Directory where to list the files. + + pattern : str + Regular expression pattern. For example: '*.grb' + + files : list of str + List of files matching the pattern in the path. + """ + # -------------------------------------------------------------------------- + # CLASS METHODS + # -------------------------------------------------------------------------- + def __init__(self, path, pattern): + """Assignes a specific pattern for these files. + + Parameters + ---------- + path : str + Directory where to list the files. + + pattern : str + Regular expression pattern. For example: '*.grb' + + Return + ------ + + """ + + self.path = path + self.pattern = pattern + self.files = [] + + self._list_files(self.path) + + return + + + def _list_files(self, path): + """Lists all files in the directory with the matching + regular expression pattern. + + Parameters + ---------- + path : str + Path to the files. + + Return + ------ + + """ + # Get the absolute path + path = os.path.abspath(path) + + # get all files in the dir and subdir as absolut path + # pylint: disable=W0612 + for root, dirnames, filenames in os.walk(path): + for filename in fnmatch.filter(filenames, self.pattern): + self.files.append(os.path.join(root, filename)) + + return + + + def __str__(self): + """Converts the list of files into a single string. + The entries are sepereated by "," sign. + + Parameters + ---------- + + Return + ------ + files_string : str + The content of the list as a single string. + """ + + filenames = [os.path.basename(f) for f in self.files] + files_string = get_list_as_string(filenames, concatenate_sign=', ') + + return files_string + + + def delete_files(self): + """Deletes the files. + + Parameters + ---------- + + Return + ------ + + """ + + for old_file in self.files: + silent_remove(old_file) + + return diff --git a/Source/Python/Classes/__init__.py b/Source/Python/Classes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c44e32301dd7d73dac05abfef800984e01266407 --- /dev/null +++ b/Source/Python/Classes/__init__.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Anne Philipp (University of Vienna) +# +# @Date: September 2018 +# +# @License: +# (C) Copyright 2015-2018. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +#******************************************************************************* diff --git a/Source/Python/Mods/__init__.py b/Source/Python/Mods/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c44e32301dd7d73dac05abfef800984e01266407 --- /dev/null +++ b/Source/Python/Mods/__init__.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Anne Philipp (University of Vienna) +# +# @Date: September 2018 +# +# @License: +# (C) Copyright 2015-2018. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +#******************************************************************************* diff --git a/Source/Python/Mods/checks.py b/Source/Python/Mods/checks.py new file mode 100644 index 0000000000000000000000000000000000000000..e9bc5e01d57c2cc452df443789b4b0c65670da9f --- /dev/null +++ b/Source/Python/Mods/checks.py @@ -0,0 +1,882 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Anne Philipp (University of Vienna) +# +# @Date: November 2018 +# +# @Change History: +# +# @License: +# (C) Copyright 2014-2019. +# Anne Philipp, Leopold Haimberger +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +#******************************************************************************* +'''This module contains check methods for the CONTROL paramaters. +''' + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ + +from __future__ import print_function +import os +import sys +from datetime import datetime +# pylint: disable=unused-import +try: + import exceptions +except ImportError: + import builtins as exceptions +# pylint: enable=unused-import + +# software specific classes and modules from flex_extract +import _config +from Mods.tools import my_error, silent_remove +# ------------------------------------------------------------------------------ +# FUNCTIONS +# ------------------------------------------------------------------------------ + +def check_logicals_type(c, logicals): + '''Check that the logical variables have correct type integer. + + Parameters + ---------- + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + logicals : list of (str or int) + Names of the switches that are used to control the flow of the + program. + + Return + ------ + + ''' + + for var in logicals: + if not isinstance(getattr(c, var), int): + setattr(c, var, int(getattr(c, var))) + + return + +def check_grid(grid): + '''Convert grid into correct Lat/Lon format. E.g. '0.5/0.5' + + 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. + + Parameters + ---------- + grid : str + Contains grid information + + Return + ------ + grid : str + Contains grid in format Lat/lon. E.g. 0.1/0.1 + ''' + + if 'N' in grid: + return grid + if '/' in grid: + gridx, gridy = grid.split('/') + if gridx == gridy: + grid = gridx + else: + raise ValueError('GRID parameter contains two ' + 'different values: %s' (grid)) + # # determine grid format + # if float(grid) / 100. >= 0.5: + # # grid is defined in 1/1000 degrees; old format + # grid = '{}/{}'.format(float(grid) / 1000., + # float(grid) / 1000.) + # elif float(grid) / 100. < 0.5: + # # grid is defined in normal degree; new format + # grid = '{}/{}'.format(float(grid), float(grid)) + + + # determine grid format + # assumes that nobody wants grid spacings of 20 deg or more + if float(grid) >= 20.: + # grid is defined in 1/1000 degree; old format + grid = '{}/{}'.format(float(grid) / 1000., float(grid) / 1000.) + else: + # grid is defined in degree; new format + grid = '{}/{}'.format(float(grid), float(grid)) + + + return grid + +def check_area(grid, area, upper, lower, left, right): + '''Defines the correct area string. + + 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 + 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. + + Parameters + ---------- + grid : str + Contains grid information. + + area : str + Contains area informtion. + + upper : str + The northern most latitude. + + lower : str + The souther most latitude. + + left : str + The western most longitude. + + right : str + The eastern most longiude. + + Return + ------ + grid : str + Contains grid in format Lat/lon. E.g. 0.1/0.1 + ''' + if 'N' in grid: # Gaussian output grid + area = 'G' + return area + + # if area was provided decompose area into its 4 components + if area: + components = area.split('/') + upper, left, lower, right = components + + # determine area format + if all([(abs(float(upper) / 10000.) >= 0.01 or float(upper) / 1000. == 0.), + (abs(float(lower) / 10000.) >= 0.01 or float(lower) / 1000. == 0.), + (abs(float(left) / 10000.) >= 0.01 or float(left) / 1000. == 0.), + (abs(float(right) / 10000.) >= 0.01 or float(right) / 1000. == 0.)]): + # area is defined in 1/1000 degrees; old format + area = '{}/{}/{}/{}'.format(float(upper) / 1000., + float(left) / 1000., + float(lower) / 1000., + float(right) / 1000.) + elif all([abs(float(upper) / 10000.) < 0.05, + abs(float(lower) / 10000.) < 0.05, + abs(float(left) / 10000.) < 0.05, + abs(float(right) / 10000.) < 0.05]): + # area is already in new format + area = '{}/{}/{}/{}'.format(float(upper), + float(left), + float(lower), + float(right)) + else: + raise ValueError('The area components have different ' + 'formats (upper, lower, left, right): ' + '{}/{}/{}/{}'.format(str(upper), str(lower), + str(left), str(right))) + + return area + +def check_levels(levelist, level): + '''Defines correct level list and guarantees that the maximum level is + one of the available maximum levels. + + Parameters + ---------- + levelist : str + Specifies the level list. + Examples: model level: 1/to/137, pressure levels: 500/to/1000 + + level : str + Specifies the maximum level. + + Return + ------ + levelist : str + 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 + + level : str + 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] + + ''' + # assure consistency of levelist and level + if not levelist and not level: + raise ValueError('ERROR: neither levelist nor level ' + 'specified in CONTROL file') + elif not levelist and level: + levelist = '1/to/' + level + elif (levelist and not level) or \ + (levelist[-1] != level[-1]): + level = levelist.split('/')[-1] + else: + pass + + # check if max level is a valid level + if int(level) not in _config.MAX_LEVEL_LIST: + raise ValueError('ERROR: \n' + 'LEVEL must be the maximum level of a specified ' + 'level list from ECMWF, e.g. {} \n' + 'Check parameter "LEVEL" or the max level of ' + '"LEVELIST"!'.format(str(_config.MAX_LEVEL_LIST))) + + return levelist, level + + +def check_ppid(c, ppid): + '''Sets the current PPID. + + Parameters + ---------- + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + ppid : int or None + Contains the ppid number provided by the command line parameter + of is None otherwise. + + Return + ------ + + ''' + + if not ppid: + c.ppid = str(os.getppid()) + else: + c.ppid = ppid + + return + + +def check_purefc(ftype): + '''Check for a pure forecast mode. + + Parameters + ---------- + ftype : list of str + List of field types. + + Return + ------ + True or False: + True if pure forecasts are to be retrieved. False if there are + analysis fields in between. + ''' + + if 'AN' not in ftype and '4V' not in ftype: + # pure forecast + return 1 + + return 0 + + +def check_step(step): + '''Checks on step format and convert into a list of steps. + + 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. + + Parameters + ---------- + step : list of str or str + Specifies the forecast time step from forecast base time. + Valid values are hours (HH) from forecast base time. + + Return + ------ + step : list of str + List of forecast steps in format e.g. [001, 002, ...] + ''' + import numpy as np + + if '/' in step: + steps = step.split('/') + if 'to' in step.lower() and 'by' in step.lower(): + ilist = np.arange(int(steps[0]), + int(steps[2]) + 1, + int(steps[4])) + step = ['{:0>3}'.format(i) for i in ilist] + elif 'to' in step.lower() and 'by' not in step.lower(): + my_error(step + ':\n' + + 'if "to" is used in steps parameter, ' + 'please use "by" as well') + else: + step = steps + + if not isinstance(step, list): + step = [step] + + return step + +def check_type(ftype, steps): + '''Check if type variable is of type list and if analysis field has + forecast step 0. + + Parameters + ---------- + ftype : list of str or str + List of field types. + + steps : str + Specifies the forecast time step from forecast base time. + Valid values are hours (HH) from forecast base time. + + Return + ------ + ftype : list of str + List of field types. + ''' + if not isinstance(ftype, list): + ftype = [ftype] + + for i, val in enumerate(ftype): + if ftype[i] == 'AN' and int(steps[i]) != 0: + print('Analysis retrievals must have STEP = 0 (now set to 0)') + ftype[i] = 0 + + return ftype + +def check_time(ftime): + '''Check if time variable is of type list. Otherwise convert to list. + + Parameters + ---------- + ftime : list of str or str + The time in hours of the field. + + Return + ------ + ftime : list of str + The time in hours of the field. + ''' + if not isinstance(ftime, list): + ftime = [ftime] + + return ftime + +def check_len_type_time_step(ftype, ftime, steps, maxstep, purefc): + '''Check if + + Parameters + ---------- + ftype : list of str + List of field types. + + ftime : list of str or str + The time in hours of the field. + + steps : str + Specifies the forecast time step from forecast base time. + Valid values are hours (HH) from forecast base time. + + maxstep : int + The maximum forecast time step in hours from the forecast base time. + This is the maximum step for non flux (accumulated) forecast data. + + purefc : int + Switch for definition of pure forecast mode or not. + + Return + ------ + ftype : list of str + List of field types. + + ftime : list of str + The time in hours of the field. + + steps : str + Specifies the forecast time step from forecast base time. + Valid values are hours (HH) from forecast base time. + ''' + if not len(ftype) == len(ftime) == len(steps): + raise ValueError('ERROR: The number of field types, times and steps ' + 'are not the same! Please check the setting in the ' + 'CONTROL file!') + + # if pure forecast is selected and only one field type/time is set + # prepare a complete list of type/time/step combination upto maxstep + if len(ftype) == 1 and purefc: + nftype = [] + nsteps = [] + nftime = [] + for i in range(0, maxstep + 1): + nftype.append(ftype[0]) + nsteps.append('{:0>3}'.format(i)) + nftime.append(ftime[0]) + return nftype, nftime, nsteps + + return ftype, ftime, steps + +def check_mail(mail): + '''Check the string of mail addresses, seperate them and convert to a list. + + Parameters + ---------- + mail : list of str or str + 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. + + Return + ------ + mail : list of str + 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. + + ''' + if not isinstance(mail, list): + if ',' in mail: + mail = mail.split(',') + elif ' ' in mail: + mail = mail.split() + else: + mail = [mail] + + return mail + +def check_queue(queue, gateway, destination, ecuid, ecgid): + '''Check if the necessary ECMWF parameters are set if the queue is + one of the QUEUES_LIST (in _config). + + Parameters + ---------- + queue : str + 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. + + gateway : str + The address of the gateway server. + + destination : str + The name of the destination of the gateway server for data + transfer through ectrans. E.g. name@genericSftp + + ecuid : str + ECMWF user id. + + ecgid : str + ECMWF group id. + + Return + ------ + + ''' + if queue in _config.QUEUES_LIST and \ + (not gateway or not destination or + not ecuid or not ecgid): + raise ValueError('\nEnvironment variables GATEWAY, DESTINATION, ECUID ' + 'and ECGID were not set properly! \n ' + 'Please check for existence of file "ECMWF_ENV" ' + 'in the run directory!') + return + +def check_pathes(idir, odir, fpdir, fedir): + '''Check if output and flexpart pathes are set. + + Parameters + ---------- + idir : str + Path to the temporary directory for MARS retrieval data. + + odir : str + Path to the final output directory where the FLEXPART input files + will be stored. + + fpdir : str + Path to FLEXPART root directory. + + fedir : str + Path to flex_extract root directory. + + Return + ------ + odir : str + Path to the final output directory where the FLEXPART input files + will be stored. + + fpdir : str + Path to FLEXPART root directory. + + ''' + if not fpdir: + fpdir = fedir + + if not odir: + odir = idir + + return odir, fpdir + +def check_dates(start, end): + '''Checks if there is at least a start date for a one day retrieval. + + Checks if end date lies after start date and end date is set. + + Parameters + ---------- + start : str + The start date of the retrieval job. + + end : str + The end date of the retrieval job. + + Return + ------ + start : str + The start date of the retrieval job. + + end : str + The end date of the retrieval job. + + ''' + # check for having at least a starting date + # otherwise program is not allowed to run + if not start: + raise ValueError('start_date was neither specified in command line nor ' + 'in CONTROL file.\n' + 'Try "{} -h" to print usage information' + .format(sys.argv[0].split('/')[-1])) + + # retrieve just one day if end_date isn't set + if not end: + end = start + + dstart = datetime.strptime(start, '%Y%m%d') + dend = datetime.strptime(end, '%Y%m%d') + if dstart > dend: + raise ValueError('ERROR: Start date is after end date! \n' + 'Please adapt the dates in CONTROL file or ' + 'command line! (start={}; end={})'.format(start, end)) + + return start, end + +def check_maxstep(maxstep, steps): + '''Convert maxstep into integer if it is already given. Otherwise, select + maxstep by going through the steps list. + + Parameters + ---------- + maxstep : str + The maximum forecast time step in hours from the forecast base time. + This is the maximum step for non flux (accumulated) forecast data. + + steps : str + Specifies the forecast time step from forecast base time. + Valid values are hours (HH) from forecast base time. + + Return + ------ + maxstep : int + The maximum forecast time step in hours from the forecast base time. + This is the maximum step for non flux (accumulated) forecast data. + + ''' + # if maxstep wasn't provided + # search for it in the "step" parameter + if not maxstep: + maxstep = 0 + for s in steps: + if int(s) > maxstep: + maxstep = int(s) + else: + maxstep = int(maxstep) + + return maxstep + +def check_basetime(basetime): + '''Check if basetime is set and contains one of the two + possible values (0, 12). + + Parameters + ---------- + basetime : int or str or None + The time for a half day retrieval. The 12 hours upfront are to be + retrieved. + + Return + ------ + basetime : int or None + The time for a half day retrieval. The 12 hours upfront are to be + retrieved. + ''' + if basetime is not None: + basetime = int(basetime) + if basetime != 0 and basetime != 12: + raise ValueError('ERROR: Basetime has an invalid value ' + '-> {}'.format(str(basetime))) + return basetime + +def check_request(request, marsfile): + '''Check if there is an old mars request file and remove it. + + Parameters + ---------- + request : int + 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. + + marsfile : str + Path to the mars request file. + + Return + ------ + + ''' + if request != 0: + if os.path.isfile(marsfile): + silent_remove(marsfile) + return + +def check_public(public, dataset): + '''Check wether the dataset parameter is set for a + public data set retrieval. + + Parameters + ---------- + public : int + Specifies if public data are to be retrieved or not. + + dataset : str + Specific name which identifies the public dataset. + + Return + ------ + + ''' + if public and not dataset: + raise ValueError('ERROR: If public mars data wants to be retrieved, ' + 'the "dataset"-parameter has to be set too!') + return + +def check_acctype(acctype, ftype): + '''Guarantees that the accumulation field type is set. + + If not set, it is derivated as in the old method (TYPE[1]). + + Parameters + ---------- + acctype : str + The field type for the accumulated forecast fields. + + ftype : list of str + List of field types. + + Return + ------ + acctype : str + The field type for the accumulated forecast fields. + ''' + if not acctype: + print('... Control parameter ACCTYPE was not defined.') + try: + if len(ftype) == 1 and ftype[0] != 'AN': + print('... Use same field type as for the non-flux fields.') + acctype = ftype[0] + elif len(ftype) > 1 and ftype[1] != 'AN': + print('... Use old setting by using TYPE[1] for flux forecast!') + acctype = ftype[1] + except: + raise ValueError('ERROR: Accumulation field type could not be set!') + else: + if acctype.upper() == 'AN': + raise ValueError('ERROR: Accumulation forecast fields can not be ' + 'of type "analysis"!') + return acctype + + +def check_acctime(acctime, marsclass, purefc, time): + '''Guarantees that the accumulation forecast times were set. + + 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. + + Parameters + ---------- + acctime : str + The starting time from the accumulated forecasts. + + marsclass : str + ECMWF data classification identifier. + + purefc : int + Switch for definition of pure forecast mode or not. + + Return + ------ + acctime : str + The starting time from the accumulated forecasts. + ''' + + if not acctime: + print('... Control parameter ACCTIME was not defined.') + print('... Value will be set depending on field type:\n ' + '\t\t EA=06/18\n\t\t EI/OD=00/12\n\t\t EP=18') + if marsclass.upper() == 'EA': # Era 5 + acctime = '06/18' + elif marsclass.upper() == 'EI': # Era-Interim + acctime = '00/12' + elif marsclass.upper() == 'EP': # CERA + acctime = '18' + elif marsclass.upper() == 'OD' and not purefc: # On-demand + acctime = '00/12' + elif marsclass.upper() == 'OD' and purefc: # On-demand + acctime = time[0] + else: + raise ValueError('ERROR: Accumulation forecast time can not ' + 'automatically be derived!') + return acctime + +def check_accmaxstep(accmaxstep, marsclass, purefc, maxstep): + '''Guarantees that the accumulation forecast step were set. + + Parameters + ---------- + accmaxstep : str + The maximum forecast step for the accumulated forecast fields. + + marsclass : str + ECMWF data classification identifier. + + purefc : int + Switch for definition of pure forecast mode or not. + + maxstep : str + The maximum forecast time step in hours from the forecast base time. + This is the maximum step for non flux (accumulated) forecast data. + + Return + ------ + accmaxstep : str + The maximum forecast step for the accumulated forecast fields. + ''' + if not accmaxstep: + print('... Control parameter ACCMAXSTEP was not defined.') + print('... Value will be set depending on field type/time: ' + '\n\t\t EA/EI/OD=12\n\t\t EP=24') + if marsclass.upper() in ['EA', 'EI', 'OD'] and not purefc: + # Era 5, Era-Interim, On-demand operational + accmaxstep = '12' + elif marsclass.upper() == 'EP': # CERA + accmaxstep = '24' + elif purefc and accmaxstep != maxstep: + accmaxstep = maxstep + print('... For pure forecast mode, the accumulated forecast must ' + 'have the same maxstep as the normal forecast fields!\n' + '\t\t Accmaxstep was set to maxstep!') + else: + raise ValueError('ERROR: Accumulation forecast step can not ' + 'automatically be derived!') + else: + if purefc and int(accmaxstep) != int(maxstep): + accmaxstep = maxstep + print('... For pure forecast mode, the accumulated forecast must ' + 'have the same maxstep as the normal forecast fields!\n' + '\t\t Accmaxstep was set to maxstep!') + return accmaxstep + +def check_addpar(addpar): + '''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. + + Parameters + ---------- + addpar : str or list of str + List of additional parameters to be retrieved. + + Return + ------ + addpar : str + List of additional parameters to be retrieved. + ''' + + if addpar and isinstance(addpar, str): + if '/' in addpar: + parlist = addpar.split('/') + parlist = [p for p in parlist if p is not ''] + else: + parlist = [addpar] + + addpar = '/' + '/'.join(parlist) + + return addpar + + +def check_job_chunk(job_chunk): + '''Checks that if job chunk is set, the number is positive and non zero. + + Parameters + ---------- + job_chunk : int + The number of days for a single job script. + + Return + ------ + job_chunk : int + The number of days for a single job script. + ''' + if not job_chunk: + return job_chunk + else: + job_chunk = int(job_chunk) + + if job_chunk < 0: + raise ValueError('ERROR: The number of job chunk is negative!\n' + 'It has to be a positive number!') + elif job_chunk == 0: + job_chunk = None + else: + pass + + return job_chunk + + +def check_number(number): + '''Check for correct string format of ensemble member numbers. + + Parameters + ---------- + number : str + List of ensemble member forecast runs. + + Return + ------ + number : str + String with list of ensemble member forecast runs. E.g. '01/02/03/04' + ''' + + if '/' in number: + numbers = number.split('/') + if 'to' in number.lower() and 'by' in number.lower(): + number = '{:0>3}'.format(int(numbers[0])) + '/TO/' + \ + '{:0>3}'.format(int(numbers[2])) + '/BY/' + \ + '{:0>3}'.format(int(numbers[4])) + elif 'to' in number.lower() and 'by' not in number.lower(): + number = '{:0>3}'.format(int(numbers[0])) + '/TO/' + \ + '{:0>3}'.format(int(numbers[2])) + else: + numbers = ['{:0>3}'.format(i) for i in numbers] + number = '{:0>3}/'.join(numbers) + elif number.isdigit(): + number = '{:0>3}'.format(int(number)) + else: + pass + + return number diff --git a/Source/Python/Mods/disaggregation.py b/Source/Python/Mods/disaggregation.py new file mode 100644 index 0000000000000000000000000000000000000000..5a3561928bd4a6e5b0c90ab44a1f28a13c3264c7 --- /dev/null +++ b/Source/Python/Mods/disaggregation.py @@ -0,0 +1,418 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Anne Philipp (University of Vienna) +# +# @Date: March 2018 +# +# @Change History: +# +# November 2015 - Leopold Haimberger (University of Vienna): +# - migration of the methods dapoly and darain from Fortran +# (flex_extract_v6 and earlier) to Python +# +# April 2018 - Anne Philipp (University of Vienna): +# - applied PEP8 style guide +# - added structured documentation +# - outsourced the disaggregation functions dapoly and darain +# to a new module named disaggregation +# - added the new disaggregation method for precipitation +# +# @License: +# (C) Copyright 2014-2019. +# Anne Philipp, Leopold Haimberger +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +# +# @Methods: +# - dapoly +# - darain +# - IA3 +#******************************************************************************* +'''Disaggregation of deaccumulated flux data from an ECMWF model FG field. + +Initially the flux data to be concerned are: + - large-scale precipitation + - convective precipitation + - surface sensible heat flux + - surface solar radiation + - u stress + - v stress + +Different versions of disaggregation is provided for rainfall +data (darain, modified linear) and the surface fluxes and +stress data (dapoly, cubic polynomial). +''' + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ + +# ------------------------------------------------------------------------------ +# FUNCTIONS +# ------------------------------------------------------------------------------ +def dapoly(alist): + """Cubic polynomial interpolation of deaccumulated fluxes. + + Interpolation of deaccumulated fluxes of an ECMWF model FG field + using a cubic polynomial solution which conserves the integrals + of the fluxes within each timespan. + 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. + + Parameters + ---------- + alist : list of array of float + List of 4 timespans as 2-dimensional, horizontal fields. + E.g. [[array_t1], [array_t2], [array_t3], [array_t4]] + + Return + ------ + nfield : array of float + Interpolated flux at central point of accumulation timespan. + + Note + ---- + March 2000 : P. JAMES + Original author + + June 2003 : A. BECK + Adaptations + + November 2015 : Leopold Haimberger (University of Vienna) + Migration from Fortran to Python + + """ + + pya = (alist[3] - alist[0] + 3. * (alist[1] - alist[2])) / 6. + pyb = (alist[2] + alist[0]) / 2. - alist[1] - 9. * pya / 2. + pyc = alist[1] - alist[0] - 7. * pya / 2. - 2. * pyb + pyd = alist[0] - pya / 4. - pyb / 3. - pyc / 2. + nfield = 8. * pya + 4. * pyb + 2. * pyc + pyd + + return nfield + + +def darain(alist): + """Linear interpolation of deaccumulated fluxes. + + Interpolation of deaccumulated fluxes of an ECMWF model FG rainfall + field using a modified linear solution which conserves the integrals + of the fluxes within each timespan. + 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. + + Parameters + ---------- + alist : list of array of float + List of 4 timespans as 2-dimensional, horizontal fields. + E.g. [[array_t1], [array_t2], [array_t3], [array_t4]] + + Return + ------ + nfield : array of float + Interpolated flux at central point of accumulation timespan. + + Note + ---- + March 2000 : P. JAMES + Original author + + June 2003 : A. BECK + Adaptations + + November 2015 : Leopold Haimberger (University of Vienna) + Migration from Fortran to Python + """ + + xa = alist[0] + xb = alist[1] + xc = alist[2] + xd = alist[3] + xa[xa < 0.] = 0. + xb[xb < 0.] = 0. + xc[xc < 0.] = 0. + xd[xd < 0.] = 0. + + xac = 0.5 * xb + mask = xa + xc > 0. + xac[mask] = xb[mask] * xc[mask] / (xa[mask] + xc[mask]) + xbd = 0.5 * xc + mask = xb + xd > 0. + xbd[mask] = xb[mask] * xc[mask] / (xb[mask] + xd[mask]) + nfield = xac + xbd + + return nfield + +def IA3(g): + """ Interpolation with a non-negative geometric mean based algorithm. + + The original grid is reconstructed by adding two sampling points in each + data series interval. This subgrid is used to keep all information during + the interpolation within the associated interval. Additionally, an advanced + monotonicity filter is applied to improve the monotonicity properties of + the series. + + Note + ---- + (C) Copyright 2017-2019 + Sabine Hittmeir, Anne Philipp, Petra Seibert + + This work is licensed under the Creative Commons Attribution 4.0 + International License. To view a copy of this license, visit + http://creativecommons.org/licenses/by/4.0/ or send a letter to + Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. + + Parameters + ---------- + g : list of float + Complete data series that will be interpolated having + the dimension of the original raw series. + + Return + ------ + f : list of float + The interpolated data series with additional subgrid points. + Its dimension is equal to the length of the input data series + times three. + + + References + ---------- + 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 + """ + + ####################### variable description ############################# + # # + # i - index variable for looping over the data series # + # g - input data series # + # f - interpolated and filtered data series with additional # + # grid points # + # fi - function value at position i, f_i # + # fi1 - first sub-grid function value f_i^1 # + # fi2 - second sub-grid function value f_i^2 # + # fip1 - next function value at position i+1, f_(i+1) # + # dt - time step # + # fmon - monotonicity filter # + # # + ########################################################################### + + + import numpy as np + + # time step + dt = 1.0 + + ############### Non-negative Geometric Mean Based Algorithm ############### + + # for the left boundary the following boundary condition is valid: + # the value at t=0 of the interpolation algorithm coincides with the + # first data value according to the persistence hypothesis + f = [g[0]] + + # compute two first sub-grid intervals without monotonicity check + # go through the data series and extend each interval by two sub-grid + # points and interpolate the corresponding data values + # except for the last interval due to boundary conditions + for i in range(0, 2): + + # as a requirement: + # if there is a zero data value such that g[i]=0, then the whole + # interval in f has to be zero to such that f[i+1]=f[i+2]=f[i+3]=0 + # according to Eq. (6) + if g[i] == 0.: + f.extend([0., 0., 0.]) + + # otherwise the sub-grid values are calculated and added to the list + else: + # temporal save of last value in interpolated list + # since it is the left boundary and hence the new (fi) value + fi = f[-1] + + # the value at the end of the interval (fip1) is prescribed by the + # geometric mean, restricted such that non-negativity is guaranteed + # according to Eq. (25) + fip1 = min(3. * g[i], 3. * g[i + 1], np.sqrt(g[i + 1] * g[i])) + + # the function value at the first sub-grid point (fi1) is determined + # according to the equal area condition with Eq. (19) + fi1 = 3./2.*g[i]-5./12.*fip1-1./12.*fi + + # the function value at the second sub-grid point (fi2) is determined + # according Eq. (18) + fi2 = fi1+1./3.*(fip1-fi) + + # add next interval of interpolated (sub-)grid values + f.append(fi1) + f.append(fi2) + f.append(fip1) + + # compute rest of the data series intervals + # go through the data series and extend each interval by two sub-grid + # points and interpolate the corresponding data values + # except for the last interval due to boundary conditions + for i in range(2, len(g)-1): + + # as a requirement: + # if there is a zero data value such that g[i]=0, then the whole + # interval in f has to be zero to such that f[i+1]=f[i+2]=f[i+3]=0 + # according to Eq. (6) + if g[i] == 0.: + # apply monotonicity filter for interval before + # check if there is "M" or "W" shape + if np.sign(f[-5]-f[-6]) * np.sign(f[-4]-f[-5]) == -1 \ + and np.sign(f[-4]-f[-5]) * np.sign(f[-3]-f[-4]) == -1 \ + and np.sign(f[-3]-f[-4]) * np.sign(f[-2]-f[-3]) == -1: + + # the monotonicity filter corrects the value at (fim1) by + # substituting (fim1) with (fmon), see Eq. (27), (28) and (29) + fmon = min(3. * g[i - 2], + 3. * g[i - 1], + np.sqrt(max(0, (18. / 13. * g[i - 2] - 5. / 13. * f[-7]) * + (18. / 13. * g[i - 1] - 5. / 13. * f[-1])))) + + # recomputation of the sub-grid interval values while the + # interval boundaries (fi) and (fip2) remains unchanged + # see Eq. (18) and (19) + f[-4] = fmon + f[-6] = 3./2.*g[i-2]-5./12.*fmon-1./12.*f[-7] + f[-5] = f[-6]+(fmon-f[-7])/3. + f[-3] = 3./2.*g[i-1]-5./12.*f[-1]-1./12.*fmon + f[-2] = f[-3]+(f[-1]-fmon)/3. + + f.extend([0., 0., 0.]) + + # otherwise the sub-grid values are calculated and added to the list + else: + # temporal save of last value in interpolated list + # since it is the left boundary and hence the new (fi) value + fi = f[-1] + + # the value at the end of the interval (fip1) is prescribed by the + # geometric mean, restricted such that non-negativity is guaranteed + # according to Eq. (25) + fip1 = min(3. * g[i], 3. * g[i + 1], np.sqrt(g[i + 1] * g[i])) + + # the function value at the first sub-grid point (fi1) is determined + # according to the equal area condition with Eq. (19) + fi1 = 3./2.*g[i]-5./12.*fip1-1./12.*fi + + # the function value at the second sub-grid point (fi2) is determined + # according Eq. (18) + fi2 = fi1+1./3.*(fip1-fi) + + # apply monotonicity filter for interval before + # check if there is "M" or "W" shape + if np.sign(f[-5]-f[-6]) * np.sign(f[-4]-f[-5]) == -1 \ + and np.sign(f[-4]-f[-5]) * np.sign(f[-3]-f[-4]) == -1 \ + and np.sign(f[-3]-f[-4]) * np.sign(f[-2]-f[-3]) == -1: + + # the monotonicity filter corrects the value at (fim1) by + # substituting (fim1) with fmon, see Eq. (27), (28) and (29) + fmon = min(3. * g[i - 2], + 3. * g[i - 1], + np.sqrt(max(0, (18. / 13. * g[i - 2] - 5. / 13. * f[-7]) * + (18. / 13. * g[i - 1] - 5. / 13. * f[-1])))) + + # recomputation of the sub-grid interval values while the + # interval boundaries (fi) and (fip2) remains unchanged + # see Eq. (18) and (19) + f[-4] = fmon + f[-6] = 3./2.*g[i-2]-5./12.*fmon-1./12.*f[-7] + f[-5] = f[-6]+(fmon-f[-7])/3. + f[-3] = 3./2.*g[i-1]-5./12.*f[-1]-1./12.*fmon + f[-2] = f[-3]+(f[-1]-fmon)/3. + + # add next interval of interpolated (sub-)grid values + f.append(fi1) + f.append(fi2) + f.append(fip1) + + # separate treatment of the final interval + + # as a requirement: + # if there is a zero data value such that g[i]=0, then the whole + # interval in f has to be zero to such that f[i+1]=f[i+2]=f[i+3]=0 + # according to Eq. (6) + if g[-1] == 0.: + # apply monotonicity filter for interval before + # check if there is "M" or "W" shape + if np.sign(f[-5]-f[-6]) * np.sign(f[-4]-f[-5]) == -1 \ + and np.sign(f[-4]-f[-5]) * np.sign(f[-3]-f[-4]) == -1 \ + and np.sign(f[-3]-f[-4]) * np.sign(f[-2]-f[-3]) == -1: + + # the monotonicity filter corrects the value at (fim1) by + # substituting (fim1) with (fmon), see Eq. (27), (28) and (29) + fmon = min(3. * g[-3], + 3. * g[-2], + np.sqrt(max(0, (18. / 13. * g[-3] - 5. / 13. * f[-7]) * + (18. / 13. * g[-2] - 5. / 13. * f[-1])))) + + # recomputation of the sub-grid interval values while the + # interval boundaries (fi) and (fip2) remains unchanged + # see Eq. (18) and (19) + f[-4] = fmon + f[-6] = 3./2.*g[-3]-5./12.*fmon-1./12.*f[-7] + f[-5] = f[-6]+(fmon-f[-7])/3. + f[-3] = 3./2.*g[-2]-5./12.*f[-1]-1./12.*fmon + f[-2] = f[-3]+(f[-1]-fmon)/3. + + f.extend([0., 0., 0.]) + + # otherwise the sub-grid values are calculated and added to the list + # using the persistence hypothesis as boundary condition + else: + # temporal save of last value in interpolated list + # since it is the left boundary and hence the new (fi) value + fi = f[-1] + # since last interval in series, last value is also fip1 + fip1 = g[-1] + # the function value at the first sub-grid point (fi1) is determined + # according to the equal area condition with Eq. (19) + fi1 = 3./2.*g[-1]-5./12.*fip1-1./12.*fi + # the function value at the second sub-grid point (fi2) is determined + # according Eq. (18) + fi2 = fi1+dt/3.*(fip1-fi) + + # apply monotonicity filter for interval before + # check if there is "M" or "W" shape + if np.sign(f[-5]-f[-6]) * np.sign(f[-4]-f[-5]) == -1 \ + and np.sign(f[-4]-f[-5]) * np.sign(f[-3]-f[-4]) == -1 \ + and np.sign(f[-3]-f[-4]) * np.sign(f[-2]-f[-3]) == -1: + + # the monotonicity filter corrects the value at (fim1) by + # substituting (fim1) with (fmon), see Eq. (27), (28) and (29) + fmon = min(3. * g[-3], + 3. * g[-2], + np.sqrt(max(0, (18. / 13. * g[-3] - 5. / 13. * f[-7]) * + (18. / 13. * g[-2] - 5. / 13. * f[-1])))) + + # recomputation of the sub-grid interval values while the + # interval boundaries (fi) and (fip2) remains unchanged + # see Eq. (18) and (19) + f[-4] = fmon + f[-6] = 3./2.*g[-3]-5./12.*fmon-1./12.*f[-7] + f[-5] = f[-6]+(fmon-f[-7])/3. + f[-3] = 3./2.*g[-2]-5./12.*f[-1]-1./12.*fmon + f[-2] = f[-3]+(f[-1]-fmon)/3. + + # add next interval of interpolated (sub-)grid values + f.append(fi1) + f.append(fi2) + f.append(fip1) + + return f diff --git a/Source/Python/Mods/get_mars_data.py b/Source/Python/Mods/get_mars_data.py new file mode 100755 index 0000000000000000000000000000000000000000..ecdb311f8b4cbf3661fa0be9987e36062d135c22 --- /dev/null +++ b/Source/Python/Mods/get_mars_data.py @@ -0,0 +1,394 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Anne Fouilloux (University of Oslo) +# +# @Date: October 2014 +# +# @Change History: +# +# November 2015 - Leopold Haimberger (University of Vienna): +# - moved the getEIdata program into a function "get_mars_data" +# - moved the AgurmentParser into a seperate function +# - adatpted the function for the use in flex_extract +# - renamed file to get_mars_data +# +# February 2018 - Anne Philipp (University of Vienna): +# - applied PEP8 style guide +# - added structured documentation +# - minor changes in programming style for consistence +# - added function main and moved function calls vom __main__ there +# (necessary for better documentation with docstrings for later +# online documentation) +# - use of UIFiles class for file selection and deletion +# - seperated get_mars_data function into several smaller pieces: +# write_reqheader, mk_server, mk_dates, remove_old, do_retrievment +# +# @License: +# (C) Copyright 2014-2019. +# Anne Philipp, Leopold Haimberger +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +#******************************************************************************* +'''This script extracts MARS data from ECMWF servers. + +At first, the necessary parameters from command line and CONTROL files are +extracted. They define the data set to be extracted from MARS. + +This file can also be imported as a module and contains the following +functions: + + * main - the main function of the script + * get_mars_data - overall control of ECMWF data retrievment + * write_reqheader - writes the header into the mars_request file + * mk_server - creates the server connection to ECMWF servers + * mk_dates - defines the start and end date + * remove_old - deletes old retrieved grib files + * do_retrievement - creates individual retrievals + +Type: get_mars_data.py --help +to get information about command line parameters. +Read the documentation for usage instructions. +''' +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +from __future__ import print_function + +import os +import sys +import inspect +from datetime import datetime, timedelta + +# software specific classes and modules from flex_extract +# add path to local main python path for flex_extract to get full access +sys.path.append(os.path.dirname(os.path.abspath( + inspect.getfile(inspect.currentframe()))) + '/../') +# pylint: disable=wrong-import-position +import _config +from Mods.tools import (setup_controldata, my_error, normal_exit, make_dir) +from Classes.EcFlexpart import EcFlexpart +from Classes.UioFiles import UioFiles +from Classes.MarsRetrieval import MarsRetrieval +# pylint: enable=wrong-import-position +# pylint: disable=invalid-name +try: + ec_api = True + import ecmwfapi +except ImportError: + ec_api = False + +try: + cds_api = True + import cdsapi +except ImportError: + cds_api = False +# pylint: enable=invalid-name +# ------------------------------------------------------------------------------ +# FUNCTION +# ------------------------------------------------------------------------------ +def main(): + '''Controls the program to get data out of mars. + + This is done if it is called directly from command line. + Then it also takes program call arguments and control file input. + + Parameters + ---------- + + Return + ------ + + ''' + + c, _, _, _ = setup_controldata() + get_mars_data(c) + normal_exit('Retrieving MARS data: Done!') + + return + +def get_mars_data(c): + '''Retrieves the EC data needed for a FLEXPART simulation. + + Start and end dates for retrieval period is set. Retrievals + are divided into smaller periods if necessary and datechunk parameter + is set. + + Parameters + ---------- + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + Return + ------ + + ''' + c.ec_api = ec_api + c.cds_api = cds_api + + if not os.path.exists(c.inputdir): + make_dir(c.inputdir) + + if c.request == 0: + print("Retrieving EC data!") + else: + if c.request == 1: + print("Printing mars requests!") + elif c.request == 2: + print("Retrieving EC data and printing mars request!") + write_reqheader(os.path.join(c.inputdir, _config.FILE_MARS_REQUESTS)) + + print("start date %s " % (c.start_date)) + print("end date %s " % (c.end_date)) + + server = mk_server(c) + + # if data are to be retrieved, clean up any old grib files + if c.request == 0 or c.request == 2: + remove_old('*grb', c.inputdir) + + # -------------- flux data ------------------------------------------------ + start, end, datechunk = mk_dates(c, fluxes=True) + do_retrievement(c, server, start, end, datechunk, fluxes=True) + + # -------------- non flux data -------------------------------------------- + start, end, datechunk = mk_dates(c, fluxes=False) + do_retrievement(c, server, start, end, datechunk, fluxes=False) + + return + +def write_reqheader(marsfile): + '''Writes header with column names into mars request file. + + Parameters + ---------- + marsfile : str + Path to the mars request file. + + Return + ------ + + ''' + MR = MarsRetrieval(None, None) + attrs = vars(MR).copy() + del attrs['server'] + del attrs['public'] + with open(marsfile, 'w') as f: + f.write('request_number' + ', ') + f.write(', '.join(str(key) for key in sorted(attrs.keys()))) + f.write('\n') + + return + +def mk_server(c): + '''Creates a server connection with available python API. + + 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. + + Parameters + ---------- + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + Return + ------ + server : ECMWFDataServer, ECMWFService or Client + Connection to ECMWF server via python interface ECMWF WebAPI or CDS API. + + ''' + if cds_api and (c.marsclass.upper() == 'EA'): + server = cdsapi.Client() + c.ec_api = False + elif c.ec_api: + if c.public: + server = ecmwfapi.ECMWFDataServer() + else: + server = ecmwfapi.ECMWFService("mars") + c.cds_api = False + else: + server = False + + print('Using ECMWF WebAPI: ' + str(c.ec_api)) + print('Using CDS API: ' + str(c.cds_api)) + + return server + + +def check_dates_for_nonflux_fc_times(types, times): + '''Checks if the time 18UTC corresponds to forecast field. + + Parameters + ---------- + types : list of str + List of field types. + + times : list of str or str + The time in hours of the field. + + Return + ------ + True or False + + ''' + for ty, ti in zip(types, times): + if ty.upper() == 'FC' and int(ti) == 18: + return True + return False + + +def mk_dates(c, fluxes): + '''Prepares start and end date depending on flux or non flux data. + + If forecast for maximum one day (upto 24h) are to be retrieved, then + collect accumulation data (flux data) with additional days in the + beginning and at the end (used for complete disaggregation of + original period) + + If forecast data longer than 24h are to be retrieved, then + collect accumulation data (flux data) with the exact start and end date + (disaggregation will be done for the exact time period with + boundary conditions) + + Since for basetime the extraction contains the 12 hours upfront, + if basetime is 0, the starting date has to be the day before + + Parameters + ---------- + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + fluxes : boolean, optional + Decides if the flux parameter settings are stored or + the rest of the parameter list. + Default value is False. + + Return + ------ + start : datetime + The start date of the retrieving data set. + + end : datetime + The end date of the retrieving data set. + + chunk : datetime + Time period in days for one single mars retrieval. + + ''' + start = datetime.strptime(c.start_date, '%Y%m%d') + end = datetime.strptime(c.end_date, '%Y%m%d') + chunk = timedelta(days=int(c.date_chunk)) + + if c.basetime == 0: + start = start - timedelta(days=1) + + if c.purefc and fluxes and c.maxstep < 24: + start = start - timedelta(days=1) + end = end + timedelta(days=1) + + if not c.purefc and fluxes and not c.basetime == 0: + start = start - timedelta(days=1) + end = end + timedelta(days=1) + + # if we have non-flux forecast data starting at 18 UTC + # we need to start retrieving data one day in advance + if not fluxes and check_dates_for_nonflux_fc_times(c.type, c.time): + start = start - timedelta(days=1) + + return start, end, chunk + +def remove_old(pattern, inputdir): + '''Deletes old retrieval files from current input directory + matching the pattern. + + Parameters + ---------- + pattern : str + The sub string pattern which identifies the files to be deleted. + + inputdir : str, optional + Path to the directory where the retrieved data is stored. + + Return + ------ + + ''' + print('... removing old content of ' + inputdir) + + tobecleaned = UioFiles(inputdir, pattern) + tobecleaned.delete_files() + + return + + +def do_retrievement(c, server, start, end, delta_t, fluxes=False): + '''Divides the complete retrieval period in smaller chunks and + retrieves the data from MARS. + + Parameters + ---------- + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + server : ECMWFService or ECMWFDataServer + The server connection to ECMWF. + + start : datetime + The start date of the retrieval. + + end : datetime + The end date of the retrieval. + + delta_t : datetime + Delta_t + 1 is the maximal time period of a single + retrieval. + + fluxes : boolean, optional + Decides if the flux parameters are to be retrieved or + the rest of the parameter list. + Default value is False. + + Return + ------ + + ''' + + # since actual day also counts as one day, + # we only need to add datechunk - 1 days to retrieval + # for a period + delta_t_m1 = delta_t - timedelta(days=1) + + day = start + while day <= end: + flexpart = EcFlexpart(c, fluxes) + tmpday = day + delta_t_m1 + if tmpday < end: + dates = day.strftime("%Y%m%d") + "/to/" + \ + tmpday.strftime("%Y%m%d") + else: + dates = day.strftime("%Y%m%d") + "/to/" + \ + end.strftime("%Y%m%d") + + print("... retrieve " + dates + " in dir " + c.inputdir) + + try: + flexpart.retrieve(server, dates, c.public, c.request, c.inputdir) + except IOError: + my_error('MARS request failed') + + day += delta_t + + return + +if __name__ == "__main__": + main() diff --git a/Source/Python/Mods/prepare_flexpart.py b/Source/Python/Mods/prepare_flexpart.py new file mode 100755 index 0000000000000000000000000000000000000000..57323245dfadc05b833b2090964a39c6b506dafa --- /dev/null +++ b/Source/Python/Mods/prepare_flexpart.py @@ -0,0 +1,185 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Anne Fouilloux (University of Oslo) +# +# @Date: October 2014 +# +# @Change History: +# +# November 2015 - Leopold Haimberger (University of Vienna): +# - using the WebAPI also for general MARS retrievals +# - job submission on ecgate and cca +# - job templates suitable for twice daily operational dissemination +# - dividing retrievals of longer periods into digestable chunks +# - retrieve also longer term forecasts, not only analyses and +# short term forecast data +# - conversion into GRIB2 +# - conversion into .fp format for faster execution of FLEXPART +# +# February 2018 - Anne Philipp (University of Vienna): +# - applied PEP8 style guide +# - added documentation +# - minor changes in programming style for consistence +# - BUGFIX: removed call of clean_up-Function after call of +# prepareFlexpart in main since it is already called in +# prepareFlexpart at the end! +# - created function main and moved the two function calls for +# arguments and prepare_flexpart into it +# +# @License: +# (C) Copyright 2014-2019. +# Anne Philipp, Leopold Haimberger +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +# ******************************************************************************* +# pylint: disable=ungrouped-imports +# not necessary that we group the imports +'''This script prepares the final version of the grib files which are +then used by FLEXPART. + +It converts the bunch of grib files extracted via get_mars_data before, +by doing the necessary conversion to get consistent grids or the +disaggregation of flux data. Finally, the data fields are combined +in files per available hour with the naming convention xxYYMMDDHH, +where xx should be 2 arbitrary letters (mostly xx is chosen to be "EN"). + +This file can also be imported as a module which then contains the following +functions: + + * main + * prepare_flexpart + +Type: prepare_flexpart.py --help +to get information about command line parameters. +Read the documentation for usage instructions. +''' + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +from __future__ import print_function + +import datetime +import os +import inspect +import sys + +# software specific classes and modules from flex_extract +# add path to local main python path for flex_extract to get full access +sys.path.append(os.path.dirname(os.path.abspath( + inspect.getfile(inspect.currentframe()))) + '/../') +# pylint: disable=wrong-import-position +#import _config +from Mods.checks import check_ppid +from Classes.UioFiles import UioFiles +#from Classes.ControlFile import ControlFile +from Mods.tools import (setup_controldata, clean_up, make_dir, normal_exit) +from Classes.EcFlexpart import EcFlexpart +# pylint: enable=wrong-import-position + +# ------------------------------------------------------------------------------ +# FUNCTION +# ------------------------------------------------------------------------------ +def main(): + '''Controls the program to prepare flexpart input files from mars data. + + This is done if it is called directly from command line. + Then it also takes program call arguments and control file input. + + Parameters + ---------- + + Return + ------ + + ''' + + c, ppid, _, _ = setup_controldata() + prepare_flexpart(ppid, c) + normal_exit('Preparing FLEXPART output files: Done!') + + return + +def prepare_flexpart(ppid, c): + '''Converts the mars data into flexpart ready input files. + + 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. + + Parameters + ---------- + ppid : int + Contains the ppid number of the current ECMWF job. It will be None if + the method was called within this module. + + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + Return + ------ + + ''' + check_ppid(c, ppid) + + # create the start and end date + start = datetime.date(year=int(c.start_date[:4]), + month=int(c.start_date[4:6]), + day=int(c.start_date[6:])) + + end = datetime.date(year=int(c.end_date[:4]), + month=int(c.end_date[4:6]), + day=int(c.end_date[6:])) + + # if basetime is 00 + # assign starting date minus 1 day + # since we need the 12 hours upfront + # (the day before from 12 UTC to current day 00 UTC) + if c.basetime == 0: + start = start - datetime.timedelta(days=1) + + print('Prepare ' + start.strftime("%Y%m%d") + + '/to/' + end.strftime("%Y%m%d")) + + # create output dir if necessary + if not os.path.exists(c.outputdir): + make_dir(c.outputdir) + + # get all files with flux data to be deaccumulated + inputfiles = UioFiles(c.inputdir, '*OG_acc_SL*.' + str(c.ppid) + '.*') + + # deaccumulate the flux data + flexpart = EcFlexpart(c, fluxes=True) + flexpart.write_namelist(c) + flexpart.deacc_fluxes(inputfiles, c) + + # get a list of all other files + inputfiles = UioFiles(c.inputdir, '????__??.*' + str(c.ppid) + '.*') + + # produce FLEXPART-ready GRIB files and process them - + # copy/transfer/interpolate them or make them GRIB2 + flexpart = EcFlexpart(c, fluxes=False) + flexpart.create(inputfiles, c) + if c.stream.lower() == 'elda' and c.doubleelda: + flexpart.calc_extra_elda(c.inputdir, c.prefix) + flexpart.process_output(c) + + # check if in debugging mode, then store all files + # otherwise delete temporary files + if c.debug: + print('\nTemporary files left intact') + else: + clean_up(c) + + return + +if __name__ == "__main__": + main() diff --git a/Source/Python/Mods/profiling.py b/Source/Python/Mods/profiling.py new file mode 100644 index 0000000000000000000000000000000000000000..043937748085da8cbf99d906e21ac106ebab1069 --- /dev/null +++ b/Source/Python/Mods/profiling.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#************************************************************************ +# ToDo AP +# - check license of book content +#************************************************************************ +#******************************************************************************* +# +# @Author: Anne Philipp (University of Vienna) +# +# @Date: March 2018 +# +# @License: +# (C) Copyright 2018. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# @Program functionality: +# This module is not part of flex_extract. It is just used for testing and +# performance analysis of some functions. +# +# @Program Content: +# - timefn +# +#******************************************************************************* + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +from __future__ import print_function + +from functools import wraps +import time + +# ------------------------------------------------------------------------------ +# FUNCTION +# ------------------------------------------------------------------------------ +def timefn(func): + ''' + @Description: + Decorator function. It takes the inner function as an argument. + ''' + @wraps(func) + def measure_time(*args, **kwargs): + ''' + @Descripton: + Passes the arguments through fn for execution. Around the + execution of fn the time is captured to execute the fn function + and prints the result along with the function name. + + This is taken from the book "High Performance Python" from + Micha Gorelick and Ian Ozsvald, O'Reilly publisher, 2014, + ISBN: 978-1-449-36159-4 + + @Input: + *args: undefined + A variable number of positional arguments. + + **kwargs: undefined + A variable number of key/value arguments. + + @Return: + <nothing> + ''' + + time1 = time.time() + result = func(*args, **kwargs) + time2 = time.time() + print("@timefn:" + func.__name__ + " took " + + str(time2 - time1) + " seconds") + + return result + + return measure_time diff --git a/Source/Python/Mods/tools.py b/Source/Python/Mods/tools.py new file mode 100644 index 0000000000000000000000000000000000000000..7888926bc9b14abe78d494d7dcd9819590b5d5b9 --- /dev/null +++ b/Source/Python/Mods/tools.py @@ -0,0 +1,912 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Anne Philipp (University of Vienna) +# +# @Date: May 2018 +# +# @Change History: +# October 2014 - Anne Fouilloux (University of Oslo) +# - created functions silent_remove and product (taken from ECMWF) +# +# November 2015 - Leopold Haimberger (University of Vienna) +# - created functions: interpret_args_and_control, clean_up +# my_error, normal_exit, init128, to_param_id +# +# April - December 2018 - Anne Philipp (University of Vienna): +# - applied PEP8 style guide +# - added documentation +# - moved all non class methods from former file Flexparttools in here +# - seperated args and control interpretation +# - added functions get_list_as_string, read_ecenv, send_mail, make_dir, +# put_file_to_ecserver, submit_job_to_ecserver, get_informations, +# get_dimensions, execute_subprocess, none_or_int, none_or_str +# +# @License: +# (C) Copyright 2014-2019. +# Anne Philipp, Leopold Haimberger +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +# +# @Methods: +# none_or_str +# none_or_int +# get_cmdline_args +# read_ecenv +# clean_up +# my_error +# send_mail +# normal_exit +# product +# silent_remove +# init128 +# to_param_id +# get_list_as_string +# make_dir +# put_file_to_ecserver +# submit_job_to_ecserver +# get_informations +# get_dimensions +# execute_subprocess +#******************************************************************************* +'''This module contains a collection of diverse tasks within flex_extract. +''' + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +from __future__ import print_function + +import os +import errno +import sys +import glob +import subprocess +import traceback +# pylint: disable=unused-import +try: + import exceptions +except ImportError: + import builtins as exceptions +# pylint: enable=unused-import +from datetime import datetime, timedelta +from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter + +# ------------------------------------------------------------------------------ +# METHODS +# ------------------------------------------------------------------------------ + +def setup_controldata(): + '''Collects, stores and checks controlling arguments from command line, + CONTROL file and ECMWF_ENV file. + + Parameters + ---------- + + Return + ------ + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + ppid : str + Parent process id. + + queue : str + Name of queue for submission to ECMWF (e.g. ecgate or cca ) + + job_template : str + Name of the job template file for submission to ECMWF server. + ''' + import _config + from Classes.ControlFile import ControlFile + + args = get_cmdline_args() + c = ControlFile(args.controlfile) + c.assign_args_to_control(args) + if os.path.isfile(_config.PATH_ECMWF_ENV): + env_parameter = read_ecenv(_config.PATH_ECMWF_ENV) + c.assign_envs_to_control(env_parameter) + c.check_conditions(args.queue) + + return c, args.ppid, args.queue, args.job_template + +def none_or_str(value): + '''Converts the input string into pythons None-type if the string + contains string "None". + + Parameters + ---------- + value : str + String to be checked for the "None" word. + + Return + ------ + None or value: + Return depends on the content of the input value. If it was "None", + then the python type None is returned. Otherwise the string itself. + ''' + if value == 'None': + return None + return value + +def none_or_int(value): + '''Converts the input string into pythons None-type if the string + contains string "None". Otherwise it is converted to an integer value. + + Parameters + ---------- + value : str + String to be checked for the "None" word. + + Return + ------ + None or int(value): + 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. + ''' + if value == 'None': + return None + return int(value) + +def get_cmdline_args(): + '''Decomposes the command line arguments and assigns them to variables. + Apply default values for non mentioned arguments. + + Parameters + ---------- + + Return + ------ + args : Namespace + Contains the commandline arguments from script/program call. + ''' + + parser = ArgumentParser(description='Retrieve FLEXPART input from \ + ECMWF MARS archive', + formatter_class=ArgumentDefaultsHelpFormatter) + + # control parameters that override control file values + parser.add_argument("--start_date", dest="start_date", + type=none_or_str, default=None, + help="start date YYYYMMDD") + parser.add_argument("--end_date", dest="end_date", + type=none_or_str, default=None, + help="end_date YYYYMMDD") + parser.add_argument("--date_chunk", dest="date_chunk", + type=none_or_int, default=None, + help="# of days to be retrieved at once") + parser.add_argument("--job_chunk", dest="job_chunk", + type=none_or_int, default=None, + help="# of days to be retrieved within a single job") + parser.add_argument("--controlfile", dest="controlfile", + type=none_or_str, default='CONTROL_EA5', + help="The file with all CONTROL parameters.") + parser.add_argument("--basetime", dest="basetime", + type=none_or_int, default=None, + help="base such as 0 or 12 (for half day retrievals)") + parser.add_argument("--step", dest="step", + type=none_or_str, default=None, + help="Forecast steps such as 00/to/48") + parser.add_argument("--levelist", dest="levelist", + type=none_or_str, default=None, + help="Vertical levels to be retrieved, e.g. 30/to/60") + parser.add_argument("--area", dest="area", + type=none_or_str, default=None, + help="area defined as north/west/south/east") + + # some switches + parser.add_argument("--debug", dest="debug", + type=none_or_int, default=None, + help="debug mode - leave temporary files intact") + parser.add_argument("--oper", dest="oper", + type=none_or_int, default=None, + help='operational mode - prepares dates with ' + 'environment variables') + parser.add_argument("--request", dest="request", + type=none_or_int, default=None, + help="list all mars requests in file mars_requests.dat") + parser.add_argument("--public", dest="public", + type=none_or_int, default=None, + help="public mode - retrieves the public datasets") + parser.add_argument("--rrint", dest="rrint", + type=none_or_int, default=None, + help='Selection of old or new precipitation ' + 'interpolation:\n' + ' 0 - old method\n' + ' 1 - new method (additional subgrid points)') + + # set directories + parser.add_argument("--inputdir", dest="inputdir", + type=none_or_str, default=None, + help='Path to the temporary directory for the ' + 'retrieval grib files and other processing files.') + parser.add_argument("--outputdir", dest="outputdir", + type=none_or_str, default=None, + help='Path to the final directory where the final ' + 'FLEXPART ready input files are stored.') + + # this is only used by prepare_flexpart.py to rerun a postprocessing step + parser.add_argument("--ppid", dest="ppid", + type=none_or_str, default=None, + help='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.') + + # arguments for job submission to ECMWF, only needed by submit.py + parser.add_argument("--job_template", dest='job_template', + type=none_or_str, default="job.temp", + help='The job template file which are adapted to be ' + 'submitted to the batch system on ECMWF server.') + parser.add_argument("--queue", dest="queue", + type=none_or_str, default=None, + help='The ECMWF server name for submission of the ' + 'job script to the batch system ' + '(e.g. ecgate | cca | ccb)') + + args = parser.parse_args() + + return args + +def read_ecenv(filepath): + '''Reads the file into a dictionary where the key values are the parameter + names. + + Parameters + ---------- + filepath : str + Path to file where the ECMWF environment parameters are stored. + + Return + ------ + envs : dict + Contains the environment parameter ecuid, ecgid, gateway + and destination for ECMWF server environments. + ''' + envs = {} + try: + with open(filepath, 'r') as f: + for line in f: + data = line.strip().split() + envs[str(data[0])] = str(data[1]) + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + sys.exit('\n... Error occured while trying to read ECMWF_ENV ' + 'file: ' + str(filepath)) + + return envs + +def clean_up(c): + '''Remove files from the intermediate directory (inputdir). + + It keeps the final FLEXPART input files if program runs without + ECMWF Api and keywords "ectrans" or "ecstorage" are set to "1". + + Parameters + ---------- + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + Return + ------ + + ''' + + print("... clean inputdir!") + + cleanlist = [filename for filename in + glob.glob(os.path.join(c.inputdir, "*")) + if not os.path.basename(filename).startswith(c.prefix)] + + if cleanlist: + for element in cleanlist: + silent_remove(element) + print("... done!") + else: + print("... nothing to clean!") + + return + + +def my_error(message='ERROR'): + '''Prints a specified error message which can be passed to the function + before exiting the program. + + Parameters + ---------- + message : str, optional + Error message. Default value is "ERROR". + + Return + ------ + + ''' + + trace = '\n'.join(traceback.format_stack()) + full_message = message + '\n\n' + trace + + print(full_message) + + sys.exit(1) + + return + + +def send_mail(users, success_mode, message): + '''Prints a specific exit message which can be passed to the function. + + Parameters + ---------- + users : list of str + 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. + + success_mode : str + States the exit mode of the program to put into + the mail subject line. + + message : str, optional + Message for exiting program. Default value is "Done!". + + Return + ------ + + ''' + + for user in users: + if '${USER}' in user: + user = os.getenv('USER') + try: + p = subprocess.Popen(['mail', '-s flex_extract_v7.1 ' + + success_mode, os.path.expandvars(user)], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + bufsize=1) + pout = p.communicate(input=message + '\n\n')[0] + except ValueError as e: + print('... ERROR: ' + str(e)) + sys.exit('... Email could not be sent!') + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + sys.exit('... Email could not be sent!') + else: + print('Email sent to ' + os.path.expandvars(user)) + + return + + +def normal_exit(message='Done!'): + '''Prints a specific exit message which can be passed to the function. + + Parameters + ---------- + message : str, optional + Message for exiting program. Default value is "Done!". + + Return + ------ + + ''' + + print(str(message)) + + return + + +def product(*args, **kwds): + '''Creates combinations of all passed arguments. + + 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. + + Note + ---- + This method is taken from an example at the ECMWF wiki website. + https://software.ecmwf.int/wiki/display/GRIB/index.py; 2018-03-16 + + It was released under the following license: + https://confluence.ecmwf.int/display/ECC/License + + Example + ------- + product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy + + product(range(2), repeat = 3) --> 000 001 010 011 100 101 110 111 + + Parameters + ---------- + \*args : list or str + Positional arguments (arbitrary number). + + \*\*kwds : dict + Contains all the keyword arguments from \*args. + + Return + ------ + prod : :obj:`tuple` + Return will be done with "yield". A tuple of combined arguments. + See example in description above. + ''' + try: + pools = [tuple(arg) for arg in args] * kwds.get('repeat', 1) + result = [[]] + for pool in pools: + result = [x + [y] for x in result for y in pool] + for prod in result: + yield tuple(prod) + except TypeError as e: + sys.exit('... PRODUCT GENERATION FAILED!') + + return + + +def silent_remove(filename): + '''Remove file if it exists. + The function does not fail if the file does not exist. + + Parameters + ---------- + filename : str + The name of the file to be removed without notification. + + Return + ------ + + ''' + try: + os.remove(filename) + except OSError as e: + # errno.ENOENT = no such file or directory + if e.errno == errno.ENOENT: + pass + else: + raise # re-raise exception if a different error occured + + return + + +def init128(filepath): + '''Opens and reads the grib file with table 128 information. + + Parameters + ---------- + filepath : str + Path to file of ECMWF grib table number 128. + + Return + ------ + table128 : dict + Contains the ECMWF grib table 128 information. + The key is the parameter number and the value is the + short name of the parameter. + ''' + table128 = dict() + try: + with open(filepath) as f: + fdata = f.read().split('\n') + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + sys.exit('\n... Error occured while trying to read parameter ' + 'table file: ' + str(filepath)) + else: + for data in fdata: + if data != '' and data[0] != '!': + table128[data[0:3]] = data[59:65].strip() + + return table128 + + +def to_param_id(pars, table): + '''Transform parameter names to parameter ids with ECMWF grib table 128. + + Parameters + ---------- + pars : str + 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. + + table : dict + Contains the ECMWF grib table 128 information. + The key is the parameter number and the value is the + short name of the parameter. + + Return + ------ + ipar : list of int + List of addpar parameters from CONTROL file transformed to + parameter ids in the format of integer. + ''' + if not pars: + return [] + if not isinstance(pars, str): + pars = str(pars) + + cpar = pars.upper().split('/') + ipar = [] + for par in cpar: + par = par.strip() + for k, v in table.items(): + if par.isdigit(): + par = str(int(par)).zfill(3) + if par == k or par == v: + ipar.append(int(k)) + break + else: + print('Warning: par ' + par + ' not found in table 128') + + return ipar + +def to_param_id_with_tablenumber(pars, table): + '''Transform parameter names to parameter ids and add table id. + + Conversion with ECMWF grib table 128. + + Parameters + ---------- + pars : str + 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. + + table : dict + Contains the ECMWF grib table 128 information. + The key is the parameter number and the value is the + short name of the parameter. + + Return + ------ + spar : str + List of addpar parameters from CONTROL file transformed to + parameter ids in the format of integer. + ''' + if not pars: + return [] + if not isinstance(pars, str): + pars = str(pars) + + cpar = pars.upper().split('/') + spar = [] + for par in cpar: + for k, v in table.items(): + if par.isdigit(): + par = str(int(par)).zfill(3) + if par == k or par == v: + spar.append(k + '.128') + break + else: + print('\n\n\t\tWarning: par ' + par + ' not found in table 128\n\n') + + return '/'.join(spar) + +def get_list_as_string(list_obj, concatenate_sign=', '): + '''Converts a list of arbitrary content into a single string. + + Parameters + ---------- + list_obj : list of * + A list with arbitrary content. + + concatenate_sign : str, optional + A string which is used to concatenate the single + list elements. Default value is ", ". + + Return + ------ + str_of_list : str + The content of the list as a single string. + ''' + + if not isinstance(list_obj, list): + list_obj = list(list_obj) + str_of_list = concatenate_sign.join(str(l) for l in list_obj) + + return str_of_list + +def make_dir(directory): + '''Creates a directory. + + It gives a warning if the directory already exists and skips process. + The program stops only if there is another problem. + + Parameters + ---------- + directory : str + The path to directory which should be created. + + Return + ------ + + ''' + try: + os.makedirs(directory) + except OSError as e: + # errno.EEXIST = directory already exists + if e.errno == errno.EEXIST: + print('WARNING: Directory {0} already exists!'.format(directory)) + else: + raise # re-raise exception if a different error occured + + return + +def put_file_to_ecserver(ecd, filename, target, ecuid, ecgid): + '''Uses the ecaccess-file-put command to send a file to the ECMWF servers. + + Note + ---- + 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. + + Parameters + ---------- + ecd : str + The path were the file is stored. + + filename : str + The name of the file to send to the ECMWF server. + + target : str + The target queue where the file should be sent to. + + ecuid : str + The user id on ECMWF server. + + ecgid : str + The group id on ECMWF server. + + Return + ------ + + ''' + + try: + subprocess.check_output(['ecaccess-file-put', + ecd + '/' + filename, + target + ':/home/ms/' + + ecgid + '/' + ecuid + + '/' + filename], + stderr=subprocess.STDOUT) + except subprocess.CalledProcessError as e: + print('... ERROR CODE: ' + str(e.returncode)) + print('... ERROR MESSAGE:\n \t ' + str(e)) + + print('\n... Do you have a valid ecaccess certification key?') + sys.exit('... ECACCESS-FILE-PUT FAILED!') + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + print('\n... Most likely the ECACCESS library is not available!') + sys.exit('... ECACCESS-FILE-PUT FAILED!') + + return + +def submit_job_to_ecserver(target, jobname): + '''Uses ecaccess-job-submit command to submit a job to the ECMWF server. + + Note + ---- + 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. + + Parameters + ---------- + target : str + The target where the file should be sent to, e.g. the queue. + + jobname : str + The name of the jobfile to be submitted to the ECMWF server. + + Return + ------ + job_id : int + The id number of the job as a reference at the ecmwf server. + ''' + + try: + job_id = subprocess.check_output(['ecaccess-job-submit', '-queueName', + target, jobname]) + + except subprocess.CalledProcessError as e: + print('... ERROR CODE: ' + str(e.returncode)) + print('... ERROR MESSAGE:\n \t ' + str(e)) + + print('\n... Do you have a valid ecaccess certification key?') + sys.exit('... ECACCESS-JOB-SUBMIT FAILED!') + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + print('\n... Most likely the ECACCESS library is not available!') + sys.exit('... ECACCESS-JOB-SUBMIT FAILED!') + + return job_id.decode() + + +def get_informations(filename): + '''Gets basic information from an example grib file. + + These information are important for later use and the + initialization of numpy arrays for data storing. + + Parameters + ---------- + filename : str + Name of the file which will be opened to extract basic information. + + Return + ------ + data : dict + Contains basic informations of the ECMWF grib files, e.g. + 'Ni', 'Nj', 'latitudeOfFirstGridPointInDegrees', + 'longitudeOfFirstGridPointInDegrees', 'latitudeOfLastGridPointInDegrees', + 'longitudeOfLastGridPointInDegrees', 'jDirectionIncrementInDegrees', + 'iDirectionIncrementInDegrees', 'missingValue' + ''' + from eccodes import codes_grib_new_from_file, codes_get, codes_release + + data = {} + + # --- open file --- + print("Opening file for getting information data --- %s" % filename) + with open(filename, 'rb') as f: + # load first message from file + gid = codes_grib_new_from_file(f) + + # information needed from grib message + keys = ['Ni', + 'Nj', + 'latitudeOfFirstGridPointInDegrees', + 'longitudeOfFirstGridPointInDegrees', + 'latitudeOfLastGridPointInDegrees', + 'longitudeOfLastGridPointInDegrees', + 'jDirectionIncrementInDegrees', + 'iDirectionIncrementInDegrees', + 'missingValue', + ] + + print('\nInformations are: ') + for key in keys: + # Get the value of the key in a grib message. + data[key] = codes_get(gid, key) + print("%s = %s" % (key, data[key])) + + # Free the memory for the message referred as gribid. + codes_release(gid) + + return data + + +def get_dimensions(info, purefc, dtime, index_vals, start_date, end_date): + '''This function specifies the correct dimensions for x, y and t. + + Parameters + ---------- + info : dict + Contains basic informations of the ECMWF grib files, e.g. + 'Ni', 'Nj', 'latitudeOfFirstGridPointInDegrees', + 'longitudeOfFirstGridPointInDegrees', 'latitudeOfLastGridPointInDegrees', + 'longitudeOfLastGridPointInDegrees', 'jDirectionIncrementInDegrees', + 'iDirectionIncrementInDegrees', 'missingValue' + + purefc : int + Switch for definition of pure forecast mode or not. + + dtime : str + Time step in hours. + + index_vals : list of list of str + 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 + + start_date : str + The start date of the retrieval job. + + end_date : str + The end date of the retrieval job. + + Return + ------ + (ix, jy, it) : tuple of int + Dimension in x-direction, y-direction and in time. + ''' + + ix = info['Ni'] + + jy = info['Nj'] + + if not purefc: + it = ((end_date - start_date).days + 1) * 24 // int(dtime) + else: + # #no of step * #no of times * #no of days + it = len(index_vals[2]) * len(index_vals[1]) * len(index_vals[0]) + + return (ix, jy, it) + + +def execute_subprocess(cmd_list, error_msg='SUBPROCESS FAILED!'): + '''Executes a command line instruction via a subprocess. + + Error handling is done if an error occures. + + Parameters + ---------- + cmd_list : list of str + 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] + + Return + ------ + error_msg : str, optional + The possible error message if the subprocess failed. + By default it will just tell "SUBPROCESS FAILED!". + ''' + + try: + subprocess.check_call(cmd_list) + except subprocess.CalledProcessError as e: + print('... ERROR CODE: ' + str(e.returncode)) + print('... ERROR MESSAGE:\n \t ' + str(e)) + + sys.exit('... ' + error_msg) + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + sys.exit('... ' + error_msg) + + return + + +def generate_retrieval_period_boundary(c): + '''Generates retrieval period boundary datetimes from CONTROL information. + + Parameters + ---------- + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + Return + ------ + start_period : datetime + The first timestamp of the actual retrieval period disregarding + the temporary times which were used for processing reasons. + + end_period : datetime + The last timestamp of the actual retrieval period disregarding + the temporary times which were used for processing reasons. + ''' + # generate start and end timestamp of the retrieval period + start_period = datetime.strptime(c.start_date + c.time[0], '%Y%m%d%H') + start_period = start_period + timedelta(hours=int(c.step[0])) + end_period = datetime.strptime(c.end_date + c.time[-1], '%Y%m%d%H') + end_period = end_period + timedelta(hours=int(c.step[-1])) + + + return start_period, end_period diff --git a/Source/Python/__init__.py b/Source/Python/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c44e32301dd7d73dac05abfef800984e01266407 --- /dev/null +++ b/Source/Python/__init__.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Anne Philipp (University of Vienna) +# +# @Date: September 2018 +# +# @License: +# (C) Copyright 2015-2018. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +#******************************************************************************* diff --git a/Source/Python/_config.py b/Source/Python/_config.py new file mode 100644 index 0000000000000000000000000000000000000000..82b7bc0883ad7b67e87003258a2deb02c7914dfe --- /dev/null +++ b/Source/Python/_config.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Anne Philipp (University of Vienna) +# +# @Date: August 2018 +# +# @Change History: +# +# @License: +# (C) Copyright 2014-2019. +# Anne Philipp, Leopold Haimberger +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +#******************************************************************************* +'''Configurations for flex_extract. + +Defines a couple of global constant parameters as well as filenames +and pathes. +''' +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +import os +import sys +import inspect +import platform + +# ------------------------------------------------------------------------------ +# PARAMETERS +# ------------------------------------------------------------------------------ + +_VERSION_STR = '7.1' + +FLAG_ON_ECMWFSERVER = 'ecgb' in platform.node() + +QUEUES_LIST = ['ecgate', 'cca', 'ccb'] + +INSTALL_TARGETS = ['local', 'ecgate', 'cca', 'ccb'] + +CDS_DATASET = 'reanalysis-era5-complete' + +# up-to-date available maximum level numbers at ECMWF, 05.10.2018 +MAX_LEVEL_LIST = [16, 19, 31, 40, 50, 60, 62, 91, 137] + +# ------------------------------------------------------------------------------ +# FILENAMES +# ------------------------------------------------------------------------------ + +FILE_MARS_REQUESTS = 'mars_requests.csv' +FORTRAN_EXECUTABLE = 'calc_etadot' +TEMPFILE_USER_ENVVARS = 'ECMWF_ENV.template' +FILE_USER_ENVVARS = 'ECMWF_ENV' +TEMPFILE_INSTALL_COMPILEJOB = 'compilejob.template' +FILE_INSTALL_COMPILEJOB = 'compilejob.ksh' +TEMPFILE_INSTALL_JOB = 'job.template' +TEMPFILE_JOB = 'job.temp' +FILE_JOB_OD = 'job.ksh' +FILE_JOB_OP = 'jopoper.ksh' +TEMPFILE_NAMELIST = 'convert.nl' +FILE_NAMELIST = 'fort.4' +FILE_GRIB_INDEX = 'date_time_stepRange.idx' +FILE_GRIBTABLE = 'ecmwf_grib1_table_128' + +# ------------------------------------------------------------------------------ +# DIRECTORY NAMES +# ------------------------------------------------------------------------------ + +FLEXEXTRACT_DIRNAME = 'flex_extract_v' + _VERSION_STR +INPUT_DIRNAME_DEFAULT = 'Workspace' + +# ------------------------------------------------------------------------------ +# PATHES +# ------------------------------------------------------------------------------ + +# path to the local python source files +# first thing to get because the submitted python script starts in here +PATH_LOCAL_PYTHON = os.path.dirname(os.path.abspath( + inspect.getfile(inspect.currentframe()))) +# add path to pythonpath +if PATH_LOCAL_PYTHON not in sys.path: + sys.path.append(PATH_LOCAL_PYTHON) +PATH_FLEXEXTRACT_DIR = os.path.normpath(os.path.dirname(os.path.abspath( + inspect.getfile(inspect.currentframe()))) + '/../../') +PATH_RUN_DIR = os.path.join(PATH_FLEXEXTRACT_DIR, 'Run') +PATH_SOURCES = os.path.join(PATH_FLEXEXTRACT_DIR, 'Source') +PATH_TEMPLATES = os.path.join(PATH_FLEXEXTRACT_DIR, 'Templates') +PATH_ECMWF_ENV = os.path.join(PATH_RUN_DIR, FILE_USER_ENVVARS) +PATH_GRIBTABLE = os.path.join(PATH_TEMPLATES, FILE_GRIBTABLE) +PATH_JOBSCRIPTS = os.path.join(PATH_RUN_DIR, 'Jobscripts') +PATH_FORTRAN_SRC = os.path.join(PATH_SOURCES, 'Fortran') +PATH_PYTHONTEST_SRC = os.path.join(PATH_SOURCES, 'Pythontest') +PATH_INPUT_DIR = os.path.join(PATH_RUN_DIR, INPUT_DIRNAME_DEFAULT) +PATH_TEST = os.path.join(PATH_FLEXEXTRACT_DIR, 'Testing') +if os.getenv('CONTROL'): + # this is only needed if (gateway) version with job script is used! + # because job is directly submitted from SCRATCH and because the + # CONTROL file is stored there, the normal path is not valid. + PATH_CONTROLFILES = '.' +else: + PATH_CONTROLFILES = os.path.join(PATH_RUN_DIR, 'Control') +# +# ------------------------------------------------------------------------------ +# RELATIVE PATHES FOR INSTALLATION TAR-BALL +# ------------------------------------------------------------------------------ + +PATH_REL_PYTHON_SRC = os.path.relpath(PATH_LOCAL_PYTHON, PATH_FLEXEXTRACT_DIR) +PATH_REL_PYTHONTEST_SRC = os.path.relpath(PATH_PYTHONTEST_SRC, PATH_FLEXEXTRACT_DIR) +PATH_REL_CONTROLFILES = os.path.relpath(PATH_CONTROLFILES, PATH_FLEXEXTRACT_DIR) +PATH_REL_TEMPLATES = os.path.relpath(PATH_TEMPLATES, PATH_FLEXEXTRACT_DIR) +PATH_REL_ECMWF_ENV = os.path.relpath(PATH_ECMWF_ENV, PATH_FLEXEXTRACT_DIR) +PATH_REL_RUN_DIR = os.path.relpath(PATH_RUN_DIR, PATH_FLEXEXTRACT_DIR) +PATH_REL_JOBSCRIPTS = os.path.relpath(PATH_JOBSCRIPTS, PATH_FLEXEXTRACT_DIR) +PATH_REL_FORTRAN_SRC = os.path.relpath(PATH_FORTRAN_SRC, PATH_FLEXEXTRACT_DIR) +PATH_REL_TEST = os.path.relpath(PATH_TEST, PATH_FLEXEXTRACT_DIR) diff --git a/Source/Python/install.py b/Source/Python/install.py new file mode 100755 index 0000000000000000000000000000000000000000..9a3e17adf352145760d56e69c5fa4b678223498f --- /dev/null +++ b/Source/Python/install.py @@ -0,0 +1,706 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Leopold Haimberger (University of Vienna) +# +# @Date: November 2015 +# +# @Change History: +# +# February 2018 - Anne Philipp (University of Vienna): +# - applied PEP8 style guide +# - added documentation +# - moved install_args_and_control in here +# - splitted code in smaller functions +# - delete convert build files in here instead of compile job script +# - changed static path names to variables from config file +# - splitted install function into several smaller pieces +# - use of tarfile package in python +# +# @License: +# (C) Copyright 2014-2019. +# Anne Philipp, Leopold Haimberger +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +# +# @Methods: +# main +# get_install_cmdline_args +# install_via_gateway +# check_install_conditions +# mk_tarball +# un_tarball +# mk_env_vars +# mk_compilejob +# mk_job_template +# del_convert_build +# mk_convert_build +# +#******************************************************************************* +'''This script installs the flex_extract program. + +Depending on the selected installation environment (locally or on the +ECMWF server ecgate or cca) the program extracts the commandline +arguments and the CONTROL file parameter and prepares the corresponding +environment. +The necessary files are collected in a tar-ball and placed +at the target location. There its untared, the environment variables will +be set and the Fortran code will be compiled. +If the ECMWF environment is selected a job script is prepared and submitted +for the remaining configurations after putting the tar-ball to the +target ECMWF server. + +Type: install.py --help +to get information about command line parameters. +Read the documentation for usage instructions. +''' + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +from __future__ import print_function + +import os +import sys +import subprocess +import tarfile +from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter + +# software specific classes and modules from flex_extract +import _config +from Classes.ControlFile import ControlFile +from Classes.UioFiles import UioFiles +from Mods.tools import (make_dir, put_file_to_ecserver, submit_job_to_ecserver, + silent_remove, execute_subprocess, none_or_str) + +# ------------------------------------------------------------------------------ +# FUNCTIONS +# ------------------------------------------------------------------------------ +def main(): + '''Controls the installation process. Calls the installation function + if target is specified. + + Parameters + ---------- + + Return + ------ + ''' + + args = get_install_cmdline_args() + c = ControlFile(args.controlfile) + c.assign_args_to_control(args) + check_install_conditions(c) + + if c.install_target.lower() != 'local': # ecgate or cca + install_via_gateway(c) + else: # local + install_local(c) + + return + +def get_install_cmdline_args(): + '''Decomposes the command line arguments and assigns them to variables. + Apply default values for non mentioned arguments. + + Parameters + ---------- + + Return + ------ + args : Namespace + Contains the commandline arguments from script/program call. + ''' + parser = ArgumentParser(description='Install flex_extract software ' + 'locally or on ECMWF machines', + formatter_class=ArgumentDefaultsHelpFormatter) + + parser.add_argument('--target', dest='install_target', + type=none_or_str, default=None, + help="Valid targets: local | ecgate | cca , \ + the latter two are at ECMWF") + parser.add_argument("--makefile", dest="makefile", + type=none_or_str, default=None, + help='Name of Makefile to use for compiling the ' + 'Fortran program') + parser.add_argument("--ecuid", dest="ecuid", + type=none_or_str, default=None, + help='The user id at ECMWF.') + parser.add_argument("--ecgid", dest="ecgid", + type=none_or_str, default=None, + help='The group id at ECMWF.') + parser.add_argument("--gateway", dest="gateway", + type=none_or_str, default=None, + help='The name of the local gateway server.') + parser.add_argument("--destination", dest="destination", + type=none_or_str, default=None, + help='The ecaccess association, e.g. ' + 'myUser@genericSftp') + + parser.add_argument("--installdir", dest="installdir", + type=none_or_str, default=None, + help='Root directory where ' + 'flex_extract will be installed to.') + + # arguments for job submission to ECMWF, only needed by submit.py + parser.add_argument("--job_template", dest='job_template', + type=none_or_str, default="job.template", + help='The rudimentary template file to create a batch ' + 'job template for submission to ECMWF servers.') + + parser.add_argument("--controlfile", dest="controlfile", + type=none_or_str, default='CONTROL_EA5', + help="The file with all CONTROL parameters.") + + args = parser.parse_args() + + return args + + +def install_via_gateway(c): + '''Prepare data transfer to remote gate and submit a job script which will + install everything on the remote gate. + + Parameters + ---------- + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + Return + ------ + + ''' + + tarball_name = _config.FLEXEXTRACT_DIRNAME + '.tar' + tar_file = os.path.join(_config.PATH_FLEXEXTRACT_DIR, tarball_name) + + mk_compilejob(c.makefile, c.ecuid, c.ecgid, c.installdir) + + mk_job_template(c.ecuid, c.ecgid, c.installdir) + + mk_env_vars(c.ecuid, c.ecgid, c.gateway, c.destination) + + mk_tarball(tar_file, c.install_target) + + put_file_to_ecserver(_config.PATH_FLEXEXTRACT_DIR, tarball_name, + c.install_target, c.ecuid, c.ecgid) + + submit_job_to_ecserver(c.install_target, + os.path.join(_config.PATH_REL_JOBSCRIPTS, + _config.FILE_INSTALL_COMPILEJOB)) + + silent_remove(tar_file) + + print('Job compilation script has been submitted to ecgate for ' + + 'installation in ' + c.installdir + + '/' + _config.FLEXEXTRACT_DIRNAME) + print('You should get an email with subject "flexcompile" within ' + + 'the next few minutes!') + + return + +def install_local(c): + '''Perform the actual installation on a local machine. + + Parameters + ---------- + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + Return + ------ + + ''' + + tar_file = os.path.join(_config.PATH_FLEXEXTRACT_DIR, + _config.FLEXEXTRACT_DIRNAME + '.tar') + + if c.installdir == _config.PATH_FLEXEXTRACT_DIR: + print('WARNING: installdir has not been specified') + print('flex_extract will be installed in here by compiling the ' + + 'Fortran source in ' + _config.PATH_FORTRAN_SRC) + os.chdir(_config.PATH_FORTRAN_SRC) + else: # creates the target working directory for flex_extract + c.installdir = os.path.expandvars(os.path.expanduser( + c.installdir)) + if os.path.abspath(_config.PATH_FLEXEXTRACT_DIR) != \ + os.path.abspath(c.installdir): + mk_tarball(tar_file, c.install_target) + make_dir(os.path.join(c.installdir, + _config.FLEXEXTRACT_DIRNAME)) + os.chdir(os.path.join(c.installdir, + _config.FLEXEXTRACT_DIRNAME)) + un_tarball(tar_file) + os.chdir(os.path.join(c.installdir, + _config.FLEXEXTRACT_DIRNAME, + _config.PATH_REL_FORTRAN_SRC)) + + # Create Fortran executable - CONVERT2 + print('Install ' + _config.FLEXEXTRACT_DIRNAME + ' software at ' + + c.install_target + ' in directory ' + + os.path.abspath(c.installdir) + '\n') + + del_convert_build('.') + mk_convert_build('.', c.makefile) + + os.chdir(_config.PATH_FLEXEXTRACT_DIR) + if os.path.isfile(tar_file): + os.remove(tar_file) + + return + + +def check_install_conditions(c): + '''Checks a couple of necessary attributes and conditions + for the installation such as if they exist and contain values. + Otherwise set default values. + + Parameters + ---------- + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + + Return + ------ + + ''' + + if c.install_target and \ + c.install_target not in _config.INSTALL_TARGETS: + print('ERROR: unknown or missing installation target ') + print('target: ', c.install_target) + print('please specify correct installation target ' + + str(_config.INSTALL_TARGETS)) + print('use -h or --help for help') + sys.exit(1) + + if c.install_target and c.install_target != 'local': + if not c.ecgid or not c.ecuid or \ + not c.gateway or not c.destination: + print('Please enter your ECMWF user id and group id as well ' + + 'as the \nname of the local gateway and the ectrans ' + + 'destination ') + print('with command line options --ecuid --ecgid \ + --gateway --destination') + print('Try "' + sys.argv[0].split('/')[-1] + \ + ' -h" to print usage information') + print('Please consult ecaccess documentation or ECMWF user \ + support for further details') + sys.exit(1) + + if not c.installdir: + c.installdir = '${HOME}' + else: # local + if not c.installdir: + c.installdir = _config.PATH_FLEXEXTRACT_DIR + + return + + +def mk_tarball(tarball_path, target): + '''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. + + Parameters + ---------- + tarball_path : str + The complete path to the tar file which will contain all + relevant data for flex_extract. + + target : str + The queue where the job is submitted to. + + Return + ------ + + ''' + + print('Create tarball ...') + + # change to FLEXEXTRACT directory so that the tar can contain + # relative pathes to the files and directories + ecd = _config.PATH_FLEXEXTRACT_DIR + '/' + os.chdir(ecd) + + # get lists of the files to be added to the tar file + if target == 'local': + ecmwf_env_file = [] + runfile = [os.path.relpath(x, ecd) + for x in UioFiles(_config.PATH_REL_RUN_DIR, + 'run_local.sh').files] + else: + ecmwf_env_file = [_config.PATH_REL_ECMWF_ENV] + runfile = [os.path.relpath(x, ecd) + for x in UioFiles(_config.PATH_REL_RUN_DIR, + 'run.sh').files] + + pyfiles = [os.path.relpath(x, ecd) + for x in UioFiles(_config.PATH_REL_PYTHON_SRC, '*py').files] + pytestfiles = [os.path.relpath(x, ecd) + for x in UioFiles(_config.PATH_REL_PYTHONTEST_SRC, '*py').files] + controlfiles = [os.path.relpath(x, ecd) + for x in UioFiles(_config.PATH_REL_CONTROLFILES, + 'CONTROL*').files] + testfiles = [os.path.relpath(x, ecd) + for x in UioFiles(_config.PATH_REL_TEST, '*').files] + tempfiles = [os.path.relpath(x, ecd) + for x in UioFiles(_config.PATH_REL_TEMPLATES, '*.temp').files] + nlfiles = [os.path.relpath(x, ecd) + for x in UioFiles(_config.PATH_REL_TEMPLATES, '*.nl').files] + gribtable = [os.path.relpath(x, ecd) + for x in UioFiles(_config.PATH_REL_TEMPLATES, '*grib*').files] + ffiles = [os.path.relpath(x, ecd) + for x in UioFiles(_config.PATH_REL_FORTRAN_SRC, '*.f90').files] + hfiles = [os.path.relpath(x, ecd) + for x in UioFiles(_config.PATH_REL_FORTRAN_SRC, '*.h').files] + makefiles = [os.path.relpath(x, ecd) + for x in UioFiles(_config.PATH_REL_FORTRAN_SRC, 'makefile*').files] + jobdir = [_config.PATH_REL_JOBSCRIPTS] + + # concatenate single lists to one for a better looping + filelist = pyfiles + pytestfiles + controlfiles + tempfiles + nlfiles + \ + ffiles + gribtable + hfiles + makefiles + ecmwf_env_file + \ + runfile + jobdir + testfiles +\ + ['CODE_OF_CONDUCT.md', 'LICENSE.md', 'README.md'] + + # create installation tar-file + exclude_files = [".ksh", ".tar"] + try: + with tarfile.open(tarball_path, "w:gz") as tar_handle: + for filename in filelist: + tar_handle.add(filename, recursive=False, + filter=lambda tarinfo: None + if os.path.splitext(tarinfo.name)[1] + in exclude_files + else tarinfo) + except tarfile.TarError as e: + print('... ERROR: ' + str(e)) + + sys.exit('\n... error occured while trying to create the tar-file ' + + str(tarball_path)) + + return + + +def un_tarball(tarball_path): + '''Extracts the given tarball into current directory. + + Parameters + ---------- + tarball_path : str + The complete path to the tar file which will contain all + relevant data for flex_extract. + + Return + ------ + + ''' + + print('Untar ...') + + try: + with tarfile.open(tarball_path) as tar_handle: + tar_handle.extractall() + except tarfile.TarError as e: + sys.exit('\n... error occured while trying to read tar-file ' + + str(tarball_path)) + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + sys.exit('\n... error occured while trying to read tar-file ' + + str(tarball_path)) + + return + +def mk_env_vars(ecuid, ecgid, gateway, destination): + '''Creates a file named ECMWF_ENV which contains the + necessary environmental variables at ECMWF servers. + It is based on the template ECMWF_ENV.template. + + Parameters + ---------- + ecuid : str + The user id on ECMWF server. + + ecgid : str + The group id on ECMWF server. + + gateway : str + The gateway server the user is using. + + destination : str + The remote destination which is used to transfer files + from ECMWF server to local gateway server. + + Return + ------ + + ''' + from genshi.template.text import NewTextTemplate + from genshi.template import TemplateLoader + from genshi.template.eval import UndefinedError + + try: + loader = TemplateLoader(_config.PATH_TEMPLATES, auto_reload=False) + ecmwfvars_template = loader.load(_config.TEMPFILE_USER_ENVVARS, + cls=NewTextTemplate) + + stream = ecmwfvars_template.generate(user_name=ecuid, + user_group=ecgid, + gateway_name=gateway, + destination_name=destination + ) + except UndefinedError as e: + print('... ERROR ' + str(e)) + + sys.exit('\n... error occured while trying to generate template ' + + _config.PATH_ECMWF_ENV) + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + sys.exit('\n... error occured while trying to generate template ' + + _config.PATH_ECMWF_ENV) + + try: + with open(_config.PATH_ECMWF_ENV, 'w') as f: + f.write(stream.render('text')) + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + sys.exit('\n... error occured while trying to write ' + + _config.PATH_ECMWF_ENV) + + return + +def mk_compilejob(makefile, ecuid, ecgid, fp_root): + '''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. + + Parameters + ---------- + makefile : str + Name of the makefile which should be used to compile FORTRAN + CONVERT2 program. + + ecuid : str + The user id on ECMWF server. + + ecgid : str + The group id on ECMWF server. + + fp_root : str + Path to the root directory of FLEXPART environment or flex_extract + environment. + + Return + ------ + + ''' + from genshi.template.text import NewTextTemplate + from genshi.template import TemplateLoader + from genshi.template.eval import UndefinedError + + if fp_root == '../': + fp_root = '$HOME' + + try: + loader = TemplateLoader(_config.PATH_TEMPLATES, auto_reload=False) + compile_template = loader.load(_config.TEMPFILE_INSTALL_COMPILEJOB, + cls=NewTextTemplate) + + stream = compile_template.generate( + usergroup=ecgid, + username=ecuid, + version_number=_config._VERSION_STR, + fp_root_scripts=fp_root, + makefile=makefile, + fortran_program=_config.FORTRAN_EXECUTABLE + ) + except UndefinedError as e: + print('... ERROR ' + str(e)) + + sys.exit('\n... error occured while trying to generate template ' + + _config.TEMPFILE_INSTALL_COMPILEJOB) + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + sys.exit('\n... error occured while trying to generate template ' + + _config.TEMPFILE_INSTALL_COMPILEJOB) + + try: + compilejob = os.path.join(_config.PATH_JOBSCRIPTS, + _config.FILE_INSTALL_COMPILEJOB) + + with open(compilejob, 'w') as f: + f.write(stream.render('text')) + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + sys.exit('\n... error occured while trying to write ' + + compilejob) + + return + +def mk_job_template(ecuid, ecgid, fp_root): + '''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. + + Parameters + ---------- + ecuid : str + The user id on ECMWF server. + + ecgid : str + The group id on ECMWF server. + + fp_root : str + Path to the root directory of FLEXPART environment or flex_extract + environment. + + Return + ------ + + ''' + from genshi.template.text import NewTextTemplate + from genshi.template import TemplateLoader + from genshi.template.eval import UndefinedError + + fp_root_path_to_python = os.path.join(fp_root, + _config.FLEXEXTRACT_DIRNAME, + _config.PATH_REL_PYTHON_SRC) + if '$' in fp_root_path_to_python: + ind = fp_root_path_to_python.index('$') + fp_root_path_to_python = fp_root_path_to_python[0:ind] + '$' + \ + fp_root_path_to_python[ind:] + + try: + loader = TemplateLoader(_config.PATH_TEMPLATES, auto_reload=False) + compile_template = loader.load(_config.TEMPFILE_INSTALL_JOB, + cls=NewTextTemplate) + + stream = compile_template.generate( + usergroup=ecgid, + username=ecuid, + version_number=_config._VERSION_STR, + fp_root_path=fp_root_path_to_python, + ) + except UndefinedError as e: + print('... ERROR ' + str(e)) + + sys.exit('\n... error occured while trying to generate template ' + + _config.TEMPFILE_INSTALL_JOB) + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + sys.exit('\n... error occured while trying to generate template ' + + _config.TEMPFILE_INSTALL_JOB) + + + try: + tempjobfile = os.path.join(_config.PATH_TEMPLATES, + _config.TEMPFILE_JOB) + + with open(tempjobfile, 'w') as f: + f.write(stream.render('text')) + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + sys.exit('\n... error occured while trying to write ' + + tempjobfile) + + return + +def del_convert_build(src_path): + '''Clean up the Fortran source directory and remove all + build files (e.g. \*.o, \*.mod and CONVERT2) + + Parameters + ---------- + src_path : str + Path to the fortran source directory. + + Return + ------ + + ''' + + modfiles = UioFiles(src_path, '*.mod') + objfiles = UioFiles(src_path, '*.o') + exefile = UioFiles(src_path, _config.FORTRAN_EXECUTABLE) + + modfiles.delete_files() + objfiles.delete_files() + exefile.delete_files() + + return + +def mk_convert_build(src_path, makefile): + '''Compiles the Fortran code and generates the executable. + + Parameters + ---------- + src_path : str + Path to the fortran source directory. + + makefile : str + The name of the makefile which should be used. + + Return + ------ + + ''' + + try: + print('Using makefile: ' + makefile) + p = subprocess.Popen(['make', '-f', + os.path.join(src_path, makefile)], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + bufsize=1) + pout, perr = p.communicate() + print(pout.decode()) + if p.returncode != 0: + print(perr.decode()) + print('Please edit ' + makefile + + ' or try another Makefile in the src directory.') + print('Most likely GRIB_API_INCLUDE_DIR, GRIB_API_LIB ' + 'and EMOSLIB must be adapted.') + print('Available Makefiles:') + print(UioFiles(src_path, 'Makefile*')) + sys.exit('Compilation failed!') + except ValueError as e: + print('ERROR: Makefile call failed:') + print(e) + else: + execute_subprocess(['ls', '-l', + os.path.join(src_path, _config.FORTRAN_EXECUTABLE)], + error_msg='FORTRAN EXECUTABLE COULD NOT BE FOUND!') + + return + + +if __name__ == "__main__": + main() diff --git a/Source/Python/pylintrc b/Source/Python/pylintrc new file mode 100644 index 0000000000000000000000000000000000000000..0101f44254abd52a0d6a8c9a0d4dadfb24cec707 --- /dev/null +++ b/Source/Python/pylintrc @@ -0,0 +1,577 @@ +[MASTER] + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code +extension-pkg-whitelist= + +# Add files or directories to the blacklist. They should be base names, not +# paths. +ignore=CVS + +# Add files or directories matching the regex patterns to the blacklist. The +# regex matches against base names, not paths. +ignore-patterns= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. +jobs=1 + +# List of plugins (as comma separated values of python modules names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Specify a configuration file. +#rcfile= + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED +confidence= + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once).You can also use "--disable=all" to +# disable everything first and then reenable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use"--disable=all --enable=classes +# --disable=W" +disable=print-statement, + parameter-unpacking, + unpacking-in-except, + old-raise-syntax, + backtick, + long-suffix, + old-ne-operator, + old-octal-literal, + import-star-module-level, + non-ascii-bytes-literal, + raw-checker-failed, + bad-inline-option, + locally-disabled, + locally-enabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + apply-builtin, + basestring-builtin, + buffer-builtin, + cmp-builtin, + coerce-builtin, + execfile-builtin, + file-builtin, + long-builtin, + raw_input-builtin, + reduce-builtin, + standarderror-builtin, + unicode-builtin, + xrange-builtin, + coerce-method, + delslice-method, + getslice-method, + setslice-method, + no-absolute-import, + old-division, + dict-iter-method, + dict-view-method, + next-method-called, + metaclass-assignment, + indexing-exception, + raising-string, + reload-builtin, + oct-method, + hex-method, + nonzero-method, + cmp-method, + input-builtin, + round-builtin, + intern-builtin, + unichr-builtin, + map-builtin-not-iterating, + zip-builtin-not-iterating, + range-builtin-not-iterating, + filter-builtin-not-iterating, + using-cmp-argument, + eq-without-hash, + div-method, + idiv-method, + rdiv-method, + exception-message-attribute, + invalid-str-codec, + sys-max-int, + bad-python3-import, + deprecated-string-function, + deprecated-str-translate-call, + deprecated-itertools-function, + deprecated-types-field, + next-method-defined, + dict-items-not-iterating, + dict-keys-not-iterating, + dict-values-not-iterating, + anomalous-backslash-in-string, + relative-import, + protected-access + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable=c-extension-no-member + + +[REPORTS] + +# Python expression which should return a note less than 10 (10 is the highest +# note). You have access to the variables errors warning, statement which +# respectively contain the number of errors / warnings messages and the total +# number of statements analyzed. This is used by the global evaluation report +# (RP0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details +#msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio).You can also give a reporter class, eg +# mypackage.mymodule.MyReporterClass. +output-format=text + +# Tells whether to display a full report or only the messages +reports=no + +# Activate the evaluation score. +score=yes + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=optparse.Values,sys.exit + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether missing members accessed in mixin class should be ignored. A +# mixin class is detected if its name ends with "mixin" (case insensitive). +ignore-mixin-members=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis. It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + + +[SIMILARITIES] + +# Ignore comments when computing similarities. +ignore-comments=yes + +# Ignore docstrings when computing similarities. +ignore-docstrings=yes + +# Ignore imports when computing similarities. +ignore-imports=no + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes +max-spelling-suggestions=4 + +# Spelling dictionary name. Available dictionaries: none. To make it working +# install python-enchant package. +spelling-dict= + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to indicated private dictionary in +# --spelling-private-dict-file option instead of raising a message. +spelling-store-unknown-words=no + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid to define new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expectedly +# not used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. Default to name +# with leading underscore +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins + + +[BASIC] + +# Naming style matching correct argument names +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style +#argument-rgx= + +# Naming style matching correct attribute names +attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style +#attr-rgx= + +# Bad variable names which should always be refused, separated by a comma +bad-names=foo, + bar, + baz, + toto, + tutu, + tata + +# Naming style matching correct class attribute names +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style +#class-attribute-rgx= + +# Naming style matching correct class names +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming-style +#class-rgx= + +# Naming style matching correct constant names +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma +good-names=i, + j, + k, + ex, + Run, + _, + f, + fo, + c, + p, + e, + s, + l, + d, + dd, + v, + ty, + st, + ti, + MR, + pk, + pv, + ni, + nj, + nt, + ix, + jy, + it, + parId, + g, + h, + xa, + xb, + xc, + xd, + IA3, + dt, + fi + +# Include a hint for the correct naming format with invalid-name +include-naming-hint=no + +# Naming style matching correct inline iteration names +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style +#inlinevar-rgx= + +# Naming style matching correct method names +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style +#method-rgx= + +# Naming style matching correct module names +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +property-classes=abc.abstractproperty + +# Naming style matching correct variable names +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style +#variable-rgx= + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + + +[LOGGING] + +# Logging modules to check that the string format arguments are in logging +# function parameter format +logging-modules=logging + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )?<?https?://\S+>?$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=100 + +# Maximum number of lines in a module +max-module-lines=1000 + +# List of optional constructs for which whitespace checking is disabled. `dict- +# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. +# `trailing-comma` allows a space between comma and closing bracket: (a, ). +# `empty-line` allows space-only lines. +no-space-check=trailing-comma, + dict-separator + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[DESIGN] + +# Maximum number of arguments for function / method +max-args=10 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Maximum number of boolean expressions in a if statement +max-bool-expr=5 + +# Maximum number of branch for function / method body +max-branches=12 + +# Maximum number of locals for function / method body +max-locals=25 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + +# Maximum number of return / yield for function / method body +max-returns=6 + +# Maximum number of statements in function / method body +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[IMPORTS] + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Deprecated modules which should not be used, separated by a comma +deprecated-modules=regsub, + TERMIOS, + Bastion, + rexec + +# Create a graph of external dependencies in the given file (report RP0402 must +# not be disabled) +ext-import-graph= + +# Create a graph of every (i.e. internal and external) dependencies in the +# given file (report RP0402 must not be disabled) +import-graph= + +# Create a graph of internal dependencies in the given file (report RP0402 must +# not be disabled) +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + + +[CLASSES] + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when being caught. Defaults to +# "Exception" +overgeneral-exceptions=Exception diff --git a/Source/Python/submit.py b/Source/Python/submit.py new file mode 100755 index 0000000000000000000000000000000000000000..885c030f601eb1112d85026ec5bd667bbf9dd7d5 --- /dev/null +++ b/Source/Python/submit.py @@ -0,0 +1,267 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Anne Fouilloux (University of Oslo) +# +# @Date: October 2014 +# +# @Change History: +# +# November 2015 - Leopold Haimberger (University of Vienna): +# - job submission on ecgate and cca +# - job templates suitable for twice daily operational dissemination +# +# February 2018 - Anne Philipp (University of Vienna): +# - applied PEP8 style guide +# - added documentation +# - minor changes in programming style (for consistence) +# - changed path names to variables from config file +# - added option for writing mars requests to extra file +# additionally, as option without submitting the mars jobs +# - splitted submit function to use genshi templates for the +# job script and avoid code duplication +# +# @License: +# (C) Copyright 2014-2019. +# Anne Philipp, Leopold Haimberger +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +#******************************************************************************* +'''This script allows the user to extract meteorological fields from the ECMWF. + +It prepares the settings for retrieving the data from ECMWF servers and +process the resulting files to prepare them for the use with FLEXPART or +FLEXTRA. + +If it is supposed to work locally then it works through the necessary +functions get_mars_data and prepare_flexpart. Otherwise it prepares +a job script (korn shell) which will do the necessary work on the +ECMWF server. This script will de submitted via the ecaccess command +ecaccess-job-submit. + +This file can also be imported as a module which then contains the following +functions: + + * main - the main function of the script + * submit - calls mk_jobscript depending on operation mode and submits its + * mk_jobscript - creates the job script from a template + +Type: submit.py --help +to get information about command line parameters. +Read the documentation for usage instructions. +''' + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +from __future__ import print_function + +import os +import sys +from datetime import datetime, timedelta + +# software specific classes and modules from flex_extract +import _config +from Mods.tools import (setup_controldata, normal_exit, + submit_job_to_ecserver) +from Mods.get_mars_data import get_mars_data +from Mods.prepare_flexpart import prepare_flexpart +#from Classes.ControlFile import ControlFile + + +# ------------------------------------------------------------------------------ +# METHODS +# ------------------------------------------------------------------------------ + +def main(): + '''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" + or "queue=cca". + + Parameters + ---------- + + + Return + ------ + + ''' + + c, ppid, queue, job_template = setup_controldata() + + # on local side + # starting from an ECMWF server this would also be the local side + called_from_dir = os.getcwd() + if queue is None: + if c.inputdir[0] != '/': + c.inputdir = os.path.join(called_from_dir, c.inputdir) + if c.outputdir[0] != '/': + c.outputdir = os.path.join(called_from_dir, c.outputdir) + get_mars_data(c) + if c.request == 0 or c.request == 2: + prepare_flexpart(ppid, c) + exit_message = 'FLEX_EXTRACT IS DONE!' + else: + exit_message = 'PRINTING MARS_REQUESTS DONE!' + # send files to ECMWF server + else: + submit(job_template, c, queue) + exit_message = 'FLEX_EXTRACT JOB SCRIPT IS SUBMITED!' + + normal_exit(exit_message) + + return + +def submit(jtemplate, c, queue): + '''Prepares the job script and submits it to the specified queue. + + Parameters + ---------- + jtemplate : str + 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". + + c : ControlFile + Contains all the parameters of CONTROL file and + command line. + + queue : str + Name of queue for submission to ECMWF (e.g. ecgate or cca ) + + Return + ------ + + ''' + + if not c.oper: + # --------- create on demand job script ------------------------------------ + if c.purefc: + print('---- Pure forecast mode! ----') + else: + print('---- On-demand mode! ----') + + job_file = os.path.join(_config.PATH_JOBSCRIPTS, + jtemplate[:-5] + '.ksh') + + # divide time periode into specified number of job chunks + # to have multiple job scripts + if c.job_chunk: + start = datetime.strptime(c.start_date, '%Y%m%d') + end = datetime.strptime(c.end_date, '%Y%m%d') + chunk = timedelta(days=c.job_chunk) + oneday = timedelta(days=1) + + while start <= end: + if (start + chunk) <= end: + c.end_date = (start + chunk - oneday).strftime("%Y%m%d") + else: + c.end_date = end.strftime("%Y%m%d") + + clist = c.to_list() + mk_jobscript(jtemplate, job_file, clist) + + job_id = submit_job_to_ecserver(queue, job_file) + print('The job id is: ' + str(job_id.strip())) + + start = start + chunk + c.start_date = start.strftime("%Y%m%d") + # submit a single job script + else: + clist = c.to_list() + + mk_jobscript(jtemplate, job_file, clist) + + job_id = submit_job_to_ecserver(queue, job_file) + print('The job id is: ' + str(job_id.strip())) + + else: + # --------- create operational job script ---------------------------------- + print('---- Operational mode! ----') + + job_file = os.path.join(_config.PATH_JOBSCRIPTS, + jtemplate[:-5] + 'oper.ksh') + + c.start_date = '${MSJ_YEAR}${MSJ_MONTH}${MSJ_DAY}' + c.end_date = '${MSJ_YEAR}${MSJ_MONTH}${MSJ_DAY}' + c.basetime = '${MSJ_BASETIME}' + if c.maxstep > 24: + c.time = '${MSJ_BASETIME} {MSJ_BASETIME}' + + clist = c.to_list() + + mk_jobscript(jtemplate, job_file, clist) + + job_id = submit_job_to_ecserver(queue, job_file) + print('The job id is: ' + str(job_id.strip())) + + print('You should get an email per job with subject flex.hostname.pid') + + return + +def mk_jobscript(jtemplate, job_file, clist): + '''Creates the job script from template. + + Parameters + ---------- + jtemplate : str + 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". + + job_file : str + Path to the job script file. + + clist : list of str + Contains all necessary parameters for ECMWF CONTROL file. + + Return + ------ + + ''' + from genshi.template.text import NewTextTemplate + from genshi.template import TemplateLoader + from genshi.template.eval import UndefinedError + + # load template and insert control content as list + try: + loader = TemplateLoader(_config.PATH_TEMPLATES, auto_reload=False) + control_template = loader.load(jtemplate, + cls=NewTextTemplate) + + stream = control_template.generate(control_content=clist) + except UndefinedError as e: + print('... ERROR ' + str(e)) + + sys.exit('\n... error occured while trying to generate jobscript') + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + sys.exit('\n... error occured while trying to generate jobscript') + + # create jobscript file + try: + with open(job_file, 'w') as f: + f.write(stream.render('text')) + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + + sys.exit('\n... error occured while trying to write ' + job_file) + + return + + +if __name__ == "__main__": + main() diff --git a/Source/Pythontest/.coverage b/Source/Pythontest/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..47caf6bb2658216f0fa17ad108780a38c3a8e385 --- /dev/null +++ b/Source/Pythontest/.coverage @@ -0,0 +1 @@ +!coverage.py: This is a private format, don't read it directly!{"lines":{"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/test_suite.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/_config.py":[32,33,37,24,25,26,28,31],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/MarsRetrieval.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/install.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/get_mars_data.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/testecmwfapi.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/EcFlexpart.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/profiling.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/pythontest/TestInput.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/plot_retrieved.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/ControlFile.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/submit.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/pythontest/__init__.py":[13],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/pythontest/TestTools.py":[4,5,6,7,8,10,11,12,18,20,22,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,59,61,63,64,65,67,68,70,71,72,73,74,76,77,78,79,80,82,83,84,85,86,88,90,92,94,96,97,99,100,102,103,104,105,106,107,108,110,111,112,113,114,115,117,126,127,128,129,131,139,140,141,142,143,145,146,147,148,149,151,152,153,154,155,157,158,159,160,161,162,163,164,166,167,168,169,170,171,173,175,176,177,178,182,183,184,185,186,188,189,190,193],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/disaggregation.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/pythontest/TestPathes.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/GribTools.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/prepare_flexpart.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/tools.py":[517,518,519,520,521,522,523,524,526,527,529,50,51,52,53,54,55,56,62,76,77,78,81,82,83,84,85,86,89,90,91,92,93,94,95,96,99,100,101,102,103,104,107,110,112,115,116,117,118,120,121,122,123,124,125,127,129,131,144,145,146,147,148,149,151,153,191,210,213,214,215,216,217,218,219,220,221,222,223,224,229,230,232,237,279,315,328,329,330,331,335,338,353,354,355,356,357,358,360,363,386,387,388,389,390,391,392,396,398,416,418,420,433,434,435,436,438,440,442,444,476,477,478,481,482,483,484,485,486,488,489,491,493],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/pythontest/TestEcFlexpart.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/pythontest/TestUIOFiles.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/pythontest/TestInstall.py":[],"/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/UioFiles.py":[]}} \ No newline at end of file diff --git a/Source/Pythontest/TestEcFlexpart.py b/Source/Pythontest/TestEcFlexpart.py new file mode 100644 index 0000000000000000000000000000000000000000..046835e742b5ad7c4fe021c3243618f1453a5eea --- /dev/null +++ b/Source/Pythontest/TestEcFlexpart.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + + +import sys +import os +import inspect +import pytest + +sys.path.append('../python') +import _config +from classes.EcFlexpart import EcFlexpart +from classes.ControlFile import ControlFile +from mods.tools import silent_remove + +class TestEcFlexpart(): + ''' + ''' + + def test_write_namelist(self): + import filecmp + + control_file = os.path.join(_config.PATH_TEST_DIR, + 'TestData', + 'CONTROL.temp') + c = ControlFile(control_file) + flexpart = EcFlexpart(c) + + c.inputdir = 'TestData' + + # comparison file + testfile = os.path.join(_config.PATH_TEST_DIR, + 'TestData', + 'convert.nl.test') + + # create + flexpart.write_namelist(c) + + finalfile = os.path.join(c.inputdir, _config.FILE_NAMELIST) + assert filecmp.cmp(testfile, finalfile, shallow=False) + + # delete test file + silent_remove(finalfile) + + + + +# these functions should test the output and compare the results with an output +# of the old version and check if there are no differences!!! +# also check for errors?! Or check if it works for alle datasets and private public etc + + # - process_output + # - create + # - deacc_fluxes + # - retrieve + diff --git a/Source/Pythontest/TestInput.py b/Source/Pythontest/TestInput.py new file mode 100644 index 0000000000000000000000000000000000000000..596d9c722769cd7fcd64bf93460defb9c145b0ab --- /dev/null +++ b/Source/Pythontest/TestInput.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import os +import sys +import pytest + +sys.path.append('../Python') +from Classes.ControlFile import ControlFile +from Mods.tools import get_cmdline_args + + +class TestInput(): + ''' + Test class to test the reading of commandline arguments and + control file. + ''' + # ToDo + # create more tests for input + # 1. nur controlfile reading + # 2. check of parameter + + @classmethod + def setup_class(self): + # Default values for ArgumentParser + self.args = {'start_date':None, + 'end_date':None, + 'date_chunk':None, + 'basetime':None, + 'step':None, + 'levelist':None, + 'area':None, + 'inputdir':None, + 'outputdir':None, + 'flexpart_root_scripts':None, + 'ppid':None, + 'job_template':'job.temp', + 'queue':None, + 'controlfile':'CONTROL.test', + 'debug':0, + } + #sys.argv = ['dummy.py', '--start_date=20180101', '--debug=1', + # '--step=0/to/11/BY/3', '--area=20./20./0./90.'] + sys.argv = ['dummy.py', '--start_date=20180101'] + + self.args = get_cmdline_args() + + self.c = ControlFile('../../Testing/Regression/Unit/Testfiles/CONTROL.test') + + self.c.assign_args_to_control(self.args) + + self.c.check_conditions() + + + def test_args_reading(self): + + sys.argv = ['dummy.py', '--start_date=20180101', '--debug=1', + '--step=0/to/11/BY/3', '--area=20./20./0./90.'] + + arguments = get_cmdline_args() + + args_exp = {'start_date':'20180101', + 'end_date':None, + 'date_chunk':None, + 'basetime':None, + 'step':'0/to/11/BY/3', + 'levelist':None, + 'area':'20./20./0./90.', + 'inputdir':None, + 'outputdir':None, + 'flexpart_root_scripts':None, + 'ppid':None, + 'job_template':'job.temp', + 'queue':None, + 'controlfile':'CONTROL.test', + 'debug':1, + } + + assert vars(arguments) == args_exp + + + def test_args_assignment(self): + + import collections + + # expected parametervalue: + exp_dict = { + 'accuracy': '16', + 'addpar': ['186', '187', '188', '235', '139', '39'], + 'area': None, + 'basetime': None, + 'controlfile': 'CONTROL.test', + 'cwc': 0, + 'date_chunk': 3, + 'debug': 0, + 'destination': None, + 'dpdeta': '1', + 'dtime': '3', + 'ecfsdir': 'ectmp:/${USER}/econdemand/', + 'ecgid': None, + 'ecmwfdatadir': '/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/../', + 'ecstorage': '0', + 'ectrans': '1', + 'ecuid': None, + 'end_date': '20180101', + 'eta': '0', + 'etadiff': '0', + 'etapar': 77, + 'exedir': '/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/../src/', + 'expver': '1', + 'flexpart_root_scripts': '/raid60/nas/tmc/Anne/Interpolation/flexextract/flexextract/python/../', + 'format': 'GRIB1', + 'gateway': None, + 'gauss': '1', + 'grib2flexpart': '0', + 'grid': '5000', + 'inputdir': '../work', + 'job_template': 'job.temp', + 'left': '-15000', + 'level': '60', + 'levelist': '55/to/60', + 'lower': '30000', + 'mailfail': ['${USER}'], + 'mailops': ['${USER}'], + 'makefile': None, + 'marsclass': 'EI', + 'maxstep': 11, + 'number': 'OFF', + 'omega': '0', + 'omegadiff': '0', + 'outputdir': '../work', + 'prefix': 'EI', + 'resol': '63', + 'right': '45000', + 'smooth': '0', + 'start_date': '20180101', + 'step': ['00', '01', '02', '03', '04', '05', '00', '07', '08', '09', '10', '11', '00', '01', '02', '03', '04', '05', '00', '07', '08', '09', '10', '11'], + 'stream': 'OPER', + 'target': None, + 'time': ['00', '00', '00', '00', '00', '00', '06', '00', '00', '00', '00', '00', '12', '12', '12', '12', '12', '12', '18', '12', '12', '12', '12', '12'], + 'type': ['AN', 'FC', 'FC', 'FC', 'FC', 'FC', 'AN', 'FC', 'FC', 'FC', 'FC', 'FC', 'AN', 'FC', 'FC', 'FC', 'FC', 'FC', 'AN', 'FC', 'FC', 'FC', 'FC', 'FC'], + 'upper': '75000', + 'wrf': 0} + + exp_dict = collections.OrderedDict(sorted(exp_dict.items())) + cdict = collections.OrderedDict(sorted(vars(self.c).items())) + + # remove content which isn't comparable for different users + # or different operating systems + del cdict['ecfsdir_expanded'] + del cdict['mailops_expanded'] + del cdict['mailfail_expanded'] + + #print 'cdict\n', cdict + #print 'exp_dict\n', exp_dict + + #assert cdict == exp_dict + assert cdict == exp_dict + + return + + @classmethod + def teardown_class(self): + + return diff --git a/Source/Pythontest/TestInstall.py b/Source/Pythontest/TestInstall.py new file mode 100644 index 0000000000000000000000000000000000000000..0e9c086e2bc3fce26e26de21201ce1ef31bd8c11 --- /dev/null +++ b/Source/Pythontest/TestInstall.py @@ -0,0 +1,332 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + + +import sys +import os +import inspect +import subprocess +import tarfile +import errno +import shutil +from genshi.template import TemplateLoader +from genshi.template.eval import UndefinedError + +try: + import exceptions +except ImportError: + import builtins +import pytest +from mock import patch + +sys.path.append('../Python') +import _config +from . import _config_test +from install import (mk_tarball, un_tarball, mk_env_vars, mk_compilejob, + mk_job_template) + +from Mods.tools import make_dir, silent_remove + +# - main +# - get_install_cmdline_arguments +# - install_via_gateway +# - delete_convert_build +# - make_convert_build + +class TestInstall(): + ''' + ''' + @classmethod + def setup_class(self): + self.testdir = _config_test.PATH_TEST_DIR + self.testfilesdir = _config_test.PATH_TESTFILES_DIR + self.testinstalldir = _config_test.PATH_TESTINSTALL_DIR + + # make test tarballs from shell script + subprocess.check_output([os.path.join(self.testinstalldir, + 'mk_install_tar.sh')]) + + # un tar the test tarballs from shell script +# subprocess.check_output([os.path.join(self.testinstalldir, +# 'un_install_tar.sh')]) + + + + @patch('tarfile.open', side_effect=[subprocess.CalledProcessError(1,'test'), + OSError(errno.EEXIST)]) + def test_fail_mk_tarball_local(self, mock_open): + ecd = _config.PATH_FLEXEXTRACT_DIR + os.path.sep + # create test tarball and list its content files + tarballname = _config.FLEXEXTRACT_DIRNAME + '_localtest.tar' + + with pytest.raises(SystemExit): + mk_tarball(ecd + tarballname, 'local') + + def test_success_mk_tarball_local(self): + ecd = _config.PATH_FLEXEXTRACT_DIR + os.path.sep + + # list comparison files for tarball content + tar_test_dir = os.path.join(self.testdir, 'InstallTar') + tar_test_file = os.path.join(tar_test_dir, + 'flex_extract_v7.1_local.tar') + with tarfile.open(tar_test_file, 'r') as tar_handle: + comparison_list = tar_handle.getnames() + + # create test tarball and list its content files + tarballname = _config.FLEXEXTRACT_DIRNAME + '_localtest.tar' + mk_tarball(ecd + tarballname, 'local') + with tarfile.open(ecd + tarballname, 'r') as tar_handle: + tar_content_list = tar_handle.getnames() + + # remove test tar file from flex_extract directory + #os.remove(ecd + tarballname) + + # test if comparison filelist is equal to the + # filelist of tarball content + assert sorted(comparison_list) == sorted(tar_content_list) + + def test_success_mk_tarball_ecgate(self): + ecd = _config.PATH_FLEXEXTRACT_DIR + os.path.sep + + # list comparison files for tarball content + tar_test_dir = os.path.join(self.testdir, 'InstallTar') + tar_test_file = os.path.join(tar_test_dir, + 'flex_extract_v7.1_ecgate.tar') + with tarfile.open(tar_test_file, 'r') as tar_handle: + comparison_list = tar_handle.getnames() + + # create test tarball and list its content files + tarballname = _config.FLEXEXTRACT_DIRNAME + '_ecgatetest.tar' + mk_tarball(ecd + tarballname, 'ecgate') + with tarfile.open(ecd + tarballname, 'r') as tar_handle: + tar_content_list = tar_handle.getnames() + + # remove test tar file from flex_extract directory + os.remove(ecd + tarballname) + + # test if comparison filelist is equal to the + # filelist of tarball content + assert sorted(comparison_list) == sorted(tar_content_list) + + @patch('tarfile.open', side_effect=[tarfile.TarError, OSError]) + def test_fail_un_tarball(self, mock_open): + with pytest.raises(SystemExit): + un_tarball('testpath') + + def test_success_ecgate_un_tarball(self): + ecd = _config.PATH_FLEXEXTRACT_DIR + os.path.sep + + # list comparison files for tarball content + tar_test_dir = os.path.join(self.testdir, 'InstallTar') + cmp_dir = _config.FLEXEXTRACT_DIRNAME + '_ecgate' + tar_test_fedir = os.path.join(tar_test_dir, cmp_dir) + comparison_list = [] + for path, subdirs, files in os.walk(tar_test_fedir): + for name in files: + if 'tar' not in name: + comparison_list.append(os.path.relpath( + os.path.join(path, name), tar_test_fedir)) + + # untar in test directory + test_dir = os.path.join(tar_test_dir, 'test_ecgate') + make_dir(test_dir) + os.chdir(test_dir) + tarballname = _config.FLEXEXTRACT_DIRNAME + '_ecgate.tar' + un_tarball(os.path.join(tar_test_dir, tarballname)) + tarfiles_list = [] + for path, subdirs, files in os.walk(test_dir): + for name in files: + tarfiles_list.append(os.path.relpath( + os.path.join(path, name), test_dir)) + + # test for equality + assert sorted(tarfiles_list) == sorted(comparison_list) + + def test_success_local_un_tarball(self): + ecd = _config.PATH_FLEXEXTRACT_DIR + os.path.sep + + # list comparison files for tarball content + tar_test_dir = os.path.join(self.testdir, 'InstallTar') + cmp_dir = _config.FLEXEXTRACT_DIRNAME + '_local' + tar_test_fedir = os.path.join(tar_test_dir, cmp_dir) + comparison_list = [] + for path, subdirs, files in os.walk(tar_test_fedir): + for name in files: + if 'tar' not in name: + comparison_list.append(os.path.relpath( + os.path.join(path, name), tar_test_fedir)) + + # untar in test directory + test_dir = os.path.join(tar_test_dir, 'test_local') + make_dir(test_dir) + os.chdir(test_dir) + tarballname = _config.FLEXEXTRACT_DIRNAME + '_local.tar' + un_tarball(os.path.join(tar_test_dir, tarballname)) + tarfiles_list = [] + for path, subdirs, files in os.walk(test_dir): + for name in files: + tarfiles_list.append(os.path.relpath( + os.path.join(path, name), test_dir)) + + # test for equality + assert sorted(tarfiles_list) == sorted(comparison_list) + + @patch('_config.PATH_ECMWF_ENV', _config_test.PATH_TESTFILES_DIR+'/ecmwf_test') + def test_success_mk_env_vars(self): + import filecmp + + cmp_file = os.path.join(self.testfilesdir, + 'ECMWF_ENV.test') + + mk_env_vars('testuser', + 'testgroup', + 'gateway.test.ac.at', + 'user@destination') + + assert filecmp.cmp(cmp_file, _config.PATH_ECMWF_ENV, shallow=False) + + silent_remove(_config.PATH_ECMWF_ENV) + + @patch('genshi.template.TemplateLoader', side_effect=[OSError]) + def test_fail_load_mk_env_vars(self, mock_generate): + with pytest.raises(SystemExit): + mk_env_vars('testuser', + 'testgroup', + 'gateway.test.ac.at', + 'user@destination') + + def test_fail_generate_mk_env_vars(self): + with patch('genshi.template.TemplateLoader.load') as MockHelper: + MockHelper.return_value.generate.side_effect = UndefinedError('undefined') + with pytest.raises(SystemExit): + mk_env_vars('testuser', + 'testgroup', + 'gateway.test.ac.at', + 'user@destination') + + @patch('__builtin__.open', side_effect=[OSError(errno.EPERM)]) + def test_fail_open_mk_env_vars(self, mock_open): + with pytest.raises(SystemExit): + mk_env_vars('testuser', + 'testgroup', + 'gateway.test.ac.at', + 'user@destination') + + @patch('_config.FILE_INSTALL_COMPILEJOB', _config_test.PATH_TESTFILES_DIR+'/compilejob_test.ksh') + def test_success_mk_compilejob(self): + import filecmp + + testfile = os.path.join(self.testfilesdir, + 'compilejob.test') + + mk_compilejob('Makefile.TEST', + '', + 'testuser', + 'testgroup', + 'fp_root_test_path') + + finalfile = os.path.join(_config.PATH_JOBSCRIPTS, + _config.FILE_INSTALL_COMPILEJOB) + assert filecmp.cmp(testfile, finalfile, shallow=False) + + silent_remove(finalfile) + + @patch('genshi.template.TemplateLoader', side_effect=[OSError]) + def test_fail_load_mk_compilejob(self, mock_generate): + with pytest.raises(SystemExit): + mk_compilejob('Makefile.TEST', + '', + 'testuser', + 'testgroup', + 'fp_root_test_path') + + def test_fail_generate_mk_compilejob(self): + with patch('genshi.template.TemplateLoader.load') as MockHelper: + MockHelper.return_value.generate.side_effect = UndefinedError('undefined') + with pytest.raises(SystemExit): + mk_compilejob('Makefile.TEST', + '', + 'testuser', + 'testgroup', + 'fp_root_test_path') + + @patch('__builtin__.open', side_effect=[OSError(errno.EPERM)]) + def test_fail_open_mk_compilejob(self, mock_open): + with pytest.raises(SystemExit): + mk_compilejob('Makefile.TEST', + '', + 'testuser', + 'testgroup', + 'fp_root_test_path') + + @patch('_config.TEMPFILE_JOB', _config_test.PATH_TESTFILES_DIR+'/job_temp.test_test') + def test_success_mk_job_template(self): + import filecmp + + testfile = os.path.join(self.testfilesdir, + 'job.temp.test') + + mk_job_template('testuser', + 'testgroup', + 'gateway.test.ac.at', + 'dest@generic', + 'fp_root_test_path') + + finalfile = os.path.join(_config.PATH_TEMPLATES, + _config.TEMPFILE_JOB) + assert filecmp.cmp(testfile, finalfile, shallow=False) + + silent_remove(finalfile) + + @patch('genshi.template.TemplateLoader', side_effect=[OSError]) + def test_fail_load_mk_job_template(self, mock_generate): + with pytest.raises(SystemExit): + mk_job_template('testuser', + 'testgroup', + 'gateway.test.ac.at', + 'dest@generic', + 'fp_root_test_path') + + def test_fail_generate_mk_job_template(self): + with patch('genshi.template.TemplateLoader.load') as MockHelper: + MockHelper.return_value.generate.side_effect = UndefinedError('undefined') + with pytest.raises(SystemExit): + mk_job_template('testuser', + 'testgroup', + 'gateway.test.ac.at', + 'dest@generic', + 'fp_root_test_path') + + @patch('__builtin__.open', side_effect=[OSError(errno.EPERM)]) + def test_fail_open_mk_job_template(self, mock_open): + with pytest.raises(SystemExit): + mk_job_template('testuser', + 'testgroup', + 'gateway.test.ac.at', + 'dest@generic', + 'fp_root_test_path') + + @classmethod + def teardown_class(self): + + test_dir = os.path.join(self.testinstalldir, + _config.FLEXEXTRACT_DIRNAME + '_local') +# shutil.rmtree(test_dir) + test_dir = os.path.join(self.testinstalldir, + _config.FLEXEXTRACT_DIRNAME + '_ecgate') +# shutil.rmtree(test_dir) + + test_dir = os.path.join(self.testinstalldir, + 'test_local') +# shutil.rmtree(test_dir) + test_dir = os.path.join(self.testinstalldir, + 'test_ecgate') +# shutil.rmtree(test_dir) + + tar_file = os.path.join(self.testinstalldir, + _config.FLEXEXTRACT_DIRNAME + '_local.tar') +# os.remove(tar_file) + tar_file = os.path.join(self.testinstalldir, + _config.FLEXEXTRACT_DIRNAME + '_ecgate.tar') +# os.remove(tar_file) + pass diff --git a/Source/Pythontest/TestPathes.py b/Source/Pythontest/TestPathes.py new file mode 100644 index 0000000000000000000000000000000000000000..f02e924bdfc0732e9f15b5dd74a675d2fab54084 --- /dev/null +++ b/Source/Pythontest/TestPathes.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import os +import sys +import pytest + +sys.path.append("../python") +import _config + +def test_path_localpython(): + assert os.path.exists(_config.PATH_LOCAL_PYTHON) == 1 + +def test_path_flexextract(): + assert os.path.exists(_config.PATH_FLEXEXTRACT_DIR) == 1 + +def test_path_flexextract_name(): + version = _config._VERSION_STR + flexextract_name = 'flex_extract_v' + version + assert os.path.basename(_config.PATH_FLEXEXTRACT_DIR) == flexextract_name + +def test_path_templates(): + assert os.path.exists(_config.PATH_TEMPLATES) == 1 + +def test_path_vtable(): + assert os.path.exists(_config.PATH_GRIBTABLE) == 1 + +def test_file_vtable(): + assert os.path.isfile(_config.PATH_GRIBTABLE) == 1 + +def test_path_run(): + assert os.path.exists(_config.PATH_RUN_DIR) == 1 + +def test_path_control(): + assert os.path.exists(_config.PATH_CONTROLFILES) == 1 diff --git a/Source/Pythontest/TestTools.py b/Source/Pythontest/TestTools.py new file mode 100644 index 0000000000000000000000000000000000000000..0b88578e0487242ad66395de5c1000012ec97b84 --- /dev/null +++ b/Source/Pythontest/TestTools.py @@ -0,0 +1,348 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# for the gateway tests, the env vars of ECUID and ECGID have to be set upfront + +import os +import sys +import errno +#from exceptions import OSError +import subprocess +import pipes + +try: + import exceptions +except ImportError: + import builtins + +import pytest +from mock import patch, call +#from mock import PropertyMock + + +import _config +from . import _config_test +from Classes.ControlFile import ControlFile +from Mods.tools import (none_or_str, none_or_int, get_cmdline_args, + read_ecenv, clean_up, my_error, send_mail, + normal_exit, product, silent_remove, + init128, to_param_id, get_list_as_string, make_dir, + put_file_to_ecserver, submit_job_to_ecserver) + +class TestTools(object): + """Test the tools module.""" + + def setup_method(self): + self.testdir = _config_test.PATH_TEST_DIR + self.testfilesdir = _config_test.PATH_TESTFILES_DIR + self.c = ControlFile(self.testdir+'/Controls/CONTROL.test') + + def test_nonestr_none_or_int(self): + assert None == none_or_int('None') + + def test_intstr_none_or_int(self): + assert 42 == none_or_int('42') + + def test_nonestr_none_or_str(self): + assert None == none_or_str('None') + + def test_anystr_none_or_str(self): + assert 'test' == none_or_str('test') + + def test_fail_get_cmdline_arguments(self): + sys.argv = ['dummy.py', '--wrong=1'] + with pytest.raises(SystemExit): + results = get_cmdline_args() + + def test_default_get_cmdline_arguments(self): + cmd_dict_control = {'start_date': None, + 'end_date': None, + 'date_chunk': None, + 'basetime': None, + 'step': None, + 'levelist': None, + 'area': None, + 'inputdir': None, + 'outputdir': None, + 'job_template': None, + 'job_chunk': None, + 'ppid': None, + 'job_template': 'job.temp', + 'queue': None, + 'controlfile': 'CONTROL_EA5', + 'debug': None, + 'public': None, + 'request': None, + 'oper': None, + 'rrint': None} + + sys.argv = ['dummy.py'] + + results = get_cmdline_args() + + assert cmd_dict_control == vars(results) + + def test_input_get_cmdline_arguments(self): + cmd_dict_control = {'start_date': '20180101', + 'end_date': '20180101', + 'date_chunk': 3, + 'basetime': 12, + 'step': '1', + 'levelist': '1/to/10', + 'area': '50/10/60/20', + 'inputdir': '../work', + 'outputdir': None, + 'ppid': '1234', + 'job_template': 'job.sh', + 'queue': 'ecgate', + 'controlfile': 'CONTROL.WORK', + 'debug': 1, + 'public': None, + 'request': 0, + 'rrint': 0, + 'job_chunk': None, + 'oper': 0} + + sys.argv = ['dummy.py', + '--start_date=20180101', + '--end_date=20180101', + '--date_chunk=3', + '--basetime=12', + '--step=1', + '--levelist=1/to/10', + '--area=50/10/60/20', + '--inputdir=../work', + '--outputdir=None', + '--ppid=1234', + '--job_template=job.sh', + '--queue=ecgate', + '--controlfile=CONTROL.WORK', + '--debug=1', + '--public=None', + '--request=0', + '--rrint=0', + '--job_chunk=None', + '--oper=0'] + + results = get_cmdline_args() + + assert cmd_dict_control == vars(results) + + def test_success_init128(self): + table128 = init128(_config.PATH_GRIBTABLE) + expected_sample = {'078': 'TCLW', '130': 'T', '034': 'SST'} + # check a sample of parameters which must have been read in + assert all((k in table128 and table128[k] == v) + for k, v in expected_sample.items()) + + @patch('builtins.open', side_effect=[OSError(errno.EEXIST)]) + def test_fail_open_init128(self, mock_openfile): + with pytest.raises(SystemExit): + table128 = init128(_config.PATH_GRIBTABLE) + + @pytest.mark.parametrize( + 'ipar_str, opar_listint', + [('SP/LSP/SSHF', [134, 142, 146]), + ('T', [130]), + ('', []), + (None, []), + ('testtest', []), + ('130/142', [130, 142]), + (130, [130]), + (50.56, [])]) + def test_to_param_id(self, ipar_str, opar_listint): + table128 = init128(_config.PATH_GRIBTABLE) + ipars = to_param_id(ipar_str, table128) + assert sorted(ipars) == sorted(opar_listint) + + @patch('traceback.format_stack', return_value='empty trace') + @patch('Mods.tools.send_mail', return_value=0) + def test_success_my_error(self, mock_mail, mock_trace, capfd): + with pytest.raises(SystemExit): + my_error('Failed!') + out, err = capfd.readouterr() + assert out == "Failed!\n\nempty_trace\n" + + @patch('subprocess.Popen') + @patch('os.getenv', return_value='user') + @patch('os.path.expandvars', return_value='user') + def test_success_userenv_twouser_send_mail(self, mock_os, mock_env, mock_popen, capfd): + mock_popen.return_value = subprocess.Popen(["echo", "Hello Test!"], + stdout=subprocess.PIPE) + send_mail(['${USER}', 'any_user'], 'ERROR', message='error mail') + out, err = capfd.readouterr() + assert out == 'Email sent to user\nEmail sent to user\n' + + @patch('subprocess.Popen') + @patch('os.path.expandvars', return_value='any_user') + def test_success_send_mail(self, mock_os, mock_popen, capfd): + mock_popen.return_value = subprocess.Popen(["echo", "Hello Test!"], + stdout=subprocess.PIPE) + send_mail(['any-user'], 'ERROR', message='error mail') + out, err = capfd.readouterr() + assert out == 'Email sent to any_user\n' + + @patch('subprocess.Popen', side_effect=[ValueError, OSError]) + @patch('os.path.expandvars', return_value='any_user') + def test_fail_valueerror_send_mail(self, mock_osvar, mock_popen): + with pytest.raises(SystemExit): # ValueError + send_mail(['any-user'], 'ERROR', message='error mail') + with pytest.raises(SystemExit): # OSError + send_mail(['any-user'], 'ERROR', message='error mail') + + def test_success_read_ecenv(self): + envs_ref = {'ECUID': 'testuser', + 'ECGID': 'testgroup', + 'GATEWAY': 'gateway.test.ac.at', + 'DESTINATION': 'user@destination' + } + envs = read_ecenv(self.testfilesdir + '/ECMWF_ENV.test') + + assert envs_ref == envs + + @patch('builtins.open', side_effect=[OSError(errno.EPERM)]) + def test_fail_read_ecenv(self, mock_open): + with pytest.raises(SystemExit): + read_ecenv('any_file') + + @patch('glob.glob', return_value=[]) + @patch('Mods.tools.silent_remove') + def test_empty_clean_up(self, mock_rm, mock_clean): + clean_up(self.c) + mock_rm.assert_not_called() + + @patch('glob.glob', return_value=['any_file','EIfile']) + @patch('os.remove', return_value=0) + def test_success_clean_up(self, mock_rm, mock_glob): + + self.c.prefix = 'EI' + self.c.ecapi = False + clean_up(self.c) + mock_rm.assert_has_calls([call('any_file')]) + mock_rm.reset_mock() + + + def test_default_normal_exit(self, capfd): + normal_exit() + out, err = capfd.readouterr() + assert out == 'Done!\n' + + def test_message_normal_exit(self, capfd): + normal_exit('Hi there!') + out, err = capfd.readouterr() + assert out == 'Hi there!\n' + + def test_int_normal_exit(self, capfd): + normal_exit(42) + out, err = capfd.readouterr() + assert out == '42\n' + + @pytest.mark.parametrize( + 'input1, input2, output_list', + [('ABC','xy',[('A','x'),('A','y'),('B','x'),('B','y'),('C','x'),('C','y')]), + (range(1), range(1), [(0,0),(0,1),(1,0),(1,1)])]) + def test_success_product(self, input1, input2, output_list): + index = 0 + for prod in product(input1, input2): + assert isinstance(prod, tuple) + assert prod == output_list[index] + index += 1 + + @pytest.mark.parametrize( + 'input1, input2, output_list', + [(1,1,(1,1))]) + def test_fail_product(self, input1, input2, output_list): + index = 0 + with pytest.raises(SystemExit): + for prod in product(input1, input2): + assert isinstance(prod, tuple) + assert prod == output_list[index] + index += 1 + + def test_success_silent_remove(self): + testfile = self.testfilesdir + 'test.txt' + open(testfile, 'w').close() + silent_remove(testfile) + assert os.path.isfile(testfile) == False + + @patch('os.remove', side_effect=OSError(errno.ENOENT)) + def test_fail_notexist_silent_remove(self, mock_rm): + with pytest.raises(OSError) as pytest_wrapped_e: + silent_remove('any_dir') + assert pytest_wrapped_e.e.errno == errno.ENOENT + + @patch('os.remove', side_effect=OSError(errno.EEXIST)) + def test_fail_any_silent_remove(self, mock_rm): + with pytest.raises(OSError): + silent_remove('any_dir') + + @pytest.mark.parametrize( + 'input_list, output_list', + [([],''), + ([1, 2, 3.5, '...', 'testlist'], '1, 2, 3.5, ..., testlist'), + ('2', '2')]) + def test_success_get_list_as_string(self, input_list, output_list): + assert output_list == get_list_as_string(input_list) + + @patch('os.makedirs', side_effect=[OSError(errno.EEXIST)]) + def test_warning_exist_make_dir(self, mock_make): + with pytest.raises(OSError) as pytest_wrapped_e: + make_dir('existing_dir') + assert pytest_wrapped_e.e.errno == errno.EEXIST + + @patch('os.makedirs', side_effect=OSError) + def test_fail_any_make_dir(self, mock_makedir): + with pytest.raises(OSError): + make_dir('any_dir') + + def test_fail_empty_make_dir(self): + with pytest.raises(OSError): + make_dir('') + + def test_success_make_dir(self): + testdir = '/testing_mkdir' + make_dir(self.testdir + testdir) + assert os.path.exists(self.testdir + testdir) == True + os.rmdir(self.testdir + testdir) + + + @patch('subprocess.check_output', side_effect=[subprocess.CalledProcessError(1,'test')]) + def test_fail_put_file_to_ecserver(self, mock_co): + with pytest.raises(SystemExit): + put_file_to_ecserver(self.testfilesdir, 'test_put_to_ecserver.txt', + 'ecgate', 'ex_ECUID', 'ex_ECGID') + + @patch('subprocess.check_output', return_value=0) + def test_general_success_put_file_to_ecserver(self, mock_co): + result = put_file_to_ecserver(self.testfilesdir, 'test_put_to_ecserver.txt', + 'ecgate', 'ex_ECUID', 'ex_ECGID') + assert result == None + + @pytest.mark.msuser_pw + @pytest.mark.gateway + @pytest.mark.skip(reason="easier to ignore for now - implement in final version") + def test_full_success_put_file_to_ecserver(self): + ecuid = os.environ['ECUID'] + ecgid = os.environ['ECGID'] + put_file_to_ecserver(self.testfilesdir, 'test_put_to_ecserver.txt', + 'ecgate', ecuid, ecgid) + assert subprocess.call(['ssh', ecuid+'@ecaccess.ecmwf.int' , + 'test -e ' + + pipes.quote('/home/ms/'+ecgid+'/'+ecuid)]) == 0 + + @patch('subprocess.check_output', side_effect=[subprocess.CalledProcessError(1,'test'), + OSError]) + def test_fail_submit_job_to_ecserver(self, mock_co): + with pytest.raises(SystemExit): + job_id = submit_job_to_ecserver('ecgate', 'job.ksh') + + @pytest.mark.msuser_pw + @pytest.mark.gateway + @pytest.mark.skip(reason="easier to ignore for now - implement in final version") + def test_success_submit_job_to_ecserver(self): + job_id = submit_job_to_ecserver('ecgate', + os.path.join(self.testfilesdir, + 'test_put_to_ecserver.txt')) + assert job_id.strip().isdigit() == True + + diff --git a/Source/Pythontest/TestUIOFiles.py b/Source/Pythontest/TestUIOFiles.py new file mode 100644 index 0000000000000000000000000000000000000000..c5018b75c61ae93b705f9af847c3fdb6cb4118e1 --- /dev/null +++ b/Source/Pythontest/TestUIOFiles.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import os +import sys +import pytest +from mock import patch + +from . import _config_test +sys.path.append('../Python') + +from Classes.UioFiles import UioFiles + + +class TestUioFiles(): + """Test class to test the UIOFiles methods.""" + + @classmethod + def setup_class(self): + """Setup status""" + self.testpath = os.path.join(_config_test.PATH_TEST_DIR, 'Dir') + # Initialise and collect filenames + self.files = UioFiles(self.testpath, '*.grb') + + def test_listFiles(self): + """Test the listFiles method from class UIOFiles.""" + # set comparison information + self.expected = ['FCGG__SL.20160410.40429.16424.grb', + 'FCOG__ML.20160410.40429.16424.grb', + 'FCSH__ML.20160410.40429.16424.grb', + 'OG_OROLSM__SL.20160410.40429.16424.grb', + 'FCOG_acc_SL.20160409.40429.16424.grb', + 'FCOG__SL.20160410.40429.16424.grb', + 'FCSH__SL.20160410.40429.16424.grb'] + + # get the basename to just check for equality of filenames + filelist = [os.path.basename(f) for f in self.files.files] + # comparison of expected filenames against the collected ones + assert sorted(self.expected) == sorted(filelist) + + + def test_delete_files(self): + """Test if a file is deleted.""" + testfile = os.path.join(self.testpath, 'test.test') + open(testfile, 'w').close() + iofile = UioFiles(testfile, 'test.test') + iofile.delete_files() + assert [] == UioFiles(testfile, 'test.test').files + + + def test_str_(self): + """Test if list of file is correctly converted to string.""" + self.expected = "FCSH__SL.20160410.40429.16424.grb, "\ + "FCSH__ML.20160410.40429.16424.grb, "\ + "FCOG__SL.20160410.40429.16424.grb, "\ + "FCOG__ML.20160410.40429.16424.grb, "\ + "OG_OROLSM__SL.20160410.40429.16424.grb, "\ + "FCGG__SL.20160410.40429.16424.grb, "\ + "FCOG_acc_SL.20160409.40429.16424.grb" + assert self.expected == self.files.__str__() diff --git a/Source/Pythontest/__init__.py b/Source/Pythontest/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..749a1095b83a8b21e7836cd736cce1a0a7be4751 --- /dev/null +++ b/Source/Pythontest/__init__.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +@Author: Anne Philipp (University of Vienna) + +@Date: March 2018 + +@License: + (C) Copyright 2014 UIO. + + This software is licensed under the terms of the Apache Licence Version 2.0 + which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +""" \ No newline at end of file diff --git a/Source/Pythontest/_config_test.py b/Source/Pythontest/_config_test.py new file mode 100644 index 0000000000000000000000000000000000000000..e9fcca456ab557c808a76a7b91ab10f92b81d97f --- /dev/null +++ b/Source/Pythontest/_config_test.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +''' +******************************************************************************* + @Author: Anne Philipp (University of Vienna) + + @Date: August 2018 + + @Change History: + + @License: + (C) Copyright 2014-2018. + + This software is licensed under the terms of the Apache Licence Version 2.0 + which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + + @Description: + Contains constant value parameter for flex_extract. + +******************************************************************************* +''' + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +import os +import sys + +sys.path.append('../Python') +import _config + +# ------------------------------------------------------------------------------ +# FILENAMES +# ------------------------------------------------------------------------------ + + +# ------------------------------------------------------------------------------ +# DIRECTORY NAMES +# ------------------------------------------------------------------------------ +TEST_DIR = 'Testing/Regression/Unit' +TESTFILES_DIR = 'Testfiles' +TESTINSTALL_DIR = 'InstallTar' +# ------------------------------------------------------------------------------ +# PATHES +# ------------------------------------------------------------------------------ +PATH_TEST_DIR = os.path.join(_config.PATH_FLEXEXTRACT_DIR, TEST_DIR) +PATH_TESTFILES_DIR = os.path.join(PATH_TEST_DIR, TESTFILES_DIR) +PATH_TESTINSTALL_DIR = os.path.join(PATH_TEST_DIR, TESTINSTALL_DIR) diff --git a/Source/Pythontest/conftest.py b/Source/Pythontest/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..f9c25511ac79cd96067729c90b5fc0e4daf6b47e --- /dev/null +++ b/Source/Pythontest/conftest.py @@ -0,0 +1,10 @@ +import sys +import pytest + +sys.path.append('../Python') +import _config + +#@pytest.fixture +#def prep_test_env(): +# testdir = _config.PATH_TEST_DIR +print('') diff --git a/Source/Pythontest/leos_test_suit.py b/Source/Pythontest/leos_test_suit.py new file mode 100755 index 0000000000000000000000000000000000000000..6cd9ed7cfb41cd7faf5b1f5487524535216a889d --- /dev/null +++ b/Source/Pythontest/leos_test_suit.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +#******************************************************************************* +# @Author: Leopold Haimberger (University of Vienna) +# +# @Date: December 2015 +# +# @Change History: +# +# February 2018 - Anne Philipp (University of Vienna): +# - applied PEP8 style guide +# - added documentation +# +# @License: +# (C) Copyright 2015-2018. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# @Program Functionality: +# This script triggers the flex_extract test suite. Call with +# test_suite.py [test group] +# +# @Program Content: +# +#******************************************************************************* + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +import os +import sys +import json +import subprocess + +# ------------------------------------------------------------------------------ +# PROGRAM +# ------------------------------------------------------------------------------ +try: + taskfile = open('test_suite.json') +except IOError: + print 'could not open suite definition file test_suite.json' + exit() + +if not os.path.isfile('../src/CONVERT2'): + print '../src/CONVERT2 could not be found' + print 'please run "install.py --target=local" first' + exit() + +fprs = os.getenv('FLEXPART_ROOT_SCRIPTS') +if fprs is None: + print 'FLEXPART_ROOT_SCRIPTS not set .. some test jobs may fail' + +tasks = json.load(taskfile, encoding='latin-1') +taskfile.close() +if not os.path.exists('../test'): + os.makedirs('../test') +if len(sys.argv) > 1: + groups = sys.argv[1:] +else: + groups = ['xinstall', 'default', 'ops', 'work', 'cv', 'fc']#,'hires'] +jobcounter = 0 +jobfailed = 0 +for g in groups: + try: + tk, tv = g, tasks[g] + finally: + pass + garglist = [] + for ttk, ttv in tv.iteritems(): + if isinstance(ttv, basestring): + if ttk != 'script': + garglist.append('--' + ttk) + if ttv[0] == '$': + garglist.append(os.path.expandvars(ttv)) + else: + garglist.append(ttv) + for ttk, ttv in tv.iteritems(): + if isinstance(ttv, dict): + arglist = [] + for tttk, tttv in ttv.iteritems(): + if isinstance(tttv, basestring): + arglist.append('--' + tttk) + if '$' in tttv[0]: + arglist.append(os.path.expandvars(tttv)) + else: + arglist.append(tttv) + print 'Command: ', ' '.join([tv['script']] + garglist + arglist) + o = '../test/' + tk + '_' + ttk + '_' + '_'.join(ttv.keys()) + print 'Output will be sent to ', o + f = open(o, 'w') + try: + p = subprocess.check_call([tv['script']] + garglist + arglist, + stdout=f, stderr=f) + except subprocess.CalledProcessError as e: + f.write('\nFAILED\n') + print 'FAILED' + jobfailed += 1 + jobcounter += 1 + f.close() + +print 'Test suite tasks completed' +print str(jobcounter-jobfailed) + ' successful, ' + str(jobfailed) + ' failed' +print 'If tasks have been submitted via ECACCESS please check emails' diff --git a/Source/Pythontest/leos_testsuite.json b/Source/Pythontest/leos_testsuite.json new file mode 100644 index 0000000000000000000000000000000000000000..ffc9b4392c74348bb9a70ac8c3fa35de975cd30a --- /dev/null +++ b/Source/Pythontest/leos_testsuite.json @@ -0,0 +1,79 @@ +{ +"install": { +"script": "install.py", +"control": null, +"inputdir": null, +"ecuid":"lh0", +"ecgid":"spatlh00", +"gateway":"srvx7.img.univie.ac.at", +"destination":"leo@genericSftp", +"local": {"target":"local"}, +"local_flexpart": {"target":"local","flexpart_root_scripts":"$FLEXPART_ROOT_SCRIPTS"}, +"ecgate": {"target":"ecgate"}, +"cca": {"target":"cca"} +}, +"default": { +"script": "submit.py", +"control": null, +"inputdir": null, +"start_date": "20131107", +"local": {}, +"local_flexpart": {"flexpart_root_scripts":"$FLEXPART_ROOT_SCRIPTS"}, +"ecgate": {"queue":"ecgate"}, +"cca": {"queue":"cca"} +}, +"work": { +"script": "submit.py", +"control": null, +"start_date": "20131107", +"inputdir": "$SCRATCH/work", +"local_flexpart": {"flexpart_root_scripts":"$FLEXPART_ROOT_SCRIPTS"} +}, +"fc": { +"script": "submit.py", +"control": "CONTROL_FC", +"inputdir": "$SCRATCH/workfc", +"local_flexpart": {"flexpart_root_scripts":"$FLEXPART_ROOT_SCRIPTS"} +}, +"cv": { +"script": "submit.py", +"control": "CONTROL_CV", +"inputdir": "$SCRATCH/workcv", +"start_date": "20131107", +"local_flexpart": {"flexpart_root_scripts":"$FLEXPART_ROOT_SCRIPTS"} +}, +"hires": { +"script": "submit.py", +"control": "CONTROL_HIRES", +"inputdir": "$SCRATCH/workhires", +"local_flexpart": {"flexpart_root_scripts":"$FLEXPART_ROOT_SCRIPTS"}, +"ecgate": {"queue":"ecgate"} +}, +"hiresgauss": { +"script": "submit.py", +"control": "CONTROL_HIRESGAUSS", +"inputdir": "$SCRATCH/workhiresgauss", +"basetime": "00", +"local_flexpart": {"flexpart_root_scripts":"$FLEXPART_ROOT_SCRIPTS"}, +"ecgate": {"queue":"ecgate"}, +"cca": {"queue":"cca"} +}, +"ops": { +"script": "submit.py", +"start_date": "20131108", +"control": "CONTROL_OPS_V6.0_4V.temp", +"inputdir": "$SCRATCH/workops2", +"local_flexpart": {"basetime":"00"}, +"local_flexpart12": {"basetime":"12"}, +"ecgate": {"queue":"ecgate","basetime":"00"} +}, +"opsfc": { +"script": "submit.py", +"start_date": "20131108", +"control": "CONTROL_OPS_V6.0", +"inputdir": "$SCRATCH/workopsfc", +"local_flexpart": {"basetime":"00"}, +"local_flexpart12": {"basetime":"12"}, +"ecgate": {"queue":"ecgate","basetime":"00"} +} +} \ No newline at end of file diff --git a/Source/Pythontest/pytest.ini b/Source/Pythontest/pytest.ini new file mode 100644 index 0000000000000000000000000000000000000000..7e7fce4c544fd5f10d5bd38ef83a9430018e94ee --- /dev/null +++ b/Source/Pythontest/pytest.ini @@ -0,0 +1,5 @@ +# content of pytest.ini +[pytest] +markers = + msuser_pw: Test that can be executed only as a member-state user. Password required. + gateway: Test that can be executed only in the gateway mode. diff --git a/Templates/ECMWF_ENV.template b/Templates/ECMWF_ENV.template new file mode 100644 index 0000000000000000000000000000000000000000..515da08ea1d6cc2190074709f8a5bc6b22b3e3c7 --- /dev/null +++ b/Templates/ECMWF_ENV.template @@ -0,0 +1,4 @@ +ECUID $user_name +ECGID $user_group +GATEWAY $gateway_name +DESTINATION $destination_name diff --git a/Templates/compilejob.template b/Templates/compilejob.template new file mode 100644 index 0000000000000000000000000000000000000000..1ea2e88f2b6863ba0a10e7a588a305359b0d1342 --- /dev/null +++ b/Templates/compilejob.template @@ -0,0 +1,71 @@ +#!/bin/ksh + +# ON ECGB: +# start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server +# start with sbatch NAME_OF_THIS_FILE directly on machine + +#SBATCH --workdir=/scratch/ms/$usergroup/$username +#SBATCH --qos=normal +#SBATCH --job-name=flex_ecmwf +#SBATCH --output=flex_ecmwf.%j.out +#SBATCH --error=flex_ecmwf.%j.out +#SBATCH --mail-type=FAIL +#SBATCH --time=12:00:00 + +## CRAY specific batch requests +##PBS -N flex_ecmwf +##PBS -q ns +##PBS -S /usr/bin/ksh +##PBS -o /scratch/ms/$usergroup/$username/flex_ecmwf.$${Jobname}.$${Job_ID}.out +# job output is in .ecaccess_DO_NOT_REMOVE +##PBS -j oe +##PBS -V +##PBS -l EC_threads_per_task=1 +##PBS -l EC_memory_per_task=3200MB + +set -x +export VERSION=$version_number +case $${HOST} in + *ecg*) + module unload grib_api + module unload eccodes + module unload python + module unload emos + module load python3/3.6.8-01 + module load eccodes/2.13.0 + module load emos/455-r64 + export FLEXPART_ROOT_SCRIPTS=$fp_root_scripts + export MAKEFILE=$makefile + ;; + *cca*) + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + module load eccodes/2.13.0 + module load emos/455-r64 + echo $${GROUP} + echo $${HOME} + echo $${HOME} | awk -F / '{print $1, $2, $3, $4}' + export GROUP=`echo $${HOME} | awk -F / '{print $4}'` + export SCRATCH=/scratch/ms/$${GROUP}/$${USER} + export FLEXPART_ROOT_SCRIPTS=$fp_root_scripts + export MAKEFILE=$makefile + ;; +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 $fortran_program +make -f $${MAKEFILE} >flexcompile 2>flexcompile + +ls -l $fortran_program >>flexcompile +if [ $$? -eq 0 ]; then + echo 'SUCCESS!' >>flexcompile + mail -s flexcompile.$${HOST}.$$$$ $${USER} <flexcompile +else + echo Environment: >>flexcompile + env >> flexcompile + mail -s "ERROR! flexcompile.$${HOST}.$$$$" $${USER} <flexcompile +fi diff --git a/Templates/convert.nl b/Templates/convert.nl new file mode 100644 index 0000000000000000000000000000000000000000..c0c8fa4812e066d3cb2ee0df616c927106afd64c --- /dev/null +++ b/Templates/convert.nl @@ -0,0 +1,19 @@ +&NAMGEN + maxl = $maxl, + maxb = $maxb, + mlevel = $mlevel, + mlevelist = "$mlevelist", + mnauf = $mnauf, + metapar = $metapar, + rlo0 = $rlo0, + rlo1 = $rlo1, + rla0 = $rla0, + rla1 = $rla1, + momega = $momega, + momegadiff = $momegadiff, + mgauss = $mgauss, + msmooth = $msmooth, + meta = $meta, + metadiff = $metadiff, + mdpdeta = $mdpdeta +/ diff --git a/grib_templates/ecmwf_grib1_table_128 b/Templates/ecmwf_grib1_table_128 similarity index 98% rename from grib_templates/ecmwf_grib1_table_128 rename to Templates/ecmwf_grib1_table_128 index b14d7afb69fd6f687840d2c406698f56f3d696d8..7ff3a6c95c3c8b72b0b3923915e5a357d9c27d30 100644 --- a/grib_templates/ecmwf_grib1_table_128 +++ b/Templates/ecmwf_grib1_table_128 @@ -59,7 +59,8 @@ 063 Start time for skin temp. diff. s TSDIFS 0 -9999.00 064 Finish time for skin temp. diff. s TSDIFE 0 -9999.00 065 Skin temperature difference K TSDIF 0 -9999.00 -!66 to 77 Unused +!66 to 76 Unused +077 Eta-coordinate vertical velocity s**-1 ETADOT 0 -9999.00 078 Total column liquid water kg m**-2 TCLW 0 -9999.00 079 Total column ice water kg m**-2 TCIW 0 -9999.00 !80 to 120 Experimental products (contents may vary) @@ -90,7 +91,7 @@ 148 Charnock - CHNK 0 -9999.00 149 Surface net radiation W m**-2 s SNR 0 -9999.00 150 Top net radiation W m**-2 s TNR 0 -9999.00 -151 Mean sea level pressure Pa MSLP 0 -9999.00 +151 Mean sea level pressure Pa MSL 0 -9999.00 152 Logarithm of surface pressure ln(Pa) LNSP 0 -9999.00 153 Short-wave heating rate K SWHR 0 -9999.00 154 Long-wave heating rate K LWHR 0 -9999.00 @@ -194,4 +195,4 @@ 252 Adiabatic tendency of humidity kg (H2O) kg**-1 ATHE 0 -9999.00 253 Adiabatic tendency of zonal wind m s**-1 ATZE 0 -9999.00 254 Adiabatic tendency of mer. wind m s**-1 ATMW 0 -9999.00 -255 Indicates a missing value - MISS 0 -9999.00 \ No newline at end of file +255 Indicates a missing value - MISS 0 -9999.00 diff --git a/Templates/job.temp b/Templates/job.temp new file mode 100644 index 0000000000000000000000000000000000000000..77950192593d616bc870690fa2388124d61ec808 --- /dev/null +++ b/Templates/job.temp @@ -0,0 +1,80 @@ +#!/bin/ksh + +# ON ECGB: +# start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server +# start with sbatch NAME_OF_THIS_FILE directly on machine + +#SBATCH --workdir=/scratch/ms/at/km4a +#SBATCH --qos=normal +#SBATCH --job-name=flex_ecmwf +#SBATCH --output=flex_ecmwf.%j.out +#SBATCH --error=flex_ecmwf.%j.out +#SBATCH --mail-type=FAIL +#SBATCH --time=12:00:00 + +## CRAY specific batch requests +##PBS -N flex_ecmwf +##PBS -q np +##PBS -S /usr/bin/ksh +## -o /scratch/ms/at/km4a/flex_ecmwf.$${PBS_JOBID}.out +## job output is in .ecaccess_DO_NOT_REMOVE +##PBS -j oe +##PBS -V +##PBS -l EC_threads_per_task=24 +##PBS -l EC_memory_per_task=32000MB + +set -x +export VERSION=7.1 +case $${HOST} in + *ecg*) + module unload grib_api + module unload eccodes + module unload python + module unload emos + module load python3/3.6.8-01 + module load eccodes/2.13.0 + module load emos/455-r64 + export PATH=$${PATH}:$${HOME}/flex_extract_v7.1/Source/Python + ;; + *cca*) + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + module load eccodes/2.13.0 + module load emos/455-r64 + export SCRATCH=$${TMPDIR} + export PATH=$${PATH}:$${HOME}/flex_extract_v7.1/Source/Python + ;; +esac + +cd $${SCRATCH} +mkdir -p python$$$$ +cd python$$$$ + +export CONTROL=CONTROL + +cat >$${CONTROL}<<EOF +$control_content +EOF + + +submit.py --controlfile=$${CONTROL} --inputdir=./work --outputdir=./work 1> prot 2>&1 + +if [ $? -eq 0 ] ; then + l=0 + for muser in `grep -i MAILOPS $${CONTROL}`; do + if [ $${l} -gt 0 ] ; then + mail -s flex.$${HOST}.$$$$ $${muser} <prot + fi + l=$(($${l}+1)) + done +else + l=0 + for muser in `grep -i MAILFAIL $${CONTROL}`; do + if [ $${l} -gt 0 ] ; then + mail -s "ERROR! flex.$${HOST}.$$$$" $${muser} <prot + fi + l=$(($${l}+1)) + done +fi + diff --git a/Templates/job.template b/Templates/job.template new file mode 100644 index 0000000000000000000000000000000000000000..d6138af671497a9893a4ae77d656335ee9a504c5 --- /dev/null +++ b/Templates/job.template @@ -0,0 +1,80 @@ +#!/bin/ksh + +# ON ECGB: +# start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server +# start with sbatch NAME_OF_THIS_FILE directly on machine + +#SBATCH --workdir=/scratch/ms/$usergroup/$username +#SBATCH --qos=normal +#SBATCH --job-name=flex_ecmwf +#SBATCH --output=flex_ecmwf.%j.out +#SBATCH --error=flex_ecmwf.%j.out +#SBATCH --mail-type=FAIL +#SBATCH --time=12:00:00 + +## CRAY specific batch requests +##PBS -N flex_ecmwf +##PBS -q np +##PBS -S /usr/bin/ksh +## -o /scratch/ms/$usergroup/$username/flex_ecmwf.$$$${PBS_JOBID}.out +## job output is in .ecaccess_DO_NOT_REMOVE +##PBS -j oe +##PBS -V +##PBS -l EC_threads_per_task=24 +##PBS -l EC_memory_per_task=32000MB + +set -x +export VERSION=$version_number +case $$$${HOST} in + *ecg*) + module unload grib_api + module unload eccodes + module unload python + module unload emos + module load python3/3.6.8-01 + module load eccodes/2.13.0 + module load emos/455-r64 + export PATH=$$$${PATH}:$fp_root_path + ;; + *cca*) + module unload python + module switch PrgEnv-cray PrgEnv-intel + module load python3 + module load eccodes/2.13.0 + module load emos/455-r64 + export SCRATCH=$$$${TMPDIR} + export PATH=$$$${PATH}:$fp_root_path + ;; +esac + +cd $$$${SCRATCH} +mkdir -p python$$$$$$$$ +cd python$$$$$$$$ + +export CONTROL=CONTROL + +cat >$$$${CONTROL}<<EOF +$$control_content +EOF + + +submit.py --controlfile=$$$${CONTROL} --inputdir=./work --outputdir=./work 1> prot 2>&1 + +if [ $? -eq 0 ] ; then + l=0 + for muser in `grep -i MAILOPS $$$${CONTROL}`; do + if [ $$$${l} -gt 0 ] ; then + mail -s flex.$$$${HOST}.$$$$$$$$ $$$${muser} <prot + fi + l=$(($$$${l}+1)) + done +else + l=0 + for muser in `grep -i MAILFAIL $$$${CONTROL}`; do + if [ $$$${l} -gt 0 ] ; then + mail -s "ERROR! flex.$$$${HOST}.$$$$$$$$" $$$${muser} <prot + fi + l=$(($$$${l}+1)) + done +fi + diff --git a/Testing/Installation/Convert/README b/Testing/Installation/Convert/README new file mode 100644 index 0000000000000000000000000000000000000000..c10df541c2c6e1f6650321b5e447e1545a536989 --- /dev/null +++ b/Testing/Installation/Convert/README @@ -0,0 +1 @@ +start CONVERt2 in here and check if its successfull and procuces a fort,15 file with content ( check resulting parameter or full content) diff --git a/Testing/Installation/Convert/fort.10 b/Testing/Installation/Convert/fort.10 new file mode 100644 index 0000000000000000000000000000000000000000..744bf5890f67e56aae28548d91ae6892f4166d30 Binary files /dev/null and b/Testing/Installation/Convert/fort.10 differ diff --git a/Testing/Installation/Convert/fort.11 b/Testing/Installation/Convert/fort.11 new file mode 100644 index 0000000000000000000000000000000000000000..a1b9d8a4dd9dabcc7823f063fac009a44bc15513 Binary files /dev/null and b/Testing/Installation/Convert/fort.11 differ diff --git a/Testing/Installation/Convert/fort.12 b/Testing/Installation/Convert/fort.12 new file mode 100644 index 0000000000000000000000000000000000000000..df757399cc92c0c6b5c29fa5ad2830681a9d3dd4 Binary files /dev/null and b/Testing/Installation/Convert/fort.12 differ diff --git a/Testing/Installation/Convert/fort.13 b/Testing/Installation/Convert/fort.13 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Testing/Installation/Convert/fort.16 b/Testing/Installation/Convert/fort.16 new file mode 100644 index 0000000000000000000000000000000000000000..22fb64b75d4c9bc83a3e6ba110220803ff435b3c Binary files /dev/null and b/Testing/Installation/Convert/fort.16 differ diff --git a/Testing/Installation/Convert/fort.17 b/Testing/Installation/Convert/fort.17 new file mode 100644 index 0000000000000000000000000000000000000000..57f630818e0712481d77ac84efebb66b5ec1f7b7 Binary files /dev/null and b/Testing/Installation/Convert/fort.17 differ diff --git a/Testing/Installation/Convert/fort.18 b/Testing/Installation/Convert/fort.18 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Testing/Installation/Convert/fort.19 b/Testing/Installation/Convert/fort.19 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Testing/Installation/Convert/fort.21 b/Testing/Installation/Convert/fort.21 new file mode 100644 index 0000000000000000000000000000000000000000..acb0ee411f57e6f517b551501a8455abd6153408 Binary files /dev/null and b/Testing/Installation/Convert/fort.21 differ diff --git a/Testing/Installation/Convert/fort.22 b/Testing/Installation/Convert/fort.22 new file mode 100644 index 0000000000000000000000000000000000000000..46fefdc60f046fc370fe069af6b1166d3eb50709 Binary files /dev/null and b/Testing/Installation/Convert/fort.22 differ diff --git a/Testing/Installation/Convert/fort.4 b/Testing/Installation/Convert/fort.4 new file mode 100644 index 0000000000000000000000000000000000000000..767f4fff36abe554f402bb4be030f8e6d7332e72 --- /dev/null +++ b/Testing/Installation/Convert/fort.4 @@ -0,0 +1,19 @@ +&NAMGEN + maxl = 6, + maxb = 6, + mlevel = 91, + mlevelist = "88/to/91", + mnauf = 106, + metapar = 77, + rlo0 = 30.0, + rlo1 = 40.0, + rla0 = 40.0, + rla1 = 50.0, + momega = 0, + momegadiff = 0, + mgauss = 0, + msmooth = 0, + meta = 1, + metadiff = 0, + mdpdeta = 1 +/ diff --git a/Testing/Installation/testecmwfapi_member.py b/Testing/Installation/testecmwfapi_member.py new file mode 100644 index 0000000000000000000000000000000000000000..66cc7c1eed9f4ebaa6f541b41bb62fc9b3df9be7 --- /dev/null +++ b/Testing/Installation/testecmwfapi_member.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + + +import pytest +from ecmwfapi import ECMWFService + +class TestECMWFApi: + """ + """ + + def test_member(): + server = ECMWFService("mars") + + server.execute({'class' : "ei", + 'time' : "00", + 'date' : "2013-09-01/to/2013-09-30", + 'step' : "0", + 'type' : "an", + 'levtype' : "sfc", + 'param' : "165.128/41.128", + 'grid' : "0.75/0.75"}, + "interim201309.grib") + diff --git a/Testing/Installation/testecmwfapi_public.py b/Testing/Installation/testecmwfapi_public.py new file mode 100644 index 0000000000000000000000000000000000000000..6e261df92ee7e776521013b5fcbceb4b4c7887bc --- /dev/null +++ b/Testing/Installation/testecmwfapi_public.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + + +import pytest +from ecmwfapi import ECMWFDataServer + +class TestECMWFApi: + """ + """ + + def test_public(): + server = ECMWFDataServer() + + server.retrieve({'dataset' : "interim", + 'time' : "00", + 'date' : "2013-09-01/to/2013-09-30", + 'step' : "0", + 'type' : "an", + 'levtype' : "sfc", + 'param' : "165.128/41.128", + 'grid' : "0.75/0.75", + 'target' : "interim201309.grib" + }) + + diff --git a/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_CERA.compare b/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_CERA.compare new file mode 100644 index 0000000000000000000000000000000000000000..166ac675b072d22bd9303b703a73762925934d0f --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_CERA.compare @@ -0,0 +1,40 @@ +DAY1 20000908 +DTIME 3 +TYPE AN AN AN AN AN AN AN AN +TIME 00 03 06 09 12 15 18 21 +STEP 00 00 00 00 00 00 00 00 +ACCTYPE FC +ACCTIME 18 +ACCMAXSTEP 24 +CLASS EP +NUMBER 0 +STREAM ENDA +EXPVER 1 +GRID 2000 +LEFT -24000 +LOWER 10000 +UPPER 74000 +RIGHT 60000 +LEVEL 91 +LEVELIST 1/to/91 +RESOL 159 +GAUSS 0 +ACCURACY 24 +OMEGA 0 +OMEGADIFF 0 +ETA 1 +ETADIFF 0 +DPDETA 1 +SMOOTH 0 +FORMAT GRIB2 +ADDPAR +CWC 1 +PREFIX CE +ECSTORAGE 0 +ECTRANS 1 +ECFSDIR ectmp:/${USER}/econdemand/ +MAILFAIL ${USER} +MAILOPS ${USER} +GRIB2FLEXPART 0 +EOF + diff --git a/python/CONTROL.temp b/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_EA5.compare similarity index 86% rename from python/CONTROL.temp rename to Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_EA5.compare index 6a2fe2501f7d99d373a0ac69903f5e9fde0f207e..088a08ae12dc5a4f5c3ad605ede17108ec0fe4be 100644 --- a/python/CONTROL.temp +++ b/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_EA5.compare @@ -1,6 +1,6 @@ DAY1 DAY2 -DTIME 1 +DTIME 3 TYPE AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN TIME 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 STEP 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 @@ -12,12 +12,12 @@ STREAM OPER NUMBER OFF EXPVER 1 GRID 1000 -LEFT -179000 -LOWER -90000 -UPPER 90000 -RIGHT 180000 +LEFT -0 +LOWER 0 +UPPER 5000 +RIGHT 5000 LEVEL 137 -LEVELIST 1/to/137 +LEVELIST 130/to/137 CWC 1 RESOL 159 GAUSS 0 @@ -28,7 +28,7 @@ ETA 1 ETADIFF 0 DPDETA 1 SMOOTH 0 -FORMAT GRIB2 +FORMAT GRIB1 ADDPAR 186/187/188/235/139/39 PREFIX EA ECSTORAGE 0 @@ -38,4 +38,3 @@ MAILFAIL ${USER} MAILOPS ${USER} GRIB2FLEXPART 0 EOF - diff --git a/python/CONTROL_EI.global b/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_EI.compare similarity index 60% rename from python/CONTROL_EI.global rename to Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_EI.compare index 0fbad5cf21cb98ced04940af8bc4d2180278ac1a..7c6cdd45614d37da8e83a3a9e0b27db532fd97ca 100644 --- a/python/CONTROL_EI.global +++ b/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_EI.compare @@ -1,9 +1,8 @@ -DAY1 -DAY2 +DAY1 20150809 DTIME 3 -TYPE AN AN AN AN AN AN AN AN -TIME 00 03 06 09 12 15 18 21 -STEP 00 00 00 00 00 00 00 00 +TYPE AN FC FC FC AN FC FC FC +TIME 00 00 00 00 12 12 12 12 +STEP 00 03 06 09 00 03 06 09 ACCTYPE FC ACCTIME 00/12 ACCMAXSTEP 12 @@ -11,15 +10,15 @@ CLASS EI STREAM OPER NUMBER OFF EXPVER 1 -GRID 1000 -LEFT -179000 -LOWER -90000 -UPPER 90000 -RIGHT 180000 -CWC 1 +GRID 750 +LEFT -24750 +LOWER 10500 +UPPER 75000 +RIGHT 60000 LEVEL 60 LEVELIST 1/to/60 -RESOL 159 +CWC 0 +RESOL 255 GAUSS 1 ACCURACY 24 OMEGA 0 @@ -29,7 +28,6 @@ ETADIFF 0 DPDETA 1 SMOOTH 0 FORMAT GRIB2 -ADDPAR /186/187/188/235/139/39 PREFIX EI ECSTORAGE 0 ECTRANS 1 diff --git a/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_OD.OPER.FC.36hours.compare b/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_OD.OPER.FC.36hours.compare new file mode 100644 index 0000000000000000000000000000000000000000..d050c0dc118400c71ff598baa584bc9f52d25579 --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_OD.OPER.FC.36hours.compare @@ -0,0 +1,39 @@ +DAY1 20180809 +DTIME 3 +TYPE FC +TIME 00 +STEP 00 +MAXSTEP 36 +ACCTYPE FC +ACCTIME 00 +ACCMAXSTEP 36 +CLASS OD +STREAM OPER +NUMBER OFF +EXPVER 1 +GRID 1000 +LEFT 10000 +LOWER 40000 +UPPER 45000 +RIGHT 15000 +LEVEL 137 +LEVELIST 130/to/137 +CWC 1 +RESOL 255 +GAUSS 0 +ACCURACY 24 +OMEGA 0 +OMEGADIFF 0 +ETA 1 +ETADIFF 0 +DPDETA 1 +SMOOTH 0 +FORMAT GRIB2 +PREFIX FC +ECSTORAGE 0 +ECTRANS 1 +ECFSDIR ectmp:/${USER}/econdemand/ +MAILOPS ${USER} +MAILFAIL ${USER} +GRIB2FLEXPART 0 +EOF diff --git a/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_OD.OPER.FC.eta.basetime.compare b/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_OD.OPER.FC.eta.basetime.compare new file mode 100644 index 0000000000000000000000000000000000000000..8566187bac8546f80cdeb97a999041effbcad7ad --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_OD.OPER.FC.eta.basetime.compare @@ -0,0 +1,39 @@ +DAY1 20190701 +DTIME 3 +TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC +TIME 00 00 00 00 00 00 00 00 00 00 00 00 12 12 12 12 12 12 12 12 12 12 12 12 +STEP 00 01 02 03 04 05 06 07 08 09 10 11 00 01 02 03 04 05 06 07 08 09 10 11 +BASETIME 00 +ACCTYPE FC +ACCTIME 00/12 +ACCMAXSTEP 12 +CLASS OD +STREAM OPER +NUMBER OFF +EXPVER 1 +GRID 500 +LEFT 10000 +LOWER 40000 +UPPER 45000 +RIGHT 15000 +LEVEL 137 +LEVELIST 130/to/137 +CWC 1 +RESOL 255 +GAUSS 0 +ACCURACY 24 +OMEGA 0 +OMEGADIFF 0 +ETA 1 +ETADIFF 0 +DPDETA 1 +SMOOTH 0 +FORMAT GRIB2 +PREFIX BT +ECSTORAGE 0 +ECTRANS 1 +ECFSDIR ectmp:/${USER}/econdemand/ +MAILOPS ${USER} +MAILFAIL ${USER} +GRIB2FLEXPART 0 +EOF diff --git a/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_OD.OPER.FC.eta.compare b/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_OD.OPER.FC.eta.compare new file mode 100644 index 0000000000000000000000000000000000000000..817dd184117df57e24b481b7ab3f02fc7925f4b8 --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_OD.OPER.FC.eta.compare @@ -0,0 +1,39 @@ +DAY1 20180809 +DTIME 1 +TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC +TIME 00 00 00 00 00 00 00 00 00 00 00 00 12 12 12 12 12 12 12 12 12 12 12 12 +STEP 00 01 02 03 04 05 06 07 08 09 10 11 00 01 02 03 04 05 06 07 08 09 10 11 +BASETIME 00 +ACCTYPE FC +ACCTIME 00/12 +ACCMAXSTEP 12 +CLASS OD +STREAM OPER +NUMBER OFF +EXPVER 1 +GRID 200 +LEFT 10000 +LOWER 40000 +UPPER 45000 +RIGHT 15000 +LEVEL 137 +LEVELIST 130/to/137 +CWC 1 +RESOL 799 +GAUSS 0 +ACCURACY 24 +OMEGA 0 +OMEGADIFF 0 +ETA 1 +ETADIFF 0 +DPDETA 1 +SMOOTH 0 +FORMAT GRIB2 +PREFIX ENE +ECSTORAGE 0 +ECTRANS 1 +ECFSDIR ectmp:/${USER}/econdemand/ +MAILOPS ${USER} +MAILFAIL ${USER} +GRIB2FLEXPART 0 +EOF diff --git a/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_OD.OPER.FC.gauss.compare b/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_OD.OPER.FC.gauss.compare new file mode 100644 index 0000000000000000000000000000000000000000..7ee165d387be36e93c11acc4fe8fb0c07f44c393 --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_OD.OPER.FC.gauss.compare @@ -0,0 +1,39 @@ +DAY1 20180809 +DTIME 1 +TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC +TIME 00 00 00 00 00 00 00 00 00 00 00 00 12 12 12 12 12 12 12 12 12 12 12 12 +STEP 00 01 02 03 04 05 06 07 08 09 10 11 00 01 02 03 04 05 06 07 08 09 10 11 +ACCTYPE FC +ACCTIME 00/12 +ACCMAXSTEP 12 +CLASS OD +NUMBER OFF +STREAM OPER +EXPVER 1 +GRID 200 +LEFT 10000 +LOWER 40000 +UPPER 45000 +RIGHT 15000 +LEVEL 137 +LEVELIST 130/TO/137 +RESOL 799 +GAUSS 1 +ACCURACY 24 +OMEGA 0 +OMEGADIFF 0 +ETA 0 +ETADIFF 0 +DPDETA 1 +SMOOTH 0 +FORMAT GRIB2 +CWC 0 +PREFIX ENG +ECSTORAGE 0 +ECTRANS 1 +ECFSDIR ectmp:/${USER}/econdemand/ +MAILFAIL ${USER} +MAILOPS ${USER} +GRIB2FLEXPART 0 +EOF + diff --git a/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120100 b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120100 new file mode 100644 index 0000000000000000000000000000000000000000..2f13181129b644237b9d3b7bad344b3d8d2b5070 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120100 differ diff --git a/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120103 b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120103 new file mode 100644 index 0000000000000000000000000000000000000000..98b062aba14404f9068b236af94b7773829bb6a8 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120103 differ diff --git a/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120106 b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120106 new file mode 100644 index 0000000000000000000000000000000000000000..ffab5fc6c492c2665a5211242b09600ccf3c9a60 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120106 differ diff --git a/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120109 b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120109 new file mode 100644 index 0000000000000000000000000000000000000000..7bc46c56b77ee42dc4ab1aed4d555d52408b64a3 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120109 differ diff --git a/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120112 b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120112 new file mode 100644 index 0000000000000000000000000000000000000000..ac00421772296496ca1be967ed6c358a91bbc074 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120112 differ diff --git a/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120115 b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120115 new file mode 100644 index 0000000000000000000000000000000000000000..b54e9ba288aff7866b59769d2fb0cfbcdee3c650 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120115 differ diff --git a/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120118 b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120118 new file mode 100644 index 0000000000000000000000000000000000000000..c183450b38d65d911cf006075c443c5353916c02 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120118 differ diff --git a/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120121 b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120121 new file mode 100644 index 0000000000000000000000000000000000000000..7ae16fcef53a74d4335c3c3ca50ef65614c96e93 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.0.4/EA5/EA18120121 differ diff --git a/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_CERA.compare b/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_CERA.compare new file mode 100644 index 0000000000000000000000000000000000000000..a3f7e01cd1722c3af70db6df534763c54c65115c --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_CERA.compare @@ -0,0 +1,23 @@ +START_DATE 20000908 +DTIME 3 +TYPE AN AN AN AN AN AN AN AN +TIME 00 03 06 09 12 15 18 21 +STEP 00 00 00 00 00 00 00 00 +ACCTYPE FC +ACCTIME 18 +ACCMAXSTEP 24 +CLASS EP +NUMBER 0 +STREAM ENDA +GRID 2. +LEFT -24. +LOWER 10. +UPPER 74. +RIGHT 60. +LEVELIST 1/to/91 +RESOL 159 +ETA 1 +CWC 1 +PREFIX CE +ECTRANS 1 +FORMAT GRIB2 diff --git a/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_EA5.compare b/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_EA5.compare new file mode 100644 index 0000000000000000000000000000000000000000..27a505d713a315b30d6adfc69827e4096f54a402 --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_EA5.compare @@ -0,0 +1,23 @@ +START_DATE +DTIME 3 +TYPE AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN +TIME 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 +STEP 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +ACCTYPE FC +ACCTIME 06/18 +ACCMAXSTEP 12 +CLASS EA +STREAM OPER +GRID 1. +LEFT 0. +LOWER 0. +UPPER 5. +RIGHT 5. +LEVEL 137 +LEVELIST 130/to/137 +RESOL 159 +ETA 1 +ADDPAR LCC/MCC/HCC/SKT/STL1/SWVL1 +PREFIX EA +ECTRANS 1 +CWC 1 diff --git a/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_EI.compare b/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_EI.compare new file mode 100644 index 0000000000000000000000000000000000000000..a5f9fadf075da3e93c01159a27783989d5c84e19 --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_EI.compare @@ -0,0 +1,21 @@ +START_DATE 20150809 +DTIME 3 +TYPE AN FC FC FC AN FC FC FC +TIME 00 00 00 00 12 12 12 12 +STEP 00 03 06 09 00 03 06 09 +ACCTYPE FC +ACCTIME 00/12 +ACCMAXSTEP 12 +CLASS EI +STREAM OPER +GRID 0.750 +LEFT -24.75 +LOWER 10.5 +UPPER 75. +RIGHT 60. +LEVELIST 1/to/60 +RESOL 255 +GAUSS 1 +FORMAT GRIB2 +PREFIX EI +ECTRANS 1 diff --git a/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_OD.OPER.FC.36hours.compare b/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_OD.OPER.FC.36hours.compare new file mode 100644 index 0000000000000000000000000000000000000000..daf538e62770cfa3ba1f00f3c818c479fae59b7a --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_OD.OPER.FC.36hours.compare @@ -0,0 +1,23 @@ +START_DATE 20180809 +DTIME 3 +TYPE FC +TIME 00 +STEP 00 +MAXSTEP 36 +ACCTYPE FC +ACCTIME 00 +ACCMAXSTEP 36 +CLASS OD +STREAM OPER +GRID 1. +LEFT 10. +LOWER 40. +UPPER 45. +RIGHT 15. +LEVELIST 130/TO/137 +RESOL 255 +ETA 1 +CWC 1 +PREFIX FC +ECTRANS 1 +FORMAT GRIB2 diff --git a/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_OD.OPER.FC.eta.basetime.compare b/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_OD.OPER.FC.eta.basetime.compare new file mode 100644 index 0000000000000000000000000000000000000000..8074dc99869a9b1e2b70c3979852e3e4182603e6 --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_OD.OPER.FC.eta.basetime.compare @@ -0,0 +1,23 @@ +START_DATE 20190701 +TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC +TIME 00 00 00 00 00 00 00 00 00 00 00 00 12 12 12 12 12 12 12 12 12 12 12 12 +STEP 00 01 02 03 04 05 06 07 08 09 10 11 00 01 02 03 04 05 06 07 08 09 10 11 +BASETIME 00 +ACCTYPE FC +ACCTIME 00/12 +ACCMAXSTEP 12 +DTIME 3 +LEFT 10. +LOWER 40. +UPPER 45. +RIGHT 15. +CLASS OD +STREAM OPER +GRID 0.5 +RESOL 255 +ETA 1 +LEVELIST 130/to/137 +FORMAT GRIB2 +ECTRANS 1 +CWC 1 +PREFIX BT diff --git a/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_OD.OPER.FC.eta.compare b/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_OD.OPER.FC.eta.compare new file mode 100644 index 0000000000000000000000000000000000000000..61659b11cfd7c57a88bdc474ad12055cc6d8922c --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_OD.OPER.FC.eta.compare @@ -0,0 +1,19 @@ +START_DATE 20180809 +DTIME 1 +TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC +TIME 00 00 00 00 00 00 00 00 00 00 00 00 12 12 12 12 12 12 12 12 12 12 12 12 +STEP 00 01 02 03 04 05 06 07 08 09 10 11 00 01 02 03 04 05 06 07 08 09 10 11 +CLASS OD +STREAM OPER +GRID 0.2 +LEFT 10. +LOWER 40. +UPPER 45. +RIGHT 15. +LEVELIST 130/TO/137 +RESOL 799 +ETA 1 +CWC 1 +FORMAT GRIB2 +PREFIX ENE +ECTRANS 1 diff --git a/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_OD.OPER.FC.gauss.compare b/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_OD.OPER.FC.gauss.compare new file mode 100644 index 0000000000000000000000000000000000000000..27dfc0ba770eaf50a43280c29b95211b9722b3de --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/7.1/Controls/CONTROL_OD.OPER.FC.gauss.compare @@ -0,0 +1,21 @@ +START_DATE 20180809 +DTIME 1 +TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC +TIME 00 00 00 00 00 00 00 00 00 00 00 00 12 12 12 12 12 12 12 12 12 12 12 12 +STEP 00 01 02 03 04 05 06 07 08 09 10 11 00 01 02 03 04 05 06 07 08 09 10 11 +ACCTIME 00/12 +ACCTYPE FC +ACCMAXSTEP 12 +CLASS OD +STREAM OPER +GRID 0.2 +LEFT 10. +LOWER 40. +UPPER 45. +RIGHT 15. +LEVELIST 130/TO/137 +RESOL 799 +GAUSS 1 +FORMAT GRIB2 +PREFIX ENG +ECTRANS 1 diff --git a/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120100 b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120100 new file mode 100644 index 0000000000000000000000000000000000000000..2f13181129b644237b9d3b7bad344b3d8d2b5070 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120100 differ diff --git a/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120103 b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120103 new file mode 100644 index 0000000000000000000000000000000000000000..98b062aba14404f9068b236af94b7773829bb6a8 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120103 differ diff --git a/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120106 b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120106 new file mode 100644 index 0000000000000000000000000000000000000000..ffab5fc6c492c2665a5211242b09600ccf3c9a60 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120106 differ diff --git a/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120109 b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120109 new file mode 100644 index 0000000000000000000000000000000000000000..7bc46c56b77ee42dc4ab1aed4d555d52408b64a3 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120109 differ diff --git a/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120112 b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120112 new file mode 100644 index 0000000000000000000000000000000000000000..ac00421772296496ca1be967ed6c358a91bbc074 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120112 differ diff --git a/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120115 b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120115 new file mode 100644 index 0000000000000000000000000000000000000000..b54e9ba288aff7866b59769d2fb0cfbcdee3c650 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120115 differ diff --git a/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120118 b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120118 new file mode 100644 index 0000000000000000000000000000000000000000..c183450b38d65d911cf006075c443c5353916c02 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120118 differ diff --git a/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120121 b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120121 new file mode 100644 index 0000000000000000000000000000000000000000..7ae16fcef53a74d4335c3c3ca50ef65614c96e93 Binary files /dev/null and b/Testing/Regression/Compare_gribfiles/7.1/EA5/EA18120121 differ diff --git a/Testing/Regression/Compare_gribfiles/Log/log_2020-01-31_13-17-45 b/Testing/Regression/Compare_gribfiles/Log/log_2020-01-31_13-17-45 new file mode 100644 index 0000000000000000000000000000000000000000..bdac0af34bb087e9610801f77d6f95dcb9acdbb8 --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/Log/log_2020-01-31_13-17-45 @@ -0,0 +1,135 @@ +Compare GRIB files between version + old_version + and version + new_version + : \n + + +Welcome! +Reference path is: 7.0.4/BASETIME/ +New path is: 7.1/BASETIME/ +Filepattern is: * +The input files are: ['BT19063015', 'BT19063018', 'BT19063021', 'BT19070100'] +The input files are: ['BT19063015', 'BT19063018', 'BT19063021', 'BT19070100'] + +-- GRIB #55 -- shortName=ssr paramId=176 stepRange=0 levelType=1 level=0 packingType= gridType=regular_ll -- +long [totalLength]: [220] != [583] + +... FILES HAVE DIFFERENCES IN GRIB MESSAGES! +=================================================================================================== + + +Welcome! +Reference path is: 7.0.4/CERA/ +New path is: 7.1/CERA/ +Filepattern is: * +The input files are: ['CE00090800', 'CE00090803', 'CE00090806', 'CE00090809', 'CE00090812', 'CE00090815', 'CE00090818', 'CE00090821'] +The input files are: ['CE00090800', 'CE00090803', 'CE00090806', 'CE00090809', 'CE00090812', 'CE00090815', 'CE00090818', 'CE00090821'] + +-- GRIB #548 -- shortName=lsp paramId=142 stepRange=0 levelType=1 level=0 packingType= gridType=regular_ll -- +long [tablesVersion]: [23] != [5] +string [typeOfProcessedData]: [1] != [fc] +string [typeOfFirstFixedSurface]: [1] != [sfc] + + +-- GRIB #548 -- shortName=lsp paramId=142 stepRange=0 levelType=1 level=0 packingType= gridType=regular_ll -- +long [tablesVersion]: [23] != [5] +string [typeOfProcessedData]: [1] != [fc] +string [typeOfFirstFixedSurface]: [1] != [sfc] + + +-- GRIB #548 -- shortName=lsp paramId=142 stepRange=0 levelType=1 level=0 packingType= gridType=regular_ll -- +long [tablesVersion]: [23] != [5] +string [typeOfProcessedData]: [1] != [fc] +string [typeOfFirstFixedSurface]: [1] != [sfc] + + +-- GRIB #548 -- shortName=lsp paramId=142 stepRange=0 levelType=1 level=0 packingType= gridType=regular_ll -- +long [tablesVersion]: [23] != [5] +string [typeOfProcessedData]: [1] != [fc] +string [typeOfFirstFixedSurface]: [1] != [sfc] + + +-- GRIB #548 -- shortName=lsp paramId=142 stepRange=0 levelType=1 level=0 packingType= gridType=regular_ll -- +long [tablesVersion]: [23] != [5] +string [typeOfProcessedData]: [1] != [fc] +string [typeOfFirstFixedSurface]: [1] != [sfc] + + +-- GRIB #548 -- shortName=lsp paramId=142 stepRange=0 levelType=1 level=0 packingType= gridType=regular_ll -- +long [tablesVersion]: [23] != [5] +string [typeOfProcessedData]: [1] != [fc] +string [typeOfFirstFixedSurface]: [1] != [sfc] + + +-- GRIB #548 -- shortName=lsp paramId=142 stepRange=0 levelType=1 level=0 packingType= gridType=regular_ll -- +long [tablesVersion]: [23] != [5] +string [typeOfProcessedData]: [1] != [fc] +string [typeOfFirstFixedSurface]: [1] != [sfc] + + +-- GRIB #548 -- shortName=lsp paramId=142 stepRange=0 levelType=1 level=0 packingType= gridType=regular_ll -- +long [tablesVersion]: [23] != [5] +string [typeOfProcessedData]: [1] != [fc] +string [typeOfFirstFixedSurface]: [1] != [sfc] + +... FILES HAVE DIFFERENCES IN GRIB MESSAGES! +=================================================================================================== + + +Welcome! +Reference path is: 7.0.4/EA5/ +New path is: 7.1/EA5/ +Filepattern is: * +The input files are: ['EA18120100', 'EA18120103', 'EA18120106', 'EA18120109', 'EA18120112', 'EA18120115', 'EA18120118', 'EA18120121'] +The input files are: ['EA18120100', 'EA18120103', 'EA18120106', 'EA18120109', 'EA18120112', 'EA18120115', 'EA18120118', 'EA18120121'] +GRIB_COMPARISON: SUCCESSFULL! +=================================================================================================== + + +Welcome! +Reference path is: 7.0.4/EI/ +New path is: 7.1/EI/ +Filepattern is: * +The input files are: ['EI15080900', 'EI15080903', 'EI15080906', 'EI15080909', 'EI15080912', 'EI15080915', 'EI15080918', 'EI15080921'] +The input files are: ['EI15080900', 'EI15080903', 'EI15080906', 'EI15080909', 'EI15080912', 'EI15080915', 'EI15080918', 'EI15080921'] +GRIB_COMPARISON: SUCCESSFULL! +=================================================================================================== + + +Welcome! +Reference path is: 7.0.4/ETAOD/ +New path is: 7.1/ETAOD/ +Filepattern is: * +The input files are: ['ENE18080900', 'ENE18080901', 'ENE18080902', 'ENE18080903', 'ENE18080904', 'ENE18080905', 'ENE18080906', 'ENE18080907', 'ENE18080908', 'ENE18080909', 'ENE18080910', 'ENE18080911', 'ENE18080912', 'ENE18080913', 'ENE18080914', 'ENE18080915', 'ENE18080916', 'ENE18080917', 'ENE18080918', 'ENE18080919', 'ENE18080920', 'ENE18080921', 'ENE18080922', 'ENE18080923'] +The input files are: ['ENE18080900', 'ENE18080901', 'ENE18080902', 'ENE18080903', 'ENE18080904', 'ENE18080905', 'ENE18080906', 'ENE18080907', 'ENE18080908', 'ENE18080909', 'ENE18080910', 'ENE18080911', 'ENE18080912', 'ENE18080913', 'ENE18080914', 'ENE18080915', 'ENE18080916', 'ENE18080917', 'ENE18080918', 'ENE18080919', 'ENE18080920', 'ENE18080921', 'ENE18080922', 'ENE18080923'] +GRIB_COMPARISON: SUCCESSFULL! +=================================================================================================== + + +Welcome! +Reference path is: 7.0.4/GAUSSOD/ +New path is: 7.1/GAUSSOD/ +Filepattern is: * +The input files are: ['ENG18080900', 'ENG18080901', 'ENG18080902', 'ENG18080903', 'ENG18080904', 'ENG18080905', 'ENG18080906', 'ENG18080907', 'ENG18080908', 'ENG18080909', 'ENG18080910', 'ENG18080911', 'ENG18080912', 'ENG18080913', 'ENG18080914', 'ENG18080915', 'ENG18080916', 'ENG18080917', 'ENG18080918', 'ENG18080919', 'ENG18080920', 'ENG18080921', 'ENG18080922', 'ENG18080923'] +The input files are: ['ENG18080900', 'ENG18080901', 'ENG18080902', 'ENG18080903', 'ENG18080904', 'ENG18080905', 'ENG18080906', 'ENG18080907', 'ENG18080908', 'ENG18080909', 'ENG18080910', 'ENG18080911', 'ENG18080912', 'ENG18080913', 'ENG18080914', 'ENG18080915', 'ENG18080916', 'ENG18080917', 'ENG18080918', 'ENG18080919', 'ENG18080920', 'ENG18080921', 'ENG18080922', 'ENG18080923'] +GRIB_COMPARISON: SUCCESSFULL! +=================================================================================================== + + +Welcome! +Reference path is: 7.0.4/PUREFC/ +New path is: 7.1/PUREFC/ +Filepattern is: * +The input files are: ['FC180809.00.000', 'FC180809.00.003', 'FC180809.00.006', 'FC180809.00.009', 'FC180809.00.012', 'FC180809.00.015', 'FC180809.00.018', 'FC180809.00.021', 'FC180809.00.024', 'FC180809.00.027', 'FC180809.00.030', 'FC180809.00.033', 'FC180809.00.036'] +The input files are: ['FC180809.00.000', 'FC180809.00.003', 'FC180809.00.006', 'FC180809.00.009', 'FC180809.00.012', 'FC180809.00.015', 'FC180809.00.018', 'FC180809.00.021', 'FC180809.00.024', 'FC180809.00.027', 'FC180809.00.030', 'FC180809.00.033', 'FC180809.00.036'] + +-- GRIB #50 -- shortName=lsp paramId=142 stepRange=0 levelType=1 level=0 packingType= gridType=regular_ll -- +long [day]: [10] != [9] +long [hour]: [9] != [0] +long [forecastTime]: [0] != [33] + + +-- GRIB #50 -- shortName=lsp paramId=142 stepRange=0 levelType=1 level=0 packingType= gridType=regular_ll -- +long [day]: [10] != [9] +long [hour]: [12] != [0] +long [forecastTime]: [0] != [36] + +... FILES HAVE DIFFERENCES IN GRIB MESSAGES! +=================================================================================================== diff --git a/Testing/Regression/Compare_gribfiles/README.md b/Testing/Regression/Compare_gribfiles/README.md new file mode 100644 index 0000000000000000000000000000000000000000..af6d3f7af8d8af0637fc6dc7ed7c858357c4a38a --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/README.md @@ -0,0 +1,35 @@ +# Testcase - Grib file comparison + +This testcase is composed of a number of comparisons of grib files from two different flex_extract versions. + + +## Description + +A single test run tests if there are the same number of files and the files have the same names. +The test also checks if the files of each version have the same number of grib messages. It also uses the command line program "grib_compare" to check the equality of grib message headers. A comparison of the statistics of each grib message is also done with "grib_compare". + + + +Manually retrieve test data? + + + +## Usage + +python test_cmp_grib_files.py -r <path-to-reference-files> -n <path-to-new-files> -p <file-pattern> + +e.g. python test_cmp_grib_file.py -r 7.0.4/EA5/ -n 7.1/EA5/ -p 'EA*' + +## Author + Anne Philipp + + +## License + (C) Copyright 2014-2019. + + SPDX-License-Identifier: CC-BY-4.0 + + This work is licensed under the Creative Commons Attribution 4.0 + International License. To view a copy of this license, visit + http://creativecommons.org/licenses/by/4.0/ or send a letter to + Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. diff --git a/Testing/Regression/Compare_gribfiles/run_cmp_test.sh b/Testing/Regression/Compare_gribfiles/run_cmp_test.sh new file mode 100755 index 0000000000000000000000000000000000000000..b363ab51f99e9d049bd0aac10a31013d23fa4c82 --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/run_cmp_test.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# +# @Author: Anne Philipp +# +# @Date: November, 20 2019 +# +# @Description: Starts the comparison script for all cases found in the new +# version directory. Results are written to a log file placed +# in the Log directory. +# +# @Call command: ./run_cmp_test.sh <reference version> <new version> +# +# @ChangeHistory: +# +# @Licence: +# (C) Copyright 2014-2019. +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +# +# @Example: +# ./run_cmp_test.sh 7.0.4 7.1 +# + +if [ $# -eq 0 ]; then + echo "No arguments passed" + exit +fi + +if [ $# -eq 1 ]; then + echo "Second argument is missing" + exit +fi + +old_version=$1 +new_version=$2 + +current_time=$(date "+%Y-%m-%d_%H-%M-%S") +testcases=`ls ${new_version}/` + +echo 'Test to compare GRIB files between two versions' +echo 'Compare GRIB files between version ' + old_version + ' and version ' + new_version + ' : \n' > Log/log_$current_time + +for case in $testcases; do + + if [[ "$case" == "Controls" ]]; then + continue + fi + echo "Compare $case ..." + python test_cmp_grib_file.py -r 7.0.4/${case}/ -n 7.1/${case}/ -p '*' >> Log/log_$current_time 2>&1 + + echo "===================================================================================================" >> Log/log_$current_time + +done + diff --git a/Testing/Regression/Compare_gribfiles/test_cmp_grib_file.py b/Testing/Regression/Compare_gribfiles/test_cmp_grib_file.py new file mode 100644 index 0000000000000000000000000000000000000000..96200daca0fe24483403082f46f6aa72dddfcfac --- /dev/null +++ b/Testing/Regression/Compare_gribfiles/test_cmp_grib_file.py @@ -0,0 +1,270 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Comparison of resulting Grib files of two flex_extract versions. + + + +The script should be called like: + + python test_cmp_grib_files.py -r <path-to-reference-files> -n <path-to-new-files> -p <file-pattern> + +Note +---- + +Licence: +-------- + (C) Copyright 2014-2019. + + SPDX-License-Identifier: CC-BY-4.0 + + This work is licensed under the Creative Commons Attribution 4.0 + International License. To view a copy of this license, visit + http://creativecommons.org/licenses/by/4.0/ or send a letter to + Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. + + +Example +------- + python test_cmp_grib_file.py -r 7.0.4/EA5/ -n 7.1/EA5/ -p 'EA*' +""" + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +import os +import sys +from datetime import datetime +from eccodes import GribFile, GribMessage + +# ------------------------------------------------------------------------------ +# FUNCTION +# ------------------------------------------------------------------------------ +def get_cmdline_params(parlist, debug=True): + + import getopt + + iref_path = '' # e.g. Reference_files + inew_path = '' # e.g. New_files + smatch = '' # e.g. files matching pattern + + try: + opts, pars = getopt.getopt(parlist, + "hr:n:p:", + ["ipref=", "ipnew=", "pattern="]) + except getopt.GetoptError: + print('test_cmp_grib_file.py -r <ipref> -n <ipnew> -p <pattern>') + sys.exit(2) + + for opt, par in opts: + if opt == '-h': + print('test_cmp_grib_file.py -r <ipref> -n <ipnew> -p <pattern>') + sys.exit() + elif opt in ("-r", "--ipref"): + iref_path = par + elif opt in ("-n", "--ipnew"): + inew_path = par + elif opt in ("-p", "--pattern"): + smatch = par + + if iref_path == '': + sys.exit('NO REFERENCE INPUT PATH SET!') + if inew_path == '': + sys.exit('NO "NEW" COMPARISON INPUT PATH SET!') + if smatch == '': + sys.exit('NO MATCHING PATTERN FOR FILES SET!') + + if debug: + print("\n\nWelcome!") + print('Reference path is: ', iref_path) + print('New path is: ', inew_path) + print('Filepattern is: ', smatch) + + return iref_path, inew_path, smatch + +def get_files(ipath, matchingstring, debug=True): + """ + @Description: + Get filenames from input path matching the + string or regular expression and return it. + + @Input: + ipath: string + Path to the files. + + matchingstring: string + A string defining the filenames, + with or without regular exprssion. + + @Return + filename: list of strings + A list of all files matching the pattern of + matchingstring. + """ + import fnmatch + + files = [] + + for fn in os.listdir(ipath): + if fnmatch.fnmatch(fn, matchingstring): + files.append(fn) + + filelist = sorted(files) + if debug: + print('The input files are: %s' %(filelist)) + + return filelist + +def cmp_files_list(flist1, flist2): + ''' + ''' + + # 1. same length? + length = len(flist1) == len(flist2) + if not length: + print('There are not the same amount of files.') + sys.exit('Message 1') + + # 2. same content? + content = [True for i, j in zip(flist1, flist2) if i == j] + if not len(content) == len(flist1): + print('Not the same file list') + sys.exit('Message 2') + + return True + + +def cmp_number_messages(iref, flist1, inew, flist2): + + ref_dict = {} + new_dict = {} + res_dict = {} + for file in flist1: + with GribFile(os.path.join(iref,file)) as grib: + ref_dict[file] = len(grib) + with GribFile(os.path.join(inew,file)) as grib: + new_dict[file] = len(grib) + + res_dict[file] = ref_dict[file] == new_dict[file] + + for k, res in res_dict.items(): + if not res == True: + print('LOG: Amount of messages in files {} are not the same!'.format(k)) + + return True + + +def cmp_grib_msg_header(ipath_ref, ipath_new, filelist): + from subprocess import Popen, PIPE + # ref_dict = {} + # new_dict = {} + # for file in flist1: + # with GribFile(os.path.join(iref,file)) as grib: + # for i in range(len(grib)): + # msg = GribMessage(grib) + # ref_dict[file] = {} + # ref_dict[file][i] = [msg['shortName'],msg['level'], + # msg['editionNumber'],msg['dataDate'], + # msg['dataTime'],msg['marsClass'], + # msg['type'], msg['gridType'], + # msg['stepRange']] + error_flag = False + cmp_flag = False + for file in filelist: + try: + res = Popen(['grib_compare', '-H', + ipath_ref + '/' + file, + ipath_new + '/' + file], + stdin=PIPE, stdout=PIPE, stderr=PIPE) + output, error = res.communicate()#.decode("utf-8")) + if error: + print('... ERROR: \n\t{}'.format(error.decode())) + error_flag = True + if output: + print('{}'.format(output.decode())) + cmp_flag = True + except ValueError as e: + print('... ERROR CODE: ' + str(e.returncode)) + print('... ERROR MESSAGE:\n \t ' + str(res)) + error_flag = True + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + error_flag = True + + if error_flag: + sys.exit('... ERROR IN GRIB MESSAGE COMPARISON!') + if cmp_flag: + sys.exit('... FILES HAVE DIFFERENCES IN GRIB MESSAGES!') + + return True + + +def cmp_grib_msg_statistics(ipath_ref, ipath_new, filelist): + + from subprocess import Popen, PIPE + + error_flag = False + cmp_flag = False + for file in filelist: + try: + res = Popen(['grib_compare', '-c', 'statistics:n', + ipath_ref + '/' + file, + ipath_new + '/' + file], + stdin=PIPE, stdout=PIPE, stderr=PIPE) + output, error = res.communicate()#.decode("utf-8")) + if error: + print('... ERROR: \n\t{}'.format(error.decode())) + error_flag = True + if output: + print('\nIn File: {}'.format(file)) + print('{}'.format(output.decode())) + cmp_flag = True + except ValueError as e: + print('... ERROR CODE: ' + str(e.returncode)) + print('... ERROR MESSAGE:\n \t ' + str(res)) + error_flag = True + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + error_flag = True + + if error_flag: + sys.exit('... ERROR IN GRIB MESSAGE COMPARISON!') + if cmp_flag: + sys.exit('... FILES HAVE DIFFERENT STATISTICS!') + return True + +if __name__ == '__main__': + + # get the parameter list of program call + ref_path, new_path, fmatch = get_cmdline_params(sys.argv[1:]) + + # get the list of files of both cases + ref_files = get_files(ref_path, fmatch) + new_files = get_files(new_path, fmatch) + + # flag to store successfull tests + suc = True + + # 1. Does the 2 cases contain the same list of files? + suc = True if suc and cmp_files_list(ref_files, new_files) else False + + # 2. Does each file in both cases contain the same amount of messages? + suc = True if suc and cmp_number_messages(ref_path, ref_files, new_path, new_files) else False + + # 3. Does each file has the same parameters (in Header)? + # Since we can be sure that both cases have the same files, + # we just use 1 filelist + suc = True if suc and cmp_grib_msg_header(ref_path, new_path, new_files) else False + + # 4. Are the statistics of each message the same? + # Since we can be sure that both cases have the same files, + # we just use 1 filelist + suc = True if suc and cmp_grib_msg_statistics(ref_path, new_path, new_files) else False + + # If the program comes this far and flag "suc" = True, + # all tests were successful + if suc: + exit('GRIB_COMPARISON: SUCCESSFULL!') + else: + exit('GRIB_COMPARISON: FAILURE!') diff --git a/Testing/Regression/FortranEtadot/mk_outputdirs.sh b/Testing/Regression/FortranEtadot/mk_outputdirs.sh new file mode 100755 index 0000000000000000000000000000000000000000..6930f30d25ed34ecc1ba049184ee34afbba98530 --- /dev/null +++ b/Testing/Regression/FortranEtadot/mk_outputdirs.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# Testing environment for Fortran code in flex_extract v7 +# Create reference output dirs for test cases found in "Inputs" +# +# Copyright Petra Seibert, 2019 +# SPDX-License-Identifier: MIT-0 + + +for d in `ls Inputs`; do + for exe in 'debug' 'fast'; do + newdir='Outputs/Output_ref_'${d}'_'${exe} + mkdir -pv $newdir + done +done diff --git a/Testing/Regression/FortranEtadot/readme.txt b/Testing/Regression/FortranEtadot/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..9aa57f14935580955ce5aaad237147a711638b3a --- /dev/null +++ b/Testing/Regression/FortranEtadot/readme.txt @@ -0,0 +1,33 @@ +HOW TO DO REGRESSION TESTS OF THE FORTRAN CODE + +1. Go to flex_extract/Testing/Regression/FortranEtadot +2. Download the tarball containing the input files and reference outputs +2. Untar the tarball +3. Create a wirking directory: mkdir Work +4. Compile the unmodified Fortran code with makefile_fast and makefile_debug + (is in flex_extract/Source/Fortran) +5. Run a regression test to see whether the current Fortran code gives + output consistent with the reference output. + If not, carefully check why (machine-dependent small deviation?) + The output from the regression run is in 'Outputs' (automatically created). + If you need a new reference, you could remove or rename 'Outputs_ref', + and then run + ./mk_outputdirs.sh + ./run_ref.sh + to create a new reference version. +6. Work on the code and use the 'run_regrtest.sh' script to test your results. + +Note 1: The regression tests except those with "high" in their name will + altogether run in about 1 minute. The "high" tests (hemispherical data) + can take many minutes and also require up to ca. 20 GB of memory. + Therefore, the script can be invoked as + ./run_ref.sh omithigh + to omit the "high" tests. For single development steps this should be + sufficient. When you are satisfied, run the "high" tests at the end. +Note 2: The test scripts contain + export OMP_NUM_THREADS=4 # you may want to change this + export OMP_PLACES=cores + You should set OMP_NUM_THREADS to the number of physical cores of your + test machine or less. + OMP environment variables are explained on + https://gcc.gnu.org/onlinedocs/libgomp/#toc-OpenMP-Environment-Variables diff --git a/Testing/Regression/FortranEtadot/run_ref.sh b/Testing/Regression/FortranEtadot/run_ref.sh new file mode 100755 index 0000000000000000000000000000000000000000..eb064de9e34d9ceba90ee9569fa1ec3bec638bb0 --- /dev/null +++ b/Testing/Regression/FortranEtadot/run_ref.sh @@ -0,0 +1,106 @@ +#!/bin/bash + +# Do the reference runs and compare output of fast and debug + +# Copyright Petra Seibert, 2019 +# SPDX-License-Identifier: MIT-0 + +export OMP_NUM_THREADS=4 # you may want to change this +export OMP_PLACES=sockets +testhome=`pwd` +path1=../../../Source/Fortran/ +path=../${path1} +exedebug=calc_etadot_debug.out +exefast=calc_etadot_fast.out +hash=$(git log --abbrev-commit --pretty=oneline -n 1 --pretty=format:'%h') +exitonfail=true +rm -f log.run_ref failed + +# loop over all reference runs +rm -f log.run_ref + +if [ "$1" = omithigh ]; then # for fast testing, not for production + # requires > 16 GB + inputs=`ls Inputs | grep -v high` +else + inputs=`ls Inputs` +fi +for ref in $inputs; do + + echo 'Working on test case =' $ref + + # loop over debug and fast runs + for exe in 'debug' 'fast'; do + + cd Work + echo ' Run code version "'${exe}'"' + + thisexe=calc_etadot_${exe}.out + ln ../Inputs/${ref}/fort.* . + ( time ${path}${thisexe} ) >& log + + # check whether runs completeted properly + outdir='Outputs/Output_ref_'${ref}'_'${exe} + grep -q CONGRATULATIONS log + if [ $? = "0" ]; then + echo ' CONGRATULATIONS found' >> ../log.run_ref + mv log ../${outdir} + else + echo ' missing CONGRATULATIONS. Test failed.' + echo $ref $exe 'FAILED' >> ${testhome}/failed + if [ "${exitonfail}" = true ]; then exit; fi + fi + for outfile in 'fort.15' 'VERTICAL.EC'; do + if [ -e $outfile ]; then + mv ${outfile} ../${outdir} + else + echo ' missing '${outfile}' Test failed.' + echo $ref $exe 'FAILED' >> ${testhome}/failed + if [ "${exitonfail}" = true ]; then exit; fi + fi + done + + cd .. + rm Work/* # this is for being more safe + + done # end of exe loop + + # compare debug and fast + # omega case also produces fort.25 - need to add this + for outfile in 'fort.15' 'VERTICAL.EC'; do + outdebug='Outputs/Output_ref_'${ref}'_debug/'$outfile + outfast='Outputs/Output_ref_'${ref}'_fast/'$outfile + test=$(cmp $outdebug $outfast) + if $test; then + echo $outfile ' equal for debug and fast' >> log.run_ref + else + echo 'WARNING:' $outfile ' not equal for debug and fast, test failed' + echo $ref $exe 'FAILED' >> ${testhome}/failed + if [ "${exitonfail}" = true ]; then exit; fi + fi + done + + # save and show runtimes + for exe in 'debug' 'fast'; do + log='Outputs/Output_ref_'${ref}'_'${exe}'/log' + times=$(tail -3 ${log}) + real=$(echo $times | grep real | awk '{print $2}') + user=$(echo $times | grep user | awk '{print $4}') + sys=$( echo $times | grep sys | awk '{print $6}') + echo $hash, "'"reference"'", "'"${ref}'_'${exe}"'", ${real}, ${user}, ${sys} >> runtimes.csv + tail -1 runtimes.csv >> log.run_ref + done + + echo # go to next reference run + +done +echo +echo More information in log.run_ref + +# the following code is executed only if exitonfail is not set to 'true'. +if [ -e failed ]; then + echo + echo Some tests failed, see file "failed": + echo + cat failed|sort -u +fi diff --git a/Testing/Regression/FortranEtadot/run_regrtest.sh b/Testing/Regression/FortranEtadot/run_regrtest.sh new file mode 100755 index 0000000000000000000000000000000000000000..e00a47e26bc0f6541e6347eafef17af49a30b6f7 --- /dev/null +++ b/Testing/Regression/FortranEtadot/run_regrtest.sh @@ -0,0 +1,110 @@ +#!/bin/bash + +# Do the regression tests +# can be called without arguments, then will test all cases +# or with argument "omithigh" then high-resolution cases are omitted + +# Copyright Petra Seibert, 2019 +# SPDX-License-Identifier: MIT-0 + +export OMP_NUM_THREADS=4 # you may want to change this +export OMP_PLACES=cores +export OMP_DISPLAY_ENV=verbose +testhome=`pwd` +path1=../../../Source/Fortran/ +path=../${path1} +exedebug=calc_etadot_debug.out +exefast=calc_etadot_fast.out +hash=$(git log --abbrev-commit --pretty=oneline -n 1 --pretty=format:'%h') +exitonfail=true +numtest=0 +numpassed=0 + +rm -f log.run_regr failed + +# loop over all reference runs + +if [ "$1" = omithigh ]; then # for fast testing, not for production + inputs=`ls Inputs | grep -v high` +else + inputs=`ls Inputs |grep etadothigh` +fi +for ref in $inputs; do + + echo 'Working on test case =' $ref + + # loop over debug and fast runs + for exe in 'debug' 'fast'; do + + numtest=$((numtest + 1)) + failed=false + + rm -f Work/* # make shure that Work is empty + cd Work + echo ' Run code version "'${exe}'"' | tee -a ../log.run_regr + + thisexe=calc_etadot_${exe}.out + ln ../Inputs/${ref}/fort.* . + ( time ${path}${thisexe} ) >& log + + # check whether runs completeted properly + grep -q CONGRATULATIONS log + if [ $? = "0" ]; then + echo ' CONGRATULATIONS found' | tee -a ../log.run_regr + else + echo ' missing CONGRATULATIONS. Test failed.' | tee -a ../log.run_regr + echo $ref $exe 'FAILED' >> ${testhome}/failed + if [ "${exitonfail}" = true ]; then exit; else failed=true; fi + fi + for outfile in 'fort.15' 'VERTICAL.EC'; do + if [ -e $outfile ]; then + # compare reference and current version + # omega case also produces fort.25 - need to add this + outref='../Outputs/Output_ref_'${ref}'_'${exe}'/'$outfile + test=$(cmp $outfile $outref) + if $test; then + echo ' '$outfile ' test passed' | tee -a ../log.run_regr + else + echo 'WARNING:' $outfile ' test failed' | tee -a ../log.run_regr + echo $ref $exe 'FAILED' >> ${testhome}/failed + if [ "${exitonfail}" = true ]; then exit; else failed=true; fi + fi + + else + echo ' missing '${outfile}' Test failed.' | tee -a ../log.run_regr + echo $ref $exe 'FAILED' >> ${testhome}/failed + if [ "${exitonfail}" = true ]; then exit; else failed=true; fi + fi + done # end loop outfiles + if [ "${failed}" = false ]; then numpassed=$((numpassed + 1)); fi + + # save and show runtimes + log='log' + times=$(tail -3 ${log}) + real=$(echo $times | grep real | awk '{print $2}') + user=$(echo $times | grep user | awk '{print $4}') + sys=$( echo $times | grep sys | awk '{print $6}') + echo $hash, "'"reference"'", "'"${ref}'_'${exe}"'", ${real}, ${user}, ${sys} >> ../runtimes.csv + tail -1 ../runtimes.csv >> log.run_regr + + cd .. + rm Work/* # this is for being more safe + + done # end of exe loop + + echo # go to next reference run +done # end of ref loop + +echo +echo ' Regression test: ' $numpassed 'out of' $numtest 'tests passed'. \ + | tee -a ../log.run_regr +echo ' More information may be found in log.run_regr' +echo ' Runtimes were added to runtimes.csv under '$hash | tee -a ../log.run_regr + +# the following code is executed only if exitonfail is not set to 'true'. +if [ -e failed ]; then + echo + echo Some tests failed, see file "failed": + echo + cat failed|sort -u +fi diff --git a/Testing/Regression/FortranEtadot/runtimes.csv b/Testing/Regression/FortranEtadot/runtimes.csv new file mode 100644 index 0000000000000000000000000000000000000000..f3f6d5a3298c7ee487468baa9a9b14525a63104c --- /dev/null +++ b/Testing/Regression/FortranEtadot/runtimes.csv @@ -0,0 +1,41 @@ +0007a71, 'reference', 'etadot_debug', 0m0.429s, 0m0.500s, 0m0.024s +0007a71, 'reference', 'etadot_fast', 0m0.280s, 0m0.428s, 0m0.012s +0007a71, 'reference', 'etadotall_debug', 0m0.474s, 0m0.648s, 0m0.004s +0007a71, 'reference', 'etadotall_fast', 0m0.377s, 0m0.524s, 0m0.004s +0007a71, 'reference', 'etadothigh_debug', 24m19.804s, 16m9.556s, 1m8.256s +0007a71, 'reference', 'etadothigh_fast', 24m23.613s, 15m27.048s, 1m4.508s +0007a71, 'reference', 'gauss_debug', 0m3.557s, 0m13.264s, 0m0.164s +0007a71, 'reference', 'gauss_fast', 0m1.923s, 0m5.844s, 0m0.160s +0007a71, 'reference', 'gaussall_debug', 0m13.951s, 1m2.824s, 0m0.492s +0007a71, 'reference', 'gaussall_fast', 0m7.571s, 0m28.964s, 0m0.400s +0007a71, 'reference', 'gausshigh_debug', 6m8.635s, 35m42.308s, 0m7.280s +0007a71, 'reference', 'gausshigh_fast', 4m7.206s, 21m46.420s, 0m8.460s +0007a71, 'reference', 'latlon_debug', 0m0.383s, 0m0.520s, 0m0.008s +0007a71, 'reference', 'latlon_fast', 0m0.369s, 0m0.568s, 0m0.012s +0007a71, 'reference', 'latlonall_debug', 0m0.405s, 0m0.536s, 0m0.008s +0007a71, 'reference', 'latlonall_fast', 0m0.350s, 0m0.496s, 0m0.004s +6bc4b42, 'reference', 'etadot_debug', 0m0.322s, 0m0.360s, 0m0.012s +6bc4b42, 'reference', 'etadot_fast', 0m0.311s, 0m0.348s, 0m0.008s +6bc4b42, 'reference', 'etadotall_debug', 0m0.387s, 0m0.428s, 0m0.008s +6bc4b42, 'reference', 'etadotall_fast', 0m0.382s, 0m0.424s, 0m0.004s +6bc4b42, 'reference', 'gauss_debug', 0m3.346s, 0m8.776s, 0m0.152s +6bc4b42, 'reference', 'gauss_fast', 0m2.060s, 0m4.036s, 0m0.108s +6bc4b42, 'reference', 'gaussall_debug', 0m13.690s, 0m38.840s, 0m0.292s +6bc4b42, 'reference', 'gaussall_fast', 0m7.507s, 0m16.524s, 0m0.308s +6bc4b42, 'reference', 'latlon_debug', 0m0.387s, 0m0.420s, 0m0.016s +6bc4b42, 'reference', 'latlon_fast', 0m0.335s, 0m0.376s, 0m0.004s +6bc4b42, 'reference', 'latlonall_debug', 0m0.351s, 0m0.392s, 0m0.004s +6bc4b42, 'reference', 'latlonall_fast', 0m0.338s, 0m0.380s, 0m0.004s +8c55c02, 'reference', 'etadot_debug', 0m0.263s, 0m0.304s, 0m0.004s +8c55c02, 'reference', 'etadot_fast', 0m0.261s, 0m0.296s, 0m0.008s +8c55c02, 'reference', 'etadotall_debug', 0m0.348s, 0m0.388s, 0m0.004s +8c55c02, 'reference', 'etadotall_fast', 0m0.391s, 0m0.428s, 0m0.008s +8c55c02, 'reference', 'gauss_debug', 0m1.985s, 0m3.940s, 0m0.104s +8c55c02, 'reference', 'gauss_fast', 0m1.976s, 0m3.912s, 0m0.108s +8c55c02, 'reference', 'gaussall_debug', 0m7.653s, 0m16.852s, 0m0.368s +8c55c02, 'reference', 'gaussall_fast', 0m7.533s, 0m16.456s, 0m0.408s +8c55c02, 'reference', 'latlon_debug', 0m0.334s, 0m0.376s, 0m0.004s +8c55c02, 'reference', 'latlon_fast', 0m0.332s, 0m0.368s, 0m0.008s +8c55c02, 'reference', 'latlonall_debug', 0m0.394s, 0m0.424s, 0m0.016s +8c55c02, 'reference', 'latlonall_fast', 0m0.344s, 0m0.376s, 0m0.012s + diff --git a/Testing/Regression/FortranEtadot/runtimes.imp7 b/Testing/Regression/FortranEtadot/runtimes.imp7 new file mode 100644 index 0000000000000000000000000000000000000000..c709fb5868139ce18593dd33f9d589be2691397e --- /dev/null +++ b/Testing/Regression/FortranEtadot/runtimes.imp7 @@ -0,0 +1,16 @@ +949379e, 'reference', 'etadot_debug', 0m0.572s, 0m7.520s, 0m0.172s +949379e, 'reference', 'etadot_fast', 0m0.550s, 0m6.740s, 0m0.236s +949379e, 'reference', 'etadotall_debug', 0m0.729s, 0m7.280s, 0m0.168s +949379e, 'reference', 'etadotall_fast', 0m0.675s, 0m6.568s, 0m0.148s +949379e, 'reference', 'etadothigh_debug', 17m0.724s, 32m54.368s, 0m48.492s +949379e, 'reference', 'etadothigh_fast', 15m50.120s, 26m22.308s, 0m42.076s +949379e, 'reference', 'gauss_debug', 0m2.532s, 0m25.768s, 0m1.452s +949379e, 'reference', 'gauss_fast', 0m1.996s, 0m16.732s, 0m0.900s +949379e, 'reference', 'gaussall_debug', 0m7.884s, 1m21.248s, 0m1.852s +949379e, 'reference', 'gaussall_fast', 0m5.914s, 0m42.856s, 0m2.356s +949379e, 'reference', 'gausshigh_debug', 2m35.415s, 37m38.284s, 4m54.992s +949379e, 'reference', 'gausshigh_fast', 2m10.102s, 23m22.540s, 5m51.612s +949379e, 'reference', 'latlon_debug', 0m0.691s, 0m7.176s, 0m0.172s +949379e, 'reference', 'latlon_fast', 0m0.673s, 0m7.032s, 0m0.152s +949379e, 'reference', 'latlonall_debug', 0m0.777s, 0m6.772s, 0m0.620s +949379e, 'reference', 'latlonall_fast', 0m0.687s, 0m7.064s, 0m0.196s diff --git a/Testing/Regression/Mars_request/7.0.4/CERA.public_mr.csv b/Testing/Regression/Mars_request/7.0.4/CERA.public_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..b97d8fdf9b6ed1d49f32c733e70b0f10d26a510c --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/CERA.public_mr.csv @@ -0,0 +1,6 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, cera20c, 19900505/to/19900507, 1, , 1.0/1.0, 1, SFC, EP, 0, LSP/CP/SSHF/EWSS/NSSS/SSR, , 159, 3/to/24/by/3, ENDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG_acc_SL.19900505.128701.181190.grb, 18, FC +1, 24, 90.0/-179.0/-90.0/180.0, cera20c, 19900506, 1, , 1.0/1.0, 1, SFC, EP, 0, 160/27/28/244, , 159, 000, ENDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.19900506.128701.181190.grb, 00, AN +2, 24, 90.0/-179.0/-90.0/180.0, cera20c, 19900506/to/19900506, 1, , 1.0/1.0, 1/to/91, ML, EP, 0, T/Q/U/V/77/CLWC/CIWC, , 159, 00, ENDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__ML.19900506.128701.181190.grb, 00/03/06/09/12/15/18/21, AN +3, 24, 90.0/-179.0/-90.0/180.0, cera20c, 19900506/to/19900506, 1, , 1.0/1.0, 1, SFC, EP, 0, 141/151/164/165/166/167/168/129/172/27/28/173/186/187/188/235/139/39, , 159, 00, ENDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__SL.19900506.128701.181190.grb, 00/03/06/09/12/15/18/21, AN +4, 24, 90.0/-179.0/-90.0/180.0, cera20c, 19900506/to/19900506, 1, , OFF, 1, ML, EP, 0, LNSP, , 159, 00, ENDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__SL.19900506.128701.181190.grb, 00/03/06/09/12/15/18/21, AN diff --git a/Testing/Regression/Mars_request/7.0.4/CERA_mr.csv b/Testing/Regression/Mars_request/7.0.4/CERA_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..6dc2cda25a685d2c14772ecf23d99732478a492e --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/CERA_mr.csv @@ -0,0 +1,6 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 19990808/to/19990810, 1, , 1.0/1.0, 1, SFC, EP, 0, LSP/CP/SSHF/EWSS/NSSS/SSR, , 159, 3/to/24/by/3, ENDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG_acc_SL.19990808.128701.181188.grb, 18, FC +1, 24, 90.0/-179.0/-90.0/180.0, None, 19990809, 1, , 1.0/1.0, 1, SFC, EP, 0, 160/27/28/244, , 159, 000, ENDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.19990809.128701.181188.grb, 00, AN +2, 24, 90.0/-179.0/-90.0/180.0, None, 19990809/to/19990809, 1, , 1.0/1.0, 1/to/91, ML, EP, 0, T/Q/U/V/77/CLWC/CIWC, , 159, 00, ENDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__ML.19990809.128701.181188.grb, 00/03/06/09/12/15/18/21, AN +3, 24, 90.0/-179.0/-90.0/180.0, None, 19990809/to/19990809, 1, , 1.0/1.0, 1, SFC, EP, 0, 141/151/164/165/166/167/168/129/172/27/28/173/186/187/188/235/139/39, , 159, 00, ENDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__SL.19990809.128701.181188.grb, 00/03/06/09/12/15/18/21, AN +4, 24, 90.0/-179.0/-90.0/180.0, None, 19990809/to/19990809, 1, , OFF, 1, ML, EP, 0, LNSP, , 159, 00, ENDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__SL.19990809.128701.181188.grb, 00/03/06/09/12/15/18/21, AN diff --git a/Testing/Regression/Mars_request/7.0.4/CF_mr.csv b/Testing/Regression/Mars_request/7.0.4/CF_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..95168d61f572c60f8fe01e209ed302f1efb37c8d --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/CF_mr.csv @@ -0,0 +1,8 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 20190506/to/20190506, 1, , 1.0/1.0, 1, SFC, OD, OFF, LSP/CP/SSHF/EWSS/NSSS/SSR, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CFOG_acc_SL.20190506.128701.181192.grb, 12, CF +1, 24, , None, 20190506/to/20190506, 1, reduced, 80, 1, ML, OD, OFF, Q, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CFGG__SL.20190506.128701.181192.grb, 12, CF +2, 24, 90.0/-179.0/-90.0/180.0, None, 20190506, 1, , 1.0/1.0, 1, SFC, OD, OFF, 160/27/28/173, , 159, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20190506.128701.181192.grb, 00, AN +3, 24, 90.0/-179.0/-90.0/180.0, None, 20190506/to/20190506, 1, , 1.0/1.0, 89/to/91, ML, OD, OFF, T/Q/W/CLWC/CIWC, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CFOG__ML.20190506.128701.181192.grb, 12, CF +4, 24, 90.0/-179.0/-90.0/180.0, None, 20190506/to/20190506, 1, , 1.0/1.0, 1, SFC, OD, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CFOG__SL.20190506.128701.181192.grb, 12, CF +5, 24, 90.0/-179.0/-90.0/180.0, None, 20190506/to/20190506, 1, , OFF, 1/to/91, ML, OD, OFF, U/V/D, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CFSH__ML.20190506.128701.181192.grb, 12, CF +6, 24, 90.0/-179.0/-90.0/180.0, None, 20190506/to/20190506, 1, , OFF, 1, ML, OD, OFF, LNSP, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CFSH__SL.20190506.128701.181192.grb, 12, CF diff --git a/Testing/Regression/Mars_request/7.0.4/CV_mr.csv b/Testing/Regression/Mars_request/7.0.4/CV_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..bf595e1f2dda2cbb4d0228f1cc4c4504626f1c33 --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/CV_mr.csv @@ -0,0 +1,8 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 20120506/to/20120506, 1, , 1.0/1.0, 1, SFC, OD, 1, LSP/CP/SSHF/EWSS/NSSS/SSR, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CVOG_acc_SL.20120506.128701.181194.grb, 12, CV +1, 24, , None, 20120506/to/20120506, 1, reduced, 80, 1, ML, OD, 1, Q, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CVGG__SL.20120506.128701.181194.grb, 12, CV +2, 24, 90.0/-179.0/-90.0/180.0, None, 20120506, 1, , 1.0/1.0, 1, SFC, OD, 1, 160/27/28/173, , 159, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20120506.128701.181194.grb, 00, AN +3, 24, 90.0/-179.0/-90.0/180.0, None, 20120506/to/20120506, 1, , 1.0/1.0, 1/to/62, ML, OD, 1, T/Q/W/CLWC/CIWC, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CVOG__ML.20120506.128701.181194.grb, 12, CV +4, 24, 90.0/-179.0/-90.0/180.0, None, 20120506/to/20120506, 1, , 1.0/1.0, 1, SFC, OD, 1, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CVOG__SL.20120506.128701.181194.grb, 12, CV +5, 24, 90.0/-179.0/-90.0/180.0, None, 20120506/to/20120506, 1, , OFF, 1/to/62, ML, OD, 1, U/V/D, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CVSH__ML.20120506.128701.181194.grb, 12, CV +6, 24, 90.0/-179.0/-90.0/180.0, None, 20120506/to/20120506, 1, , OFF, 1, ML, OD, 1, LNSP, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CVSH__SL.20120506.128701.181194.grb, 12, CV diff --git a/Testing/Regression/Mars_request/7.0.4/EA5.highres_mr.csv b/Testing/Regression/Mars_request/7.0.4/EA5.highres_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..130e0f9da3e85b0f4b54f4f3d826b15eff60bed9 --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/EA5.highres_mr.csv @@ -0,0 +1,6 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 60.0/-100.0/0.0/60.0, None, 20181029/to/20181031, 1, , 0.25/0.25, 1, SFC, EA, OFF, LSP/CP/SSHF/EWSS/NSSS/SSR, , 799, 1/to/12/by/1, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG_acc_SL.20181029.128701.181196.grb, 06/18, FC +1, 24, 60.0/-100.0/0.0/60.0, None, 20181030, 1, , 0.25/0.25, 1, SFC, EA, OFF, 160/27/28/244, , 799, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20181030.128701.181196.grb, 00, AN +2, 24, 60.0/-100.0/0.0/60.0, None, 20181030/to/20181030, 1, , 0.25/0.25, 60/to/137, ML, EA, OFF, T/Q/U/V/77, , 799, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__ML.20181030.128701.181196.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN +3, 24, 60.0/-100.0/0.0/60.0, None, 20181030/to/20181030, 1, , 0.25/0.25, 1, SFC, EA, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 799, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__SL.20181030.128701.181196.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN +4, 24, 60.0/-100.0/0.0/60.0, None, 20181030/to/20181030, 1, , OFF, 1, ML, EA, OFF, LNSP, , 799, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__SL.20181030.128701.181196.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN diff --git a/Testing/Regression/Mars_request/7.0.4/EA5.public_mr.csv b/Testing/Regression/Mars_request/7.0.4/EA5.public_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..84f418035c2f5e4a07b9dec214433e23491fdf99 --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/EA5.public_mr.csv @@ -0,0 +1,6 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 75.0/-15.0/30.0/45.0, ERA5, 20181029/to/20181031, 1, , 1.0/1.0, 1, SFC, EA, OFF, LSP/CP/SSHF/EWSS/NSSS/SSR, , 213, 1/to/12/by/1, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG_acc_SL.20181029.128701.181200.grb, 06/18, FC +1, 24, 75.0/-15.0/30.0/45.0, ERA5, 20181030, 1, , 1.0/1.0, 1, SFC, EA, OFF, 160/27/28/244, , 213, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20181030.128701.181200.grb, 00, AN +2, 24, 75.0/-15.0/30.0/45.0, ERA5, 20181030/to/20181030, 1, , 1.0/1.0, 1/to/137, ML, EA, OFF, T/Q/U/V/77, , 213, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__ML.20181030.128701.181200.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN +3, 24, 75.0/-15.0/30.0/45.0, ERA5, 20181030/to/20181030, 1, , 1.0/1.0, 1, SFC, EA, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 213, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__SL.20181030.128701.181200.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN +4, 24, 75.0/-15.0/30.0/45.0, ERA5, 20181030/to/20181030, 1, , OFF, 1, ML, EA, OFF, LNSP, , 213, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__SL.20181030.128701.181200.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN diff --git a/Testing/Regression/Mars_request/7.0.4/EA5_mr.csv b/Testing/Regression/Mars_request/7.0.4/EA5_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..39beb05a65ea4cc677c0c0272b855b5f228ad0da --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/EA5_mr.csv @@ -0,0 +1,6 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 16, 75.0/-25.0/10.0/60.0, None, 20181029/to/20181031, 1, , 1.0/1.0, 1, SFC, EA, OFF, LSP/CP/SSHF/EWSS/NSSS/SSR, , 159, 1/to/12/by/1, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG_acc_SL.20181029.128701.181198.grb, 06/18, FC +1, 16, 75.0/-25.0/10.0/60.0, None, 20181030, 1, , 1.0/1.0, 1, SFC, EA, OFF, 160/27/28/244, , 159, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20181030.128701.181198.grb, 00, AN +2, 16, 75.0/-25.0/10.0/60.0, None, 20181030/to/20181030, 1, , 1.0/1.0, 130/to/137, ML, EA, OFF, T/Q/U/V/77, , 159, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__ML.20181030.128701.181198.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN +3, 16, 75.0/-25.0/10.0/60.0, None, 20181030/to/20181030, 1, , 1.0/1.0, 1, SFC, EA, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 159, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__SL.20181030.128701.181198.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN +4, 16, 75.0/-25.0/10.0/60.0, None, 20181030/to/20181030, 1, , OFF, 1, ML, EA, OFF, LNSP, , 159, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__SL.20181030.128701.181198.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN diff --git a/Testing/Regression/Mars_request/7.0.4/EI.public_mr.csv b/Testing/Regression/Mars_request/7.0.4/EI.public_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..412f6c37c368300b563e844409ca934ee26226fa --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/EI.public_mr.csv @@ -0,0 +1,8 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, interim, 20180630/to/20180702, 1, , 1.0/1.0, 1, SFC, EI, OFF, LSP/CP/SSHF/EWSS/NSSS/SSR, , 159, 6/to/12/by/6, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG_acc_SL.20180630.128701.181208.grb, 00/12, FC +1, 24, , interim, 20180701/to/20180701, 1, reduced, 80, 1, ML, EI, OFF, Q, , 159, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANGG__SL.20180701.128701.181208.grb, 00/06/12/18, AN +2, 24, 90.0/-179.0/-90.0/180.0, interim, 20180701, 1, , 1.0/1.0, 1, SFC, EI, OFF, 160/27/28/173, , 159, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20180701.128701.181208.grb, 00, AN +3, 24, 90.0/-179.0/-90.0/180.0, interim, 20180701/to/20180701, 1, , 1.0/1.0, 1/to/60, ML, EI, OFF, T/Q/CLWC/CIWC, , 159, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__ML.20180701.128701.181208.grb, 00/06/12/18, AN +4, 24, 90.0/-179.0/-90.0/180.0, interim, 20180701/to/20180701, 1, , 1.0/1.0, 1, SFC, EI, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 159, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__SL.20180701.128701.181208.grb, 00/06/12/18, AN +5, 24, 90.0/-179.0/-90.0/180.0, interim, 20180701/to/20180701, 1, , OFF, 1/to/60, ML, EI, OFF, U/V/D, , 159, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__ML.20180701.128701.181208.grb, 00/06/12/18, AN +6, 24, 90.0/-179.0/-90.0/180.0, interim, 20180701/to/20180701, 1, , OFF, 1, ML, EI, OFF, LNSP, , 159, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__SL.20180701.128701.181208.grb, 00/06/12/18, AN diff --git a/Testing/Regression/Mars_request/7.0.4/EI_mr.csv b/Testing/Regression/Mars_request/7.0.4/EI_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..8257a6b8abcc551adcf6f9f496c62cee1c255810 --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/EI_mr.csv @@ -0,0 +1,13 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 20160706/to/20160708, 1, , 1.0/1.0, 1, SFC, EI, OFF, LSP/CP/SSHF/EWSS/NSSS/SSR, , 159, 3/to/12/by/3, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG_acc_SL.20160706.128701.181202.grb, 00/12, FC +1, 24, , None, 20160707/to/20160707, 1, reduced, 80, 1, ML, EI, OFF, Q, , 159, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANGG__SL.20160707.128701.181202.grb, 00/12, AN +2, 24, 90.0/-179.0/-90.0/180.0, None, 20160707, 1, , 1.0/1.0, 1, SFC, EI, OFF, 160/27/28/173, , 159, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20160707.128701.181202.grb, 00, AN +3, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , 1.0/1.0, 1/to/60, ML, EI, OFF, T/Q/CLWC/CIWC, , 159, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__ML.20160707.128701.181202.grb, 00/12, AN +4, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , 1.0/1.0, 1, SFC, EI, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 159, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__SL.20160707.128701.181202.grb, 00/12, AN +5, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , OFF, 1/to/60, ML, EI, OFF, U/V/D, , 159, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__ML.20160707.128701.181202.grb, 00/12, AN +6, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , OFF, 1, ML, EI, OFF, LNSP, , 159, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__SL.20160707.128701.181202.grb, 00/12, AN +7, 24, , None, 20160707/to/20160707, 1, reduced, 80, 1, ML, EI, OFF, Q, , 159, 03/06/09, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCGG__SL.20160707.128701.181202.grb, 00/12, FC +8, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , 1.0/1.0, 1/to/60, ML, EI, OFF, T/Q/CLWC/CIWC, , 159, 03/06/09, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__ML.20160707.128701.181202.grb, 00/12, FC +9, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , 1.0/1.0, 1, SFC, EI, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 159, 03/06/09, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__SL.20160707.128701.181202.grb, 00/12, FC +10, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , OFF, 1/to/60, ML, EI, OFF, U/V/D, , 159, 03/06/09, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCSH__ML.20160707.128701.181202.grb, 00/12, FC +11, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , OFF, 1, ML, EI, OFF, LNSP, , 159, 03/06/09, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCSH__SL.20160707.128701.181202.grb, 00/12, FC diff --git a/Testing/Regression/Mars_request/7.0.4/OD.ELDA.FC.eta.ens.double_mr.csv b/Testing/Regression/Mars_request/7.0.4/OD.ELDA.FC.eta.ens.double_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..ebdbd1492cb87a6d1c417151833662d2e7b0aca3 --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/OD.ELDA.FC.eta.ens.double_mr.csv @@ -0,0 +1,9 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 30.0/-10.0/10.0/10.0, None, 20190531/to/20190602, 1, , 1.0/1.0, 1, SFC, OD, 0/to/25, LSP/CP/SSHF/EWSS/NSSS/SSR, , 159, 3/to/12/by/3, ELDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG_acc_SL.20190531.128701.181210.grb, 06/18, FC +1, 24, 30.0/-10.0/10.0/10.0, None, 20190601, 1, , 1.0/1.0, 1, SFC, OD, 0/to/25, 160/27/28/173, , 159, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20190601.128701.181210.grb, 00, AN +2, 24, 30.0/-10.0/10.0/10.0, None, 20190601/to/20190601, 1, , 1.0/1.0, 1/TO/137, ML, OD, 0/to/25, T/Q/U/V/77/CLWC/CIWC, , 159, 00, ELDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__ML.20190601.128701.181210.grb, 00/06/12/18, AN +3, 24, 30.0/-10.0/10.0/10.0, None, 20190601/to/20190601, 1, , 1.0/1.0, 1, SFC, OD, 0/to/25, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39/134, , 159, 00, ELDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__SL.20190601.128701.181210.grb, 00/06/12/18, AN +4, 24, 30.0/-10.0/10.0/10.0, None, 20190601/to/20190601, 1, , OFF, 1, ML, OD, 0/to/25, LNSP, , 159, 00, ELDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__SL.20190601.128701.181210.grb, 00/06/12/18, AN +5, 24, 30.0/-10.0/10.0/10.0, None, 20190601/to/20190601, 1, , 1.0/1.0, 1/TO/137, ML, OD, 0/to/25, T/Q/U/V/77/CLWC/CIWC, , 159, 09/03, ELDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__ML.20190601.128701.181210.grb, 18/06, FC +6, 24, 30.0/-10.0/10.0/10.0, None, 20190601/to/20190601, 1, , 1.0/1.0, 1, SFC, OD, 0/to/25, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39/134, , 159, 09/03, ELDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__SL.20190601.128701.181210.grb, 18/06, FC +7, 24, 30.0/-10.0/10.0/10.0, None, 20190601/to/20190601, 1, , OFF, 1, ML, OD, 0/to/25, LNSP, , 159, 09/03, ELDA, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCSH__SL.20190601.128701.181210.grb, 18/06, FC diff --git a/Testing/Regression/Mars_request/7.0.4/OD.ENFO.CF_mr.csv b/Testing/Regression/Mars_request/7.0.4/OD.ENFO.CF_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..14502cb86fa679059bc66630ce079d3fd44d7495 --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/OD.ENFO.CF_mr.csv @@ -0,0 +1,8 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 20190531/to/20190602, 1, , 1.0/1.0, 1, SFC, OD, 0, LSP/CP/SSHF/EWSS/NSSS/SSR, , 159, 3/to/12/by/3, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CFOG_acc_SL.20190531.128701.181212.grb, 00/12, CF +1, 24, , None, 20190601/to/20190601, 1, reduced, 80, 1, ML, OD, 0, Q, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CFGG__SL.20190601.128701.181212.grb, 00/12, CF +2, 24, 90.0/-179.0/-90.0/180.0, None, 20190601, 1, , 1.0/1.0, 1, SFC, OD, 0, 160/27/28/173, , 159, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20190601.128701.181212.grb, 00, AN +3, 24, 90.0/-179.0/-90.0/180.0, None, 20190601/to/20190601, 1, , 1.0/1.0, 1/TO/91, ML, OD, 0, T/Q/CLWC/CIWC, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CFOG__ML.20190601.128701.181212.grb, 00/12, CF +4, 24, 90.0/-179.0/-90.0/180.0, None, 20190601/to/20190601, 1, , 1.0/1.0, 1, SFC, OD, 0, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39/134, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CFOG__SL.20190601.128701.181212.grb, 00/12, CF +5, 24, 90.0/-179.0/-90.0/180.0, None, 20190601/to/20190601, 1, , OFF, 1/to/91, ML, OD, 0, U/V/D, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CFSH__ML.20190601.128701.181212.grb, 00/12, CF +6, 24, 90.0/-179.0/-90.0/180.0, None, 20190601/to/20190601, 1, , OFF, 1, ML, OD, 0, LNSP, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/CFSH__SL.20190601.128701.181212.grb, 00/12, CF diff --git a/Testing/Regression/Mars_request/7.0.4/OD.ENFO.PF_mr.csv b/Testing/Regression/Mars_request/7.0.4/OD.ENFO.PF_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..fbdf5220efa6e23b8ea3ef5558fdd175b7b196ed --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/OD.ENFO.PF_mr.csv @@ -0,0 +1,8 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 20190630/to/20190702, 1, , 1.0/1.0, 1, SFC, OD, 1/TO/50, LSP/CP/SSHF/EWSS/NSSS/SSR, , 159, 3/to/12/by/3, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/PFOG_acc_SL.20190630.128701.181214.grb, 00/12, PF +1, 24, , None, 20190701/to/20190701, 1, reduced, 80, 1, ML, OD, 1/TO/50, Q, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/PFGG__SL.20190701.128701.181214.grb, 00/12, PF +2, 24, 90.0/-179.0/-90.0/180.0, None, 20190701, 1, , 1.0/1.0, 1, SFC, OD, 1/TO/50, 160/27/28/173, , 159, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20190701.128701.181214.grb, 00, AN +3, 24, 90.0/-179.0/-90.0/180.0, None, 20190701/to/20190701, 1, , 1.0/1.0, 85/TO/91, ML, OD, 1/TO/50, T/Q, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/PFOG__ML.20190701.128701.181214.grb, 00/12, PF +4, 24, 90.0/-179.0/-90.0/180.0, None, 20190701/to/20190701, 1, , 1.0/1.0, 1, SFC, OD, 1/TO/50, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39/134, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/PFOG__SL.20190701.128701.181214.grb, 00/12, PF +5, 24, 90.0/-179.0/-90.0/180.0, None, 20190701/to/20190701, 1, , OFF, 1/to/91, ML, OD, 1/TO/50, U/V/D, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/PFSH__ML.20190701.128701.181214.grb, 00/12, PF +6, 24, 90.0/-179.0/-90.0/180.0, None, 20190701/to/20190701, 1, , OFF, 1, ML, OD, 1/TO/50, LNSP, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/PFSH__SL.20190701.128701.181214.grb, 00/12, PF diff --git a/Testing/Regression/Mars_request/7.0.4/OD.OPER.4V.operational_mr.csv b/Testing/Regression/Mars_request/7.0.4/OD.OPER.4V.operational_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..7c18a536de364095275bf71b86e07b7e91b70ab5 --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/OD.OPER.4V.operational_mr.csv @@ -0,0 +1,18 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 60.0/-25.0/10.0/60.0, None, 20190709/to/20190711, 1, , 1.0/1.0, 1, SFC, OD, OFF, LSP/CP/SSHF/EWSS/NSSS/SSR, , 255, 1/to/12/by/1, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG_acc_SL.20190709.128701.181216.grb, 00/12, FC +1, 24, , None, 20190710/to/20190710, 1, reduced, 128, 1, ML, OD, OFF, Q, , 255, 00/03, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/4VGG__SL.20190710.128701.181216.grb, 09/21, 4V +2, 24, 60.0/-25.0/10.0/60.0, None, 20190710, 1, , 1.0/1.0, 1, SFC, OD, OFF, 160/27/28/173, , 255, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20190710.128701.181216.grb, 00, AN +3, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , 1.0/1.0, 1/to/137, ML, OD, OFF, T/Q/CLWC/CIWC, , 255, 00/03, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/4VOG__ML.20190710.128701.181216.grb, 09/21, 4V +4, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , 1.0/1.0, 1, SFC, OD, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 255, 00/03, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/4VOG__SL.20190710.128701.181216.grb, 09/21, 4V +5, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , OFF, 1/to/137, ML, OD, OFF, U/V/D, , 255, 00/03, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/4VSH__ML.20190710.128701.181216.grb, 09/21, 4V +6, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , OFF, 1, ML, OD, OFF, LNSP, , 255, 00/03, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/4VSH__SL.20190710.128701.181216.grb, 09/21, 4V +7, 24, , None, 20190710/to/20190710, 1, reduced, 128, 1, ML, OD, OFF, Q, , 255, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANGG__SL.20190710.128701.181216.grb, 00/06/18, AN +8, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , 1.0/1.0, 1/to/137, ML, OD, OFF, T/Q/CLWC/CIWC, , 255, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__ML.20190710.128701.181216.grb, 00/06/18, AN +9, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , 1.0/1.0, 1, SFC, OD, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 255, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__SL.20190710.128701.181216.grb, 00/06/18, AN +10, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , OFF, 1/to/137, ML, OD, OFF, U/V/D, , 255, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__ML.20190710.128701.181216.grb, 00/06/18, AN +11, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , OFF, 1, ML, OD, OFF, LNSP, , 255, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__SL.20190710.128701.181216.grb, 00/06/18, AN +12, 24, , None, 20190710/to/20190710, 1, reduced, 128, 1, ML, OD, OFF, Q, , 255, 01/02/03/04/05/07/08/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCGG__SL.20190710.128701.181216.grb, 00/12, FC +13, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , 1.0/1.0, 1/to/137, ML, OD, OFF, T/Q/CLWC/CIWC, , 255, 01/02/03/04/05/07/08/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__ML.20190710.128701.181216.grb, 00/12, FC +14, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , 1.0/1.0, 1, SFC, OD, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 255, 01/02/03/04/05/07/08/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__SL.20190710.128701.181216.grb, 00/12, FC +15, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , OFF, 1/to/137, ML, OD, OFF, U/V/D, , 255, 01/02/03/04/05/07/08/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCSH__ML.20190710.128701.181216.grb, 00/12, FC +16, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , OFF, 1, ML, OD, OFF, LNSP, , 255, 01/02/03/04/05/07/08/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCSH__SL.20190710.128701.181216.grb, 00/12, FC diff --git a/Testing/Regression/Mars_request/7.0.4/OD.OPER.FC.36hours_mr.csv b/Testing/Regression/Mars_request/7.0.4/OD.OPER.FC.36hours_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..905c4f43816c7d3707cd5b6e16dc40ee14a06013 --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/OD.OPER.FC.36hours_mr.csv @@ -0,0 +1,6 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 20190406/to/20190406, 1, , 1.0/1.0, 1, SFC, OD, OFF, LSP/CP/SSHF/EWSS/NSSS/SSR, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG_acc_SL.20190406.128701.181218.grb, 00, FC +1, 24, 90.0/-179.0/-90.0/180.0, None, 20190406, 1, , 1.0/1.0, 1, SFC, OD, OFF, 160/27/28/173, , 159, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20190406.128701.181218.grb, 00, AN +2, 24, 90.0/-179.0/-90.0/180.0, None, 20190406/to/20190406, 1, , 1.0/1.0, 1/to/137, ML, OD, OFF, T/Q/U/V/77/CLWC/CIWC, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__ML.20190406.128701.181218.grb, 00, FC +3, 24, 90.0/-179.0/-90.0/180.0, None, 20190406/to/20190406, 1, , 1.0/1.0, 1, SFC, OD, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__SL.20190406.128701.181218.grb, 00, FC +4, 24, 90.0/-179.0/-90.0/180.0, None, 20190406/to/20190406, 1, , OFF, 1, ML, OD, OFF, LNSP, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCSH__SL.20190406.128701.181218.grb, 00, FC diff --git a/Testing/Regression/Mars_request/7.0.4/OD.OPER.FC.twiceaday_mr.csv b/Testing/Regression/Mars_request/7.0.4/OD.OPER.FC.twiceaday_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..07408706e77f3bf16424cbb008a654548d5839b8 --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/OD.OPER.FC.twiceaday_mr.csv @@ -0,0 +1,6 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 20190604/to/20190606, 1, , 1.0/1.0, 1, SFC, OD, OFF, LSP/CP/SSHF/EWSS/NSSS/SSR, , 159, 3/to/12/by/3, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG_acc_SL.20190604.128701.181220.grb, 00/12, FC +1, 24, 90.0/-179.0/-90.0/180.0, None, 20190605, 1, , 1.0/1.0, 1, SFC, OD, OFF, 160/27/28/173, , 159, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20190605.128701.181220.grb, 00, AN +2, 24, 90.0/-179.0/-90.0/180.0, None, 20190605/to/20190605, 1, , 1.0/1.0, 1/to/137, ML, OD, OFF, T/Q/U/V/77/CLWC/CIWC, , 159, 00/03/06/09, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__ML.20190605.128701.181220.grb, 00/12, FC +3, 24, 90.0/-179.0/-90.0/180.0, None, 20190605/to/20190605, 1, , 1.0/1.0, 1, SFC, OD, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 159, 00/03/06/09, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__SL.20190605.128701.181220.grb, 00/12, FC +4, 24, 90.0/-179.0/-90.0/180.0, None, 20190605/to/20190605, 1, , OFF, 1, ML, OD, OFF, LNSP, , 159, 00/03/06/09, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCSH__SL.20190605.128701.181220.grb, 00/12, FC diff --git a/Testing/Regression/Mars_request/7.0.4/OD.OPER.global.025_mr.csv b/Testing/Regression/Mars_request/7.0.4/OD.OPER.global.025_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..9cb1d266ccc222ce71c951467fed7c4479833958 --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/OD.OPER.global.025_mr.csv @@ -0,0 +1,9 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.75/-90.0/180.0, None, 20190630/to/20190702, 1, , 0.25/0.25, 1, SFC, OD, OFF, LSP/CP/SSHF/EWSS/NSSS/SSR, , 799, 1/to/12/by/1, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG_acc_SL.20190630.128701.181222.grb, 00/12, FC +1, 24, 90.0/-179.75/-90.0/180.0, None, 20190701, 1, , 0.25/0.25, 1, SFC, OD, OFF, 160/27/28/173, , 799, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20190701.128701.181222.grb, 00, AN +2, 24, 90.0/-179.75/-90.0/180.0, None, 20190701/to/20190701, 1, , 0.25/0.25, 1/to/137, ML, OD, OFF, T/Q/U/V/77/CLWC/CIWC, , 799, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__ML.20190701.128701.181222.grb, 00/12, AN +3, 24, 90.0/-179.75/-90.0/180.0, None, 20190701/to/20190701, 1, , 0.25/0.25, 1, SFC, OD, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 799, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__SL.20190701.128701.181222.grb, 00/12, AN +4, 24, 90.0/-179.75/-90.0/180.0, None, 20190701/to/20190701, 1, , OFF, 1, ML, OD, OFF, LNSP, , 799, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__SL.20190701.128701.181222.grb, 00/12, AN +5, 24, 90.0/-179.75/-90.0/180.0, None, 20190701/to/20190701, 1, , 0.25/0.25, 1/to/137, ML, OD, OFF, T/Q/U/V/77/CLWC/CIWC, , 799, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__ML.20190701.128701.181222.grb, 00/12, FC +6, 24, 90.0/-179.75/-90.0/180.0, None, 20190701/to/20190701, 1, , 0.25/0.25, 1, SFC, OD, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 799, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__SL.20190701.128701.181222.grb, 00/12, FC +7, 24, 90.0/-179.75/-90.0/180.0, None, 20190701/to/20190701, 1, , OFF, 1, ML, OD, OFF, LNSP, , 799, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCSH__SL.20190701.128701.181222.grb, 00/12, FC diff --git a/Testing/Regression/Mars_request/7.0.4/OD.OPER.highres.eta_mr.csv b/Testing/Regression/Mars_request/7.0.4/OD.OPER.highres.eta_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..14ed1f21ecfc18b814dc96dcfe973540daa5a6ab --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/OD.OPER.highres.eta_mr.csv @@ -0,0 +1,9 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 60.0/-10.0/30.0/30.0, None, 20190709/to/20190711, 1, , 0.2/0.2, 1, SFC, OD, OFF, LSP/CP/SSHF/EWSS/NSSS/SSR, , 799, 1/to/12/by/1, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG_acc_SL.20190709.128701.181224.grb, 00/12, FC +1, 24, 60.0/-10.0/30.0/30.0, None, 20190710, 1, , 0.2/0.2, 1, SFC, OD, OFF, 160/27/28/173, , 799, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20190710.128701.181224.grb, 00, AN +2, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1/to/137, ML, OD, OFF, T/Q/U/V/77/CLWC/CIWC, , 799, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__ML.20190710.128701.181224.grb, 00/12, AN +3, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1, SFC, OD, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 799, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__SL.20190710.128701.181224.grb, 00/12, AN +4, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , OFF, 1, ML, OD, OFF, LNSP, , 799, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__SL.20190710.128701.181224.grb, 00/12, AN +5, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1/to/137, ML, OD, OFF, T/Q/U/V/77/CLWC/CIWC, , 799, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__ML.20190710.128701.181224.grb, 00/12, FC +6, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1, SFC, OD, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 799, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__SL.20190710.128701.181224.grb, 00/12, FC +7, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , OFF, 1, ML, OD, OFF, LNSP, , 799, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCSH__SL.20190710.128701.181224.grb, 00/12, FC diff --git a/Testing/Regression/Mars_request/7.0.4/OD.OPER.highres.gauss_mr.csv b/Testing/Regression/Mars_request/7.0.4/OD.OPER.highres.gauss_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..74f24f2f793e73cce185cbbbfa994652fb7d0391 --- /dev/null +++ b/Testing/Regression/Mars_request/7.0.4/OD.OPER.highres.gauss_mr.csv @@ -0,0 +1,13 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 60.0/-10.0/30.0/30.0, None, 20190709/to/20190711, 1, , 0.2/0.2, 1, SFC, OD, OFF, LSP/CP/SSHF/EWSS/NSSS/SSR, , 1279, 1/to/12/by/1, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG_acc_SL.20190709.128701.181226.grb, 00/12, FC +1, 24, , None, 20190710/to/20190710, 1, reduced, 640, 1, ML, OD, OFF, Q, , 1279, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANGG__SL.20190710.128701.181226.grb, 00/12, AN +2, 24, 60.0/-10.0/30.0/30.0, None, 20190710, 1, , 0.2/0.2, 1, SFC, OD, OFF, 160/27/28/173, , 1279, 000, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/OG_OROLSM__SL.20190710.128701.181226.grb, 00, AN +3, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1/to/137, ML, OD, OFF, T/Q/CLWC/CIWC, , 1279, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__ML.20190710.128701.181226.grb, 00/12, AN +4, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1, SFC, OD, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 1279, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANOG__SL.20190710.128701.181226.grb, 00/12, AN +5, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , OFF, 1/to/137, ML, OD, OFF, U/V/D, , 1279, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__ML.20190710.128701.181226.grb, 00/12, AN +6, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , OFF, 1, ML, OD, OFF, LNSP, , 1279, 00, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/ANSH__SL.20190710.128701.181226.grb, 00/12, AN +7, 24, , None, 20190710/to/20190710, 1, reduced, 640, 1, ML, OD, OFF, Q, , 1279, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCGG__SL.20190710.128701.181226.grb, 00/12, FC +8, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1/to/137, ML, OD, OFF, T/Q/CLWC/CIWC, , 1279, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__ML.20190710.128701.181226.grb, 00/12, FC +9, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1, SFC, OD, OFF, 141/151/164/165/166/167/168/129/172/186/187/188/235/139/39, , 1279, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCOG__SL.20190710.128701.181226.grb, 00/12, FC +10, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , OFF, 1/to/137, ML, OD, OFF, U/V/D, , 1279, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCSH__ML.20190710.128701.181226.grb, 00/12, FC +11, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , OFF, 1, ML, OD, OFF, LNSP, , 1279, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/TESTFE704NEU/flex_extract_v7.0.4/python/../work/FCSH__SL.20190710.128701.181226.grb, 00/12, FC diff --git a/Testing/Regression/Mars_request/7.1/CERA.public_mr.csv b/Testing/Regression/Mars_request/7.1/CERA.public_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..9c7b0a1d44e539c5dd8b5fcc8fd5c8276083d4d6 --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/CERA.public_mr.csv @@ -0,0 +1,6 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, cera20c, 19900505/to/19900507, 1, , 1.0/1.0, 1, SFC, EP, 000, 142.128/143.128/146.128/180.128/181.128/176.128, , 159, 3/to/24/by/3, ENDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG_acc_SL.19900505.100525.100526.grb, 18, FC +1, 24, 90.0/-179.0/-90.0/180.0, cera20c, 19900506, 1, , 1.0/1.0, 1, SFC, EP, 000, 160.128/027.128/028.128/244.128, , 159, 000, ENDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.19900506.100525.100526.grb, 00, AN +2, 24, 90.0/-179.0/-90.0/180.0, cera20c, 19900506/to/19900506, 1, , 1.0/1.0, 1/to/91, ML, EP, 000, 130.128/133.128/131.128/132.128/077.128/246.128/247.128, , 159, 00, ENDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__ML.19900506.100525.100526.grb, 00/03/06/09/12/15/18/21, AN +3, 24, 90.0/-179.0/-90.0/180.0, cera20c, 19900506/to/19900506, 1, , 1.0/1.0, 1, SFC, EP, 000, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/027.128/028.128/173.128/186.128/187.128/188.128/235.128/139.128/039.128, , 159, 00, ENDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__SL.19900506.100525.100526.grb, 00/03/06/09/12/15/18/21, AN +4, 24, 90.0/-179.0/-90.0/180.0, cera20c, 19900506/to/19900506, 1, , OFF, 1, ML, EP, 000, 152.128, , 159, 00, ENDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__SL.19900506.100525.100526.grb, 00/03/06/09/12/15/18/21, AN diff --git a/Testing/Regression/Mars_request/7.1/CERA_mr.csv b/Testing/Regression/Mars_request/7.1/CERA_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..332fbbd6ca0c9bf678beadbfdc9d934e57a4f556 --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/CERA_mr.csv @@ -0,0 +1,6 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 19990808/to/19990810, 1, , 1.0/1.0, 1, SFC, EP, 000, 142.128/143.128/146.128/180.128/181.128/176.128, , 159, 3/to/24/by/3, ENDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG_acc_SL.19990808.100520.100521.grb, 18, FC +1, 24, 90.0/-179.0/-90.0/180.0, None, 19990809, 1, , 1.0/1.0, 1, SFC, EP, 000, 160.128/027.128/028.128/244.128, , 159, 000, ENDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.19990809.100520.100521.grb, 00, AN +2, 24, 90.0/-179.0/-90.0/180.0, None, 19990809/to/19990809, 1, , 1.0/1.0, 1/to/91, ML, EP, 000, 130.128/133.128/131.128/132.128/077.128/246.128/247.128, , 159, 00, ENDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__ML.19990809.100520.100521.grb, 00/03/06/09/12/15/18/21, AN +3, 24, 90.0/-179.0/-90.0/180.0, None, 19990809/to/19990809, 1, , 1.0/1.0, 1, SFC, EP, 000, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/027.128/028.128/173.128/186.128/187.128/188.128/235.128/139.128/039.128, , 159, 00, ENDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__SL.19990809.100520.100521.grb, 00/03/06/09/12/15/18/21, AN +4, 24, 90.0/-179.0/-90.0/180.0, None, 19990809/to/19990809, 1, , OFF, 1, ML, EP, 000, 152.128, , 159, 00, ENDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__SL.19990809.100520.100521.grb, 00/03/06/09/12/15/18/21, AN diff --git a/Testing/Regression/Mars_request/7.1/CF_mr.csv b/Testing/Regression/Mars_request/7.1/CF_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..77f0257c3d03479b27dfe71ac169c8b62caf1551 --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/CF_mr.csv @@ -0,0 +1,8 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 20190506/to/20190506, 1, , 1.0/1.0, 1, SFC, OD, OFF, 142.128/143.128/146.128/180.128/181.128/176.128, , 159, 3/to/36/by/3, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CFOG_acc_SL.20190506.100515.100516.grb, 12, CF +1, 24, , None, 20190506/to/20190506, 1, reduced, 80, 1, ML, OD, OFF, 133.128, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CFGG__SL.20190506.100515.100516.grb, 12, CF +2, 24, 90.0/-179.0/-90.0/180.0, None, 20190506, 1, , 1.0/1.0, 1, SFC, OD, OFF, 160.128/027.128/028.128/173.128, , 159, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20190506.100515.100516.grb, 00, AN +3, 24, 90.0/-179.0/-90.0/180.0, None, 20190506/to/20190506, 1, , 1.0/1.0, 89/to/91, ML, OD, OFF, 130.128/133.128/135.128/246.128/247.128, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CFOG__ML.20190506.100515.100516.grb, 12, CF +4, 24, 90.0/-179.0/-90.0/180.0, None, 20190506/to/20190506, 1, , 1.0/1.0, 1, SFC, OD, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CFOG__SL.20190506.100515.100516.grb, 12, CF +5, 24, 90.0/-179.0/-90.0/180.0, None, 20190506/to/20190506, 1, , OFF, 1/to/91, ML, OD, OFF, 131.128/132.128/155.128, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CFSH__ML.20190506.100515.100516.grb, 12, CF +6, 24, 90.0/-179.0/-90.0/180.0, None, 20190506/to/20190506, 1, , OFF, 1, ML, OD, OFF, 152.128, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CFSH__SL.20190506.100515.100516.grb, 12, CF diff --git a/Testing/Regression/Mars_request/7.1/CV_mr.csv b/Testing/Regression/Mars_request/7.1/CV_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..cb87b65355c2ac11cd32bb945e1bae0e03610959 --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/CV_mr.csv @@ -0,0 +1,8 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 20120506/to/20120506, 1, , 1.0/1.0, 1, SFC, OD, 001, 142.128/143.128/146.128/180.128/181.128/176.128, , 159, 3/to/36/by/3, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CVOG_acc_SL.20120506.100510.100511.grb, 12, CV +1, 24, , None, 20120506/to/20120506, 1, reduced, 80, 1, ML, OD, 001, 133.128, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CVGG__SL.20120506.100510.100511.grb, 12, CV +2, 24, 90.0/-179.0/-90.0/180.0, None, 20120506, 1, , 1.0/1.0, 1, SFC, OD, 001, 160.128/027.128/028.128/173.128, , 159, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20120506.100510.100511.grb, 00, AN +3, 24, 90.0/-179.0/-90.0/180.0, None, 20120506/to/20120506, 1, , 1.0/1.0, 1/to/62, ML, OD, 001, 130.128/133.128/135.128/246.128/247.128, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CVOG__ML.20120506.100510.100511.grb, 12, CV +4, 24, 90.0/-179.0/-90.0/180.0, None, 20120506/to/20120506, 1, , 1.0/1.0, 1, SFC, OD, 001, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CVOG__SL.20120506.100510.100511.grb, 12, CV +5, 24, 90.0/-179.0/-90.0/180.0, None, 20120506/to/20120506, 1, , OFF, 1/to/62, ML, OD, 001, 131.128/132.128/155.128, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CVSH__ML.20120506.100510.100511.grb, 12, CV +6, 24, 90.0/-179.0/-90.0/180.0, None, 20120506/to/20120506, 1, , OFF, 1, ML, OD, 001, 152.128, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CVSH__SL.20120506.100510.100511.grb, 12, CV diff --git a/Testing/Regression/Mars_request/7.1/EA5.highres_mr.csv b/Testing/Regression/Mars_request/7.1/EA5.highres_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..1dc1200a901c51148d1c310be834a49329be1d3a --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/EA5.highres_mr.csv @@ -0,0 +1,6 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 60.0/-100.0/0.0/60.0, None, 20181029/to/20181031, 1, , 0.25/0.25, 1, SFC, EA, OFF, 142.128/143.128/146.128/180.128/181.128/176.128, , 799, 1/to/12/by/1, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG_acc_SL.20181029.100505.100506.grb, 06/18, FC +1, 24, 60.0/-100.0/0.0/60.0, None, 20181030, 1, , 0.25/0.25, 1, SFC, EA, OFF, 160.128/027.128/028.128/244.128, , 799, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20181030.100505.100506.grb, 00, AN +2, 24, 60.0/-100.0/0.0/60.0, None, 20181030/to/20181030, 1, , 0.25/0.25, 60/to/137, ML, EA, OFF, 130.128/133.128/131.128/132.128/077.128, , 799, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__ML.20181030.100505.100506.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN +3, 24, 60.0/-100.0/0.0/60.0, None, 20181030/to/20181030, 1, , 0.25/0.25, 1, SFC, EA, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 799, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__SL.20181030.100505.100506.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN +4, 24, 60.0/-100.0/0.0/60.0, None, 20181030/to/20181030, 1, , OFF, 1, ML, EA, OFF, 152.128, , 799, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__SL.20181030.100505.100506.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN diff --git a/Testing/Regression/Mars_request/7.1/EA5.public_mr.csv b/Testing/Regression/Mars_request/7.1/EA5.public_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..be1edb7652c75492498f670a7f7243be7cbe5ec4 --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/EA5.public_mr.csv @@ -0,0 +1,6 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 75.0/-15.0/30.0/45.0, ERA5, 20181029/to/20181031, 1, , 1.0/1.0, 1, SFC, EA, OFF, 142.128/143.128/146.128/180.128/181.128/176.128, , 213, 1/to/12/by/1, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG_acc_SL.20181029.100500.100501.grb, 06/18, FC +1, 24, 75.0/-15.0/30.0/45.0, ERA5, 20181030, 1, , 1.0/1.0, 1, SFC, EA, OFF, 160.128/027.128/028.128/244.128, , 213, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20181030.100500.100501.grb, 00, AN +2, 24, 75.0/-15.0/30.0/45.0, ERA5, 20181030/to/20181030, 1, , 1.0/1.0, 1/to/137, ML, EA, OFF, 130.128/133.128/131.128/132.128/077.128, , 213, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__ML.20181030.100500.100501.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN +3, 24, 75.0/-15.0/30.0/45.0, ERA5, 20181030/to/20181030, 1, , 1.0/1.0, 1, SFC, EA, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 213, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__SL.20181030.100500.100501.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN +4, 24, 75.0/-15.0/30.0/45.0, ERA5, 20181030/to/20181030, 1, , OFF, 1, ML, EA, OFF, 152.128, , 213, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__SL.20181030.100500.100501.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN diff --git a/Testing/Regression/Mars_request/7.1/EA5_mr.csv b/Testing/Regression/Mars_request/7.1/EA5_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..5a907db0a9f30e8cc9a15073a5d173eb6269b3b0 --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/EA5_mr.csv @@ -0,0 +1,6 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 16, 75.0/-25.0/10.0/60.0, None, 20181029/to/20181031, 1, , 1.0/1.0, 1, SFC, EA, OFF, 142.128/143.128/146.128/180.128/181.128/176.128, , 159, 1/to/12/by/1, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG_acc_SL.20181029.100495.100496.grb, 06/18, FC +1, 16, 75.0/-25.0/10.0/60.0, None, 20181030, 1, , 1.0/1.0, 1, SFC, EA, OFF, 160.128/027.128/028.128/244.128, , 159, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20181030.100495.100496.grb, 00, AN +2, 16, 75.0/-25.0/10.0/60.0, None, 20181030/to/20181030, 1, , 1.0/1.0, 130/to/137, ML, EA, OFF, 130.128/133.128/131.128/132.128/077.128, , 159, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__ML.20181030.100495.100496.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN +3, 16, 75.0/-25.0/10.0/60.0, None, 20181030/to/20181030, 1, , 1.0/1.0, 1, SFC, EA, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 159, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__SL.20181030.100495.100496.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN +4, 16, 75.0/-25.0/10.0/60.0, None, 20181030/to/20181030, 1, , OFF, 1, ML, EA, OFF, 152.128, , 159, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__SL.20181030.100495.100496.grb, 00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23, AN diff --git a/Testing/Regression/Mars_request/7.1/EI.public_mr.csv b/Testing/Regression/Mars_request/7.1/EI.public_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..d40365d5ed59bd7522e56ec01a9468441ca8169d --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/EI.public_mr.csv @@ -0,0 +1,8 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, interim, 20180630/to/20180702, 1, , 1.0/1.0, 1, SFC, EI, OFF, 142.128/143.128/146.128/180.128/181.128/176.128, , 159, 6/to/12/by/6, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG_acc_SL.20180630.100490.100491.grb, 00/12, FC +1, 24, , interim, 20180701/to/20180701, 1, reduced, 80, 1, ML, EI, OFF, 133.128, , 159, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANGG__SL.20180701.100490.100491.grb, 00/06/12/18, AN +2, 24, 90.0/-179.0/-90.0/180.0, interim, 20180701, 1, , 1.0/1.0, 1, SFC, EI, OFF, 160.128/027.128/028.128/173.128, , 159, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20180701.100490.100491.grb, 00, AN +3, 24, 90.0/-179.0/-90.0/180.0, interim, 20180701/to/20180701, 1, , 1.0/1.0, 1/to/60, ML, EI, OFF, 130.128/133.128/246.128/247.128, , 159, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__ML.20180701.100490.100491.grb, 00/06/12/18, AN +4, 24, 90.0/-179.0/-90.0/180.0, interim, 20180701/to/20180701, 1, , 1.0/1.0, 1, SFC, EI, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 159, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__SL.20180701.100490.100491.grb, 00/06/12/18, AN +5, 24, 90.0/-179.0/-90.0/180.0, interim, 20180701/to/20180701, 1, , OFF, 1/to/60, ML, EI, OFF, 131.128/132.128/155.128, , 159, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__ML.20180701.100490.100491.grb, 00/06/12/18, AN +6, 24, 90.0/-179.0/-90.0/180.0, interim, 20180701/to/20180701, 1, , OFF, 1, ML, EI, OFF, 152.128, , 159, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__SL.20180701.100490.100491.grb, 00/06/12/18, AN diff --git a/Testing/Regression/Mars_request/7.1/EI_mr.csv b/Testing/Regression/Mars_request/7.1/EI_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..bd0414d3ce4e674058e47513ca3c21265cb08760 --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/EI_mr.csv @@ -0,0 +1,13 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 20160706/to/20160708, 1, , 1.0/1.0, 1, SFC, EI, OFF, 142.128/143.128/146.128/180.128/181.128/176.128, , 159, 3/to/12/by/3, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG_acc_SL.20160706.100485.100486.grb, 00/12, FC +1, 24, , None, 20160707/to/20160707, 1, reduced, 80, 1, ML, EI, OFF, 133.128, , 159, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANGG__SL.20160707.100485.100486.grb, 00/12, AN +2, 24, 90.0/-179.0/-90.0/180.0, None, 20160707, 1, , 1.0/1.0, 1, SFC, EI, OFF, 160.128/027.128/028.128/173.128, , 159, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20160707.100485.100486.grb, 00, AN +3, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , 1.0/1.0, 1/to/60, ML, EI, OFF, 130.128/133.128/246.128/247.128, , 159, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__ML.20160707.100485.100486.grb, 00/12, AN +4, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , 1.0/1.0, 1, SFC, EI, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 159, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__SL.20160707.100485.100486.grb, 00/12, AN +5, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , OFF, 1/to/60, ML, EI, OFF, 131.128/132.128/155.128, , 159, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__ML.20160707.100485.100486.grb, 00/12, AN +6, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , OFF, 1, ML, EI, OFF, 152.128, , 159, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__SL.20160707.100485.100486.grb, 00/12, AN +7, 24, , None, 20160707/to/20160707, 1, reduced, 80, 1, ML, EI, OFF, 133.128, , 159, 03/06/09, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCGG__SL.20160707.100485.100486.grb, 00/12, FC +8, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , 1.0/1.0, 1/to/60, ML, EI, OFF, 130.128/133.128/246.128/247.128, , 159, 03/06/09, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__ML.20160707.100485.100486.grb, 00/12, FC +9, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , 1.0/1.0, 1, SFC, EI, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 159, 03/06/09, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__SL.20160707.100485.100486.grb, 00/12, FC +10, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , OFF, 1/to/60, ML, EI, OFF, 131.128/132.128/155.128, , 159, 03/06/09, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCSH__ML.20160707.100485.100486.grb, 00/12, FC +11, 24, 90.0/-179.0/-90.0/180.0, None, 20160707/to/20160707, 1, , OFF, 1, ML, EI, OFF, 152.128, , 159, 03/06/09, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCSH__SL.20160707.100485.100486.grb, 00/12, FC diff --git a/Testing/Regression/Mars_request/7.1/OD.ELDA.FC.eta.ens.double_mr.csv b/Testing/Regression/Mars_request/7.1/OD.ELDA.FC.eta.ens.double_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..8cd71ad559860e8d8d51c05ee33f7da93e4b5a3d --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/OD.ELDA.FC.eta.ens.double_mr.csv @@ -0,0 +1,9 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 30.0/-10.0/10.0/10.0, None, 20190531/to/20190602, 1, , 1.0/1.0, 1, SFC, OD, 000/TO/025, 142.128/143.128/146.128/180.128/181.128/176.128, , 159, 3/to/12/by/3, ELDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG_acc_SL.20190531.100480.100481.grb, 06/18, FC +1, 24, 30.0/-10.0/10.0/10.0, None, 20190531, 1, , 1.0/1.0, 1, SFC, OD, 000/TO/025, 160.128/027.128/028.128/173.128, , 159, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20190531.100480.100481.grb, 00, AN +2, 24, 30.0/-10.0/10.0/10.0, None, 20190531/to/20190601, 1, , 1.0/1.0, 1/TO/137, ML, OD, 000/TO/025, 130.128/133.128/131.128/132.128/077.128/246.128/247.128, , 159, 00, ELDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__ML.20190531.100480.100481.grb, 00/06/12/18, AN +3, 24, 30.0/-10.0/10.0/10.0, None, 20190531/to/20190601, 1, , 1.0/1.0, 1, SFC, OD, 000/TO/025, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128/134.128, , 159, 00, ELDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__SL.20190531.100480.100481.grb, 00/06/12/18, AN +4, 24, 30.0/-10.0/10.0/10.0, None, 20190531/to/20190601, 1, , OFF, 1, ML, OD, 000/TO/025, 152.128, , 159, 00, ELDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__SL.20190531.100480.100481.grb, 00/06/12/18, AN +5, 24, 30.0/-10.0/10.0/10.0, None, 20190531/to/20190601, 1, , 1.0/1.0, 1/TO/137, ML, OD, 000/TO/025, 130.128/133.128/131.128/132.128/077.128/246.128/247.128, , 159, 09/03, ELDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__ML.20190531.100480.100481.grb, 18/06, FC +6, 24, 30.0/-10.0/10.0/10.0, None, 20190531/to/20190601, 1, , 1.0/1.0, 1, SFC, OD, 000/TO/025, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128/134.128, , 159, 09/03, ELDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__SL.20190531.100480.100481.grb, 18/06, FC +7, 24, 30.0/-10.0/10.0/10.0, None, 20190531/to/20190601, 1, , OFF, 1, ML, OD, 000/TO/025, 152.128, , 159, 09/03, ELDA, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCSH__SL.20190531.100480.100481.grb, 18/06, FC diff --git a/Testing/Regression/Mars_request/7.1/OD.ENFO.CF_mr.csv b/Testing/Regression/Mars_request/7.1/OD.ENFO.CF_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..864c5a34d4b50de0f5883fb1e6e4fb1367bd3bf9 --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/OD.ENFO.CF_mr.csv @@ -0,0 +1,8 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 20190531/to/20190602, 1, , 1.0/1.0, 1, SFC, OD, 000, 142.128/143.128/146.128/180.128/181.128/176.128, , 159, 3/to/9/by/3, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CFOG_acc_SL.20190531.100475.100476.grb, 00/12, CF +1, 24, , None, 20190601/to/20190601, 1, reduced, 80, 1, ML, OD, 000, 133.128, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CFGG__SL.20190601.100475.100476.grb, 00/12, CF +2, 24, 90.0/-179.0/-90.0/180.0, None, 20190601, 1, , 1.0/1.0, 1, SFC, OD, 000, 160.128/027.128/028.128/173.128, , 159, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20190601.100475.100476.grb, 00, AN +3, 24, 90.0/-179.0/-90.0/180.0, None, 20190601/to/20190601, 1, , 1.0/1.0, 1/TO/91, ML, OD, 000, 130.128/133.128/246.128/247.128, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CFOG__ML.20190601.100475.100476.grb, 00/12, CF +4, 24, 90.0/-179.0/-90.0/180.0, None, 20190601/to/20190601, 1, , 1.0/1.0, 1, SFC, OD, 000, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128/134.128, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CFOG__SL.20190601.100475.100476.grb, 00/12, CF +5, 24, 90.0/-179.0/-90.0/180.0, None, 20190601/to/20190601, 1, , OFF, 1/to/91, ML, OD, 000, 131.128/132.128/155.128, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CFSH__ML.20190601.100475.100476.grb, 00/12, CF +6, 24, 90.0/-179.0/-90.0/180.0, None, 20190601/to/20190601, 1, , OFF, 1, ML, OD, 000, 152.128, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//CFSH__SL.20190601.100475.100476.grb, 00/12, CF diff --git a/Testing/Regression/Mars_request/7.1/OD.ENFO.PF_mr.csv b/Testing/Regression/Mars_request/7.1/OD.ENFO.PF_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..2662baaeddc1fcb5686bc6d4c53ca74c1e0682e4 --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/OD.ENFO.PF_mr.csv @@ -0,0 +1,8 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 20190630/to/20190702, 1, , 1.0/1.0, 1, SFC, OD, 001/TO/050, 142.128/143.128/146.128/180.128/181.128/176.128, , 159, 3/to/9/by/3, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//PFOG_acc_SL.20190630.100470.100471.grb, 00, PF +1, 24, , None, 20190701/to/20190701, 1, reduced, 80, 1, ML, OD, 001/TO/050, 133.128, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//PFGG__SL.20190701.100470.100471.grb, 00/12, PF +2, 24, 90.0/-179.0/-90.0/180.0, None, 20190701, 1, , 1.0/1.0, 1, SFC, OD, 001/TO/050, 160.128/027.128/028.128/173.128, , 159, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20190701.100470.100471.grb, 00, AN +3, 24, 90.0/-179.0/-90.0/180.0, None, 20190701/to/20190701, 1, , 1.0/1.0, 85/TO/91, ML, OD, 001/TO/050, 130.128/133.128, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//PFOG__ML.20190701.100470.100471.grb, 00/12, PF +4, 24, 90.0/-179.0/-90.0/180.0, None, 20190701/to/20190701, 1, , 1.0/1.0, 1, SFC, OD, 001/TO/050, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128/134.128, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//PFOG__SL.20190701.100470.100471.grb, 00/12, PF +5, 24, 90.0/-179.0/-90.0/180.0, None, 20190701/to/20190701, 1, , OFF, 1/to/91, ML, OD, 001/TO/050, 131.128/132.128/155.128, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//PFSH__ML.20190701.100470.100471.grb, 00/12, PF +6, 24, 90.0/-179.0/-90.0/180.0, None, 20190701/to/20190701, 1, , OFF, 1, ML, OD, 001/TO/050, 152.128, , 159, 00/03/06/09, ENFO, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//PFSH__SL.20190701.100470.100471.grb, 00/12, PF diff --git a/Testing/Regression/Mars_request/7.1/OD.OPER.4V.operational_mr.csv b/Testing/Regression/Mars_request/7.1/OD.OPER.4V.operational_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..47a677d90c7287eccd78da3054744e2afbf452a9 --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/OD.OPER.4V.operational_mr.csv @@ -0,0 +1,18 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 60.0/-25.0/10.0/60.0, None, 20190709/to/20190711, 1, , 1.0/1.0, 1, SFC, OD, OFF, 142.128/143.128/146.128/180.128/181.128/176.128, , 255, 1/to/12/by/1, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG_acc_SL.20190709.100465.100466.grb, 00/12, FC +1, 24, , None, 20190710/to/20190710, 1, reduced, 128, 1, ML, OD, OFF, 133.128, , 255, 00/03, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//4VGG__SL.20190710.100465.100466.grb, 09/21, 4V +2, 24, 60.0/-25.0/10.0/60.0, None, 20190710, 1, , 1.0/1.0, 1, SFC, OD, OFF, 160.128/027.128/028.128/173.128, , 255, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20190710.100465.100466.grb, 00, AN +3, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , 1.0/1.0, 1/to/137, ML, OD, OFF, 130.128/133.128/246.128/247.128, , 255, 00/03, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//4VOG__ML.20190710.100465.100466.grb, 09/21, 4V +4, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , 1.0/1.0, 1, SFC, OD, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 255, 00/03, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//4VOG__SL.20190710.100465.100466.grb, 09/21, 4V +5, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , OFF, 1/to/137, ML, OD, OFF, 131.128/132.128/155.128, , 255, 00/03, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//4VSH__ML.20190710.100465.100466.grb, 09/21, 4V +6, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , OFF, 1, ML, OD, OFF, 152.128, , 255, 00/03, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//4VSH__SL.20190710.100465.100466.grb, 09/21, 4V +7, 24, , None, 20190710/to/20190710, 1, reduced, 128, 1, ML, OD, OFF, 133.128, , 255, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANGG__SL.20190710.100465.100466.grb, 00/06/18, AN +8, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , 1.0/1.0, 1/to/137, ML, OD, OFF, 130.128/133.128/246.128/247.128, , 255, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__ML.20190710.100465.100466.grb, 00/06/18, AN +9, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , 1.0/1.0, 1, SFC, OD, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 255, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__SL.20190710.100465.100466.grb, 00/06/18, AN +10, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , OFF, 1/to/137, ML, OD, OFF, 131.128/132.128/155.128, , 255, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__ML.20190710.100465.100466.grb, 00/06/18, AN +11, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , OFF, 1, ML, OD, OFF, 152.128, , 255, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__SL.20190710.100465.100466.grb, 00/06/18, AN +12, 24, , None, 20190710/to/20190710, 1, reduced, 128, 1, ML, OD, OFF, 133.128, , 255, 01/02/03/04/05/07/08/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCGG__SL.20190710.100465.100466.grb, 00/12, FC +13, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , 1.0/1.0, 1/to/137, ML, OD, OFF, 130.128/133.128/246.128/247.128, , 255, 01/02/03/04/05/07/08/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__ML.20190710.100465.100466.grb, 00/12, FC +14, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , 1.0/1.0, 1, SFC, OD, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 255, 01/02/03/04/05/07/08/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__SL.20190710.100465.100466.grb, 00/12, FC +15, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , OFF, 1/to/137, ML, OD, OFF, 131.128/132.128/155.128, , 255, 01/02/03/04/05/07/08/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCSH__ML.20190710.100465.100466.grb, 00/12, FC +16, 24, 60.0/-25.0/10.0/60.0, None, 20190710/to/20190710, 1, , OFF, 1, ML, OD, OFF, 152.128, , 255, 01/02/03/04/05/07/08/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCSH__SL.20190710.100465.100466.grb, 00/12, FC diff --git a/Testing/Regression/Mars_request/7.1/OD.OPER.FC.36hours_mr.csv b/Testing/Regression/Mars_request/7.1/OD.OPER.FC.36hours_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..e63a05e83c0af4ee924b2978f0505d6cc7e5a7cb --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/OD.OPER.FC.36hours_mr.csv @@ -0,0 +1,6 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 20190406/to/20190406, 1, , 1.0/1.0, 1, SFC, OD, OFF, 142.128/143.128/146.128/180.128/181.128/176.128, , 159, 3/to/36/by/3, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG_acc_SL.20190406.100460.100461.grb, 00, FC +1, 24, 90.0/-179.0/-90.0/180.0, None, 20190406, 1, , 1.0/1.0, 1, SFC, OD, OFF, 160.128/027.128/028.128/173.128, , 159, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20190406.100460.100461.grb, 00, AN +2, 24, 90.0/-179.0/-90.0/180.0, None, 20190406/to/20190406, 1, , 1.0/1.0, 1/to/137, ML, OD, OFF, 130.128/133.128/131.128/132.128/077.128/246.128/247.128, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__ML.20190406.100460.100461.grb, 00, FC +3, 24, 90.0/-179.0/-90.0/180.0, None, 20190406/to/20190406, 1, , 1.0/1.0, 1, SFC, OD, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__SL.20190406.100460.100461.grb, 00, FC +4, 24, 90.0/-179.0/-90.0/180.0, None, 20190406/to/20190406, 1, , OFF, 1, ML, OD, OFF, 152.128, , 159, 000/003/006/009/012/015/018/021/024/027/030/033/036, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCSH__SL.20190406.100460.100461.grb, 00, FC diff --git a/Testing/Regression/Mars_request/7.1/OD.OPER.FC.twiceaday_mr.csv b/Testing/Regression/Mars_request/7.1/OD.OPER.FC.twiceaday_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..a263334ad5de5590ae572cd46621437e588d44e6 --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/OD.OPER.FC.twiceaday_mr.csv @@ -0,0 +1,6 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.0/-90.0/180.0, None, 20190604/to/20190606, 1, , 1.0/1.0, 1, SFC, OD, OFF, 142.128/143.128/146.128/180.128/181.128/176.128, , 159, 3/to/12/by/3, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG_acc_SL.20190604.100455.100456.grb, 00/12, FC +1, 24, 90.0/-179.0/-90.0/180.0, None, 20190605, 1, , 1.0/1.0, 1, SFC, OD, OFF, 160.128/027.128/028.128/173.128, , 159, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20190605.100455.100456.grb, 00, AN +2, 24, 90.0/-179.0/-90.0/180.0, None, 20190605/to/20190605, 1, , 1.0/1.0, 1/to/137, ML, OD, OFF, 130.128/133.128/131.128/132.128/077.128/246.128/247.128, , 159, 00/03/06/09, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__ML.20190605.100455.100456.grb, 00/12, FC +3, 24, 90.0/-179.0/-90.0/180.0, None, 20190605/to/20190605, 1, , 1.0/1.0, 1, SFC, OD, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 159, 00/03/06/09, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__SL.20190605.100455.100456.grb, 00/12, FC +4, 24, 90.0/-179.0/-90.0/180.0, None, 20190605/to/20190605, 1, , OFF, 1, ML, OD, OFF, 152.128, , 159, 00/03/06/09, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCSH__SL.20190605.100455.100456.grb, 00/12, FC diff --git a/Testing/Regression/Mars_request/7.1/OD.OPER.global.025_mr.csv b/Testing/Regression/Mars_request/7.1/OD.OPER.global.025_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..480a1bea7ec6f531b6421fcf2bb47867d37741d7 --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/OD.OPER.global.025_mr.csv @@ -0,0 +1,9 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 90.0/-179.75/-90.0/180.0, None, 20190630/to/20190702, 1, , 0.25/0.25, 1, SFC, OD, OFF, 142.128/143.128/146.128/180.128/181.128/176.128, , 799, 1/to/12/by/1, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG_acc_SL.20190630.100450.100451.grb, 00/12, FC +1, 24, 90.0/-179.75/-90.0/180.0, None, 20190701, 1, , 0.25/0.25, 1, SFC, OD, OFF, 160.128/027.128/028.128/173.128, , 799, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20190701.100450.100451.grb, 00, AN +2, 24, 90.0/-179.75/-90.0/180.0, None, 20190701/to/20190701, 1, , 0.25/0.25, 1/to/137, ML, OD, OFF, 130.128/133.128/131.128/132.128/077.128/246.128/247.128, , 799, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__ML.20190701.100450.100451.grb, 00/12, AN +3, 24, 90.0/-179.75/-90.0/180.0, None, 20190701/to/20190701, 1, , 0.25/0.25, 1, SFC, OD, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 799, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__SL.20190701.100450.100451.grb, 00/12, AN +4, 24, 90.0/-179.75/-90.0/180.0, None, 20190701/to/20190701, 1, , OFF, 1, ML, OD, OFF, 152.128, , 799, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__SL.20190701.100450.100451.grb, 00/12, AN +5, 24, 90.0/-179.75/-90.0/180.0, None, 20190701/to/20190701, 1, , 0.25/0.25, 1/to/137, ML, OD, OFF, 130.128/133.128/131.128/132.128/077.128/246.128/247.128, , 799, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__ML.20190701.100450.100451.grb, 00/12, FC +6, 24, 90.0/-179.75/-90.0/180.0, None, 20190701/to/20190701, 1, , 0.25/0.25, 1, SFC, OD, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 799, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__SL.20190701.100450.100451.grb, 00/12, FC +7, 24, 90.0/-179.75/-90.0/180.0, None, 20190701/to/20190701, 1, , OFF, 1, ML, OD, OFF, 152.128, , 799, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCSH__SL.20190701.100450.100451.grb, 00/12, FC diff --git a/Testing/Regression/Mars_request/7.1/OD.OPER.highres.eta_mr.csv b/Testing/Regression/Mars_request/7.1/OD.OPER.highres.eta_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..da6d440ddfde624d5ad56814364ec769f4a3261b --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/OD.OPER.highres.eta_mr.csv @@ -0,0 +1,9 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 60.0/-10.0/30.0/30.0, None, 20190709/to/20190711, 1, , 0.2/0.2, 1, SFC, OD, OFF, 142.128/143.128/146.128/180.128/181.128/176.128, , 799, 1/to/12/by/1, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG_acc_SL.20190709.100445.100446.grb, 00/12, FC +1, 24, 60.0/-10.0/30.0/30.0, None, 20190710, 1, , 0.2/0.2, 1, SFC, OD, OFF, 160.128/027.128/028.128/173.128, , 799, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20190710.100445.100446.grb, 00, AN +2, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1/to/137, ML, OD, OFF, 130.128/133.128/131.128/132.128/077.128/246.128/247.128, , 799, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__ML.20190710.100445.100446.grb, 00/12, AN +3, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1, SFC, OD, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 799, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__SL.20190710.100445.100446.grb, 00/12, AN +4, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , OFF, 1, ML, OD, OFF, 152.128, , 799, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__SL.20190710.100445.100446.grb, 00/12, AN +5, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1/to/137, ML, OD, OFF, 130.128/133.128/131.128/132.128/077.128/246.128/247.128, , 799, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__ML.20190710.100445.100446.grb, 00/12, FC +6, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1, SFC, OD, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 799, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__SL.20190710.100445.100446.grb, 00/12, FC +7, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , OFF, 1, ML, OD, OFF, 152.128, , 799, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCSH__SL.20190710.100445.100446.grb, 00/12, FC diff --git a/Testing/Regression/Mars_request/7.1/OD.OPER.highres.gauss_mr.csv b/Testing/Regression/Mars_request/7.1/OD.OPER.highres.gauss_mr.csv new file mode 100644 index 0000000000000000000000000000000000000000..9dceb9113421eea0916884da4051f42e0c521ffa --- /dev/null +++ b/Testing/Regression/Mars_request/7.1/OD.OPER.highres.gauss_mr.csv @@ -0,0 +1,13 @@ +request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, levtype, marsclass, number, param, repres, resol, step, stream, target, time, type +1, 24, 60.0/-10.0/30.0/30.0, None, 20190709/to/20190711, 1, , 0.2/0.2, 1, SFC, OD, OFF, 142.128/143.128/146.128/180.128/181.128/176.128, , 1279, 1/to/12/by/1, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG_acc_SL.20190709.100439.100440.grb, 00/12, FC +1, 24, , None, 20190710/to/20190710, 1, reduced, 640, 1, ML, OD, OFF, 133.128, , 1279, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANGG__SL.20190710.100439.100440.grb, 00/12, AN +2, 24, 60.0/-10.0/30.0/30.0, None, 20190710, 1, , 0.2/0.2, 1, SFC, OD, OFF, 160.128/027.128/028.128/173.128, , 1279, 000, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//OG_OROLSM__SL.20190710.100439.100440.grb, 00, AN +3, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1/to/137, ML, OD, OFF, 130.128/133.128/246.128/247.128, , 1279, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__ML.20190710.100439.100440.grb, 00/12, AN +4, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1, SFC, OD, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 1279, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANOG__SL.20190710.100439.100440.grb, 00/12, AN +5, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , OFF, 1/to/137, ML, OD, OFF, 131.128/132.128/155.128, , 1279, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__ML.20190710.100439.100440.grb, 00/12, AN +6, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , OFF, 1, ML, OD, OFF, 152.128, , 1279, 00, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//ANSH__SL.20190710.100439.100440.grb, 00/12, AN +7, 24, , None, 20190710/to/20190710, 1, reduced, 640, 1, ML, OD, OFF, 133.128, , 1279, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCGG__SL.20190710.100439.100440.grb, 00/12, FC +8, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1/to/137, ML, OD, OFF, 130.128/133.128/246.128/247.128, , 1279, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__ML.20190710.100439.100440.grb, 00/12, FC +9, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , 0.2/0.2, 1, SFC, OD, OFF, 141.128/151.128/164.128/165.128/166.128/167.128/168.128/129.128/172.128/186.128/187.128/188.128/235.128/139.128/039.128, , 1279, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCOG__SL.20190710.100439.100440.grb, 00/12, FC +10, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , OFF, 1/to/137, ML, OD, OFF, 131.128/132.128/155.128, , 1279, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCSH__ML.20190710.100439.100440.grb, 00/12, FC +11, 24, 60.0/-10.0/30.0/30.0, None, 20190710/to/20190710, 1, , OFF, 1, ML, OD, OFF, 152.128, , 1279, 01/02/03/04/05/06/07/08/09/10/11, OPER, /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/Testing/Regression/Mars_request/./7.1//FCSH__SL.20190710.100439.100440.grb, 00/12, FC diff --git a/python/CONTROL_CERA.public b/Testing/Regression/Mars_request/Controls/CONTROL_CERA.public_mr similarity index 97% rename from python/CONTROL_CERA.public rename to Testing/Regression/Mars_request/Controls/CONTROL_CERA.public_mr index 3619a1b1f85c42482b29d9e0c87a5323c0f064f5..c9ae2aa765898e42b13e63bfc10fe67cc2ed0ce7 100644 --- a/python/CONTROL_CERA.public +++ b/Testing/Regression/Mars_request/Controls/CONTROL_CERA.public_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 19900506 DAY2 DTIME 3 TYPE AN AN AN AN AN AN AN AN diff --git a/python/CONTROL_CERA b/Testing/Regression/Mars_request/Controls/CONTROL_CERA_mr similarity index 97% rename from python/CONTROL_CERA rename to Testing/Regression/Mars_request/Controls/CONTROL_CERA_mr index ae47d2c127a7e5e779efcbbb2f6b283437ae50d6..784c71344ae985c33d0d459a57fe81e96bbd362b 100644 --- a/python/CONTROL_CERA +++ b/Testing/Regression/Mars_request/Controls/CONTROL_CERA_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 19990809 DAY2 DTIME 3 TYPE AN AN AN AN AN AN AN AN diff --git a/python/CONTROL_CF b/Testing/Regression/Mars_request/Controls/CONTROL_CF_mr similarity index 97% rename from python/CONTROL_CF rename to Testing/Regression/Mars_request/Controls/CONTROL_CF_mr index 3c225d9111db2670f138fd3fb0354a2c412baec1..8da1dc1da122595589225b6d4b7e7128a5f95888 100644 --- a/python/CONTROL_CF +++ b/Testing/Regression/Mars_request/Controls/CONTROL_CF_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20190506 DAY2 DTIME 3 MAXSTEP 36 diff --git a/python/CONTROL_CV b/Testing/Regression/Mars_request/Controls/CONTROL_CV_mr similarity index 97% rename from python/CONTROL_CV rename to Testing/Regression/Mars_request/Controls/CONTROL_CV_mr index 69261fb90974894eb9da23588346bb9229593cd1..119ea5c8718862c1dc147d81a29ac3b58096720e 100644 --- a/python/CONTROL_CV +++ b/Testing/Regression/Mars_request/Controls/CONTROL_CV_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20120506 DAY2 DTIME 3 MAXSTEP 36 diff --git a/python/CONTROL_EA5.highres b/Testing/Regression/Mars_request/Controls/CONTROL_EA5.highres_mr similarity index 83% rename from python/CONTROL_EA5.highres rename to Testing/Regression/Mars_request/Controls/CONTROL_EA5.highres_mr index bac35f65de300dae8a7297c3128429abf3e1b294..a2be9cbe9e9cbb4348463023b909c03223e43c3e 100644 --- a/python/CONTROL_EA5.highres +++ b/Testing/Regression/Mars_request/Controls/CONTROL_EA5.highres_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20181030 DAY2 DTIME 1 TYPE AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN @@ -11,13 +11,13 @@ M_CLASS EA M_STREAM OPER M_NUMBER OFF M_EXPVER 1 -GRID 500 -LEFT -179500 -LOWER -90000 -UPPER 90000 -RIGHT 180000 -M_LEVELIST 1/to/137 -M_RESOL 319 +M_GRID 250 +M_LEFT -100000 +M_LOWER 00000 +M_UPPER 60000 +M_RIGHT 60000 +M_LEVELIST 60/to/137 +M_RESOL 799 M_GAUSS 0 M_ACCURACY 24 M_OMEGA 0 diff --git a/python/CONTROL_EA5.public b/Testing/Regression/Mars_request/Controls/CONTROL_EA5.public_mr similarity index 83% rename from python/CONTROL_EA5.public rename to Testing/Regression/Mars_request/Controls/CONTROL_EA5.public_mr index 41bd961a3d8f70d8cc1277b386b896b2805ccac8..3befa8413e6fc155c7ab308681def0fbfeb19ba5 100644 --- a/python/CONTROL_EA5.public +++ b/Testing/Regression/Mars_request/Controls/CONTROL_EA5.public_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20181030 DAY2 DTIME 1 TYPE AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN @@ -12,14 +12,13 @@ DATASET ERA5 STREAM OPER NUMBER OFF EXPVER 1 -GRID 1000 -LEFT -179000 -LOWER -90000 -UPPER 90000 -RIGHT 180000 +GRID 1000 +LEFT -15000 +LOWER 30000 +UPPER 75000 +RIGHT 45000 LEVELIST 1/to/137 -CWC 1 -RESOL 159 +RESOL 213 ACCURACY 24 GAUSS 0 OMEGA 0 @@ -28,9 +27,9 @@ ETA 1 ETADIFF 0 DPDETA 1 SMOOTH 0 -FORMAT GRIB2 +FORMAT GRIB1 ADDPAR 186/187/188/235/139/39 -PREFIX EA +PREFIX EApub ECSTORAGE 0 ECTRANS 1 ECFSDIR ectmp:/${USER}/econdemand/ diff --git a/python/CONTROL_EA5 b/Testing/Regression/Mars_request/Controls/CONTROL_EA5_mr similarity index 84% rename from python/CONTROL_EA5 rename to Testing/Regression/Mars_request/Controls/CONTROL_EA5_mr index 6a2fe2501f7d99d373a0ac69903f5e9fde0f207e..cf12e4472997e0d79e7639d5e841aa2a49dfe0e1 100644 --- a/python/CONTROL_EA5 +++ b/Testing/Regression/Mars_request/Controls/CONTROL_EA5_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20181030 DAY2 DTIME 1 TYPE AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN @@ -12,23 +12,22 @@ STREAM OPER NUMBER OFF EXPVER 1 GRID 1000 -LEFT -179000 -LOWER -90000 -UPPER 90000 -RIGHT 180000 +LEFT -25000 +LOWER 10000 +UPPER 75000 +RIGHT 60000 LEVEL 137 -LEVELIST 1/to/137 -CWC 1 +LEVELIST 130/to/137 RESOL 159 GAUSS 0 -ACCURACY 24 +ACCURACY 16 OMEGA 0 OMEGADIFF 0 ETA 1 ETADIFF 0 DPDETA 1 SMOOTH 0 -FORMAT GRIB2 +FORMAT GRIB1 ADDPAR 186/187/188/235/139/39 PREFIX EA ECSTORAGE 0 diff --git a/python/CONTROL_EI.public b/Testing/Regression/Mars_request/Controls/CONTROL_EI.public_mr similarity index 97% rename from python/CONTROL_EI.public rename to Testing/Regression/Mars_request/Controls/CONTROL_EI.public_mr index f5b52f432ea7fb3f2bac392c9d54075db53af366..805428627c25b7b4e75bf2225d12786bce7afc9c 100644 --- a/python/CONTROL_EI.public +++ b/Testing/Regression/Mars_request/Controls/CONTROL_EI.public_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20180701 DAY2 DTIME 6 TYPE AN AN AN AN diff --git a/python/CONTROL_EI b/Testing/Regression/Mars_request/Controls/CONTROL_EI_mr similarity index 97% rename from python/CONTROL_EI rename to Testing/Regression/Mars_request/Controls/CONTROL_EI_mr index 533dc6e2eac8fd8072b38fda7e2b65fedbaae3b5..2093958b3a42b6e9e1e249c6b949b281ecb1438f 100644 --- a/python/CONTROL_EI +++ b/Testing/Regression/Mars_request/Controls/CONTROL_EI_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20160707 DAY2 DTIME 3 TYPE AN FC FC FC AN FC FC FC diff --git a/python/CONTROL_ZAMG_SYNTH_ELDA b/Testing/Regression/Mars_request/Controls/CONTROL_OD.ELDA.FC.eta.ens.double_mr similarity index 97% rename from python/CONTROL_ZAMG_SYNTH_ELDA rename to Testing/Regression/Mars_request/Controls/CONTROL_OD.ELDA.FC.eta.ens.double_mr index 119d92a6f278fb0bafdc87a4b18713a79b5f6fa6..05e0080edd1ee26770e5681937bc373dd956bb42 100644 --- a/python/CONTROL_ZAMG_SYNTH_ELDA +++ b/Testing/Regression/Mars_request/Controls/CONTROL_OD.ELDA.FC.eta.ens.double_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20190601 DAY2 DTIME 3 M_TYPE AN FC AN FC AN FC AN FC diff --git a/python/CONTROL_ZAMG_SYNTH_ENFOCF b/Testing/Regression/Mars_request/Controls/CONTROL_OD.ENFO.CF_mr similarity index 97% rename from python/CONTROL_ZAMG_SYNTH_ENFOCF rename to Testing/Regression/Mars_request/Controls/CONTROL_OD.ENFO.CF_mr index 236cce51c3f22bda12a96c32edf19855e3f7cee2..beed42b7999704307c91647794c76447d7e7e66d 100644 --- a/python/CONTROL_ZAMG_SYNTH_ENFOCF +++ b/Testing/Regression/Mars_request/Controls/CONTROL_OD.ENFO.CF_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20190601 DAY2 DTIME 3 M_TYPE CF CF CF CF CF CF CF CF diff --git a/python/CONTROL_ZAMG_SYNTH_ENFO b/Testing/Regression/Mars_request/Controls/CONTROL_OD.ENFO.PF_mr similarity index 97% rename from python/CONTROL_ZAMG_SYNTH_ENFO rename to Testing/Regression/Mars_request/Controls/CONTROL_OD.ENFO.PF_mr index 005c9e22f4d81ed76f608c8c2c28cff6c00e30a7..de44fdc9f1004282a9385a8cf6578c5c764dc0fe 100644 --- a/python/CONTROL_ZAMG_SYNTH_ENFO +++ b/Testing/Regression/Mars_request/Controls/CONTROL_OD.ENFO.PF_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20190701 DAY2 DTIME 3 M_TYPE PF PF PF PF PF PF PF PF diff --git a/python/CONTROL_OPS.4V b/Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.4V.operational_mr similarity index 97% rename from python/CONTROL_OPS.4V rename to Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.4V.operational_mr index f1bc1fff1452abf2fa2eb9974dc43d7e66573b32..5729fee0b3cc11b6176da5edb83a45e646fe6075 100644 --- a/python/CONTROL_OPS.4V +++ b/Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.4V.operational_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20190710 DAY2 DTIME 1 M_TYPE AN FC FC FC FC FC AN FC FC 4V FC FC 4V FC FC FC FC FC AN FC FC 4V FC FC 4V @@ -29,3 +29,4 @@ ECFSDIR ectmp:/${USER}/ecops MAILOPS ${USER} MAILFAIL ${USER} CWC 1 +EOF diff --git a/python/CONTROL_FC.pure b/Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.FC.36hours_mr similarity index 97% rename from python/CONTROL_FC.pure rename to Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.FC.36hours_mr index 8619015aab41f66c3d9af9b6073a34b2bc0ebeb0..914dd10fd5b7b0a775f96367b5197f6510e02c73 100644 --- a/python/CONTROL_FC.pure +++ b/Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.FC.36hours_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20190406 DAY2 DTIME 3 M_TYPE FC diff --git a/python/CONTROL_FC.twiceaday b/Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.FC.twiceaday_mr similarity index 98% rename from python/CONTROL_FC.twiceaday rename to Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.FC.twiceaday_mr index 2b2e8d7621fee2cef4968b316dde50a77b2c2ecd..a3b9cf3d3c3b028f7eaa21a40ba5d84ab743b909 100644 --- a/python/CONTROL_FC.twiceaday +++ b/Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.FC.twiceaday_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20190605 DAY2 DTIME 3 M_TYPE FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC diff --git a/python/CONTROL_OD.glob.025 b/Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.global.025_mr similarity index 97% rename from python/CONTROL_OD.glob.025 rename to Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.global.025_mr index 2def9db5a5e965cc918aa34ded3f8652cfa38a6a..e3ddb0fcc6c8bf65c8f02a706fdb42de099cf48a 100644 --- a/python/CONTROL_OD.glob.025 +++ b/Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.global.025_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20190701 DAY2 DTIME 1 M_TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC diff --git a/python/CONTROL_OD.highres.eta b/Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.highres.eta_mr similarity index 97% rename from python/CONTROL_OD.highres.eta rename to Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.highres.eta_mr index 910e76675a2a22abd6ec7125b3c37bf6b481726d..99e150efe642bceab90d3eb0da6b4f9d6179a4c2 100644 --- a/python/CONTROL_OD.highres.eta +++ b/Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.highres.eta_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20190710 DAY2 DTIME 1 M_TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC diff --git a/python/CONTROL_OD.highres.gauss b/Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.highres.gauss_mr similarity index 97% rename from python/CONTROL_OD.highres.gauss rename to Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.highres.gauss_mr index 9e0b388dcf594ed814efcaf9d3583e0e416fd63b..27610e4e1a78f7d43a22d3e8bdfe2f18a66aa3bb 100644 --- a/python/CONTROL_OD.highres.gauss +++ b/Testing/Regression/Mars_request/Controls/CONTROL_OD.OPER.highres.gauss_mr @@ -1,4 +1,4 @@ -DAY1 +DAY1 20190710 DAY2 DTIME 1 M_TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-05-47 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-05-47 new file mode 100644 index 0000000000000000000000000000000000000000..059e7debdbaef1e881137794369579a2a5ffe3e2 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-05-47 @@ -0,0 +1,31 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_CERA.public_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_EI_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_CV_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.highres.gauss_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-37-01 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-37-01 new file mode 100644 index 0000000000000000000000000000000000000000..5a42150eadd04296f6b39e9ce25598560225903f --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-37-01 @@ -0,0 +1 @@ +Compare mars requests between version 7.0.4 and version 7.1 : diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-40-56 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-40-56 new file mode 100644 index 0000000000000000000000000000000000000000..5a42150eadd04296f6b39e9ce25598560225903f --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-40-56 @@ -0,0 +1 @@ +Compare mars requests between version 7.0.4 and version 7.1 : diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-42-31 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-42-31 new file mode 100644 index 0000000000000000000000000000000000000000..5a42150eadd04296f6b39e9ce25598560225903f --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-42-31 @@ -0,0 +1 @@ +Compare mars requests between version 7.0.4 and version 7.1 : diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-42-58 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-42-58 new file mode 100644 index 0000000000000000000000000000000000000000..5a42150eadd04296f6b39e9ce25598560225903f --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-42-58 @@ -0,0 +1 @@ +Compare mars requests between version 7.0.4 and version 7.1 : diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-43-13 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-43-13 new file mode 100644 index 0000000000000000000000000000000000000000..1aa2e5aeefe07d9d1e3e7582d86860b796ccf4c2 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-43-13 @@ -0,0 +1,7 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_CERA.public_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_EI_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-43-50 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-43-50 new file mode 100644 index 0000000000000000000000000000000000000000..059e7debdbaef1e881137794369579a2a5ffe3e2 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-43-50 @@ -0,0 +1,31 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_CERA.public_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_EI_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_CV_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.highres.gauss_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-47-22 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-47-22 new file mode 100644 index 0000000000000000000000000000000000000000..5a42150eadd04296f6b39e9ce25598560225903f --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-47-22 @@ -0,0 +1 @@ +Compare mars requests between version 7.0.4 and version 7.1 : diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-47-44 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-47-44 new file mode 100644 index 0000000000000000000000000000000000000000..5a42150eadd04296f6b39e9ce25598560225903f --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-47-44 @@ -0,0 +1 @@ +Compare mars requests between version 7.0.4 and version 7.1 : diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-47-59 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-47-59 new file mode 100644 index 0000000000000000000000000000000000000000..5a42150eadd04296f6b39e9ce25598560225903f --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-47-59 @@ -0,0 +1 @@ +Compare mars requests between version 7.0.4 and version 7.1 : diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-49-07 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-49-07 new file mode 100644 index 0000000000000000000000000000000000000000..5a42150eadd04296f6b39e9ce25598560225903f --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-49-07 @@ -0,0 +1 @@ +Compare mars requests between version 7.0.4 and version 7.1 : diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-50-37 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-50-37 new file mode 100644 index 0000000000000000000000000000000000000000..5a42150eadd04296f6b39e9ce25598560225903f --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-50-37 @@ -0,0 +1 @@ +Compare mars requests between version 7.0.4 and version 7.1 : diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-51-09 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-51-09 new file mode 100644 index 0000000000000000000000000000000000000000..5a42150eadd04296f6b39e9ce25598560225903f --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-51-09 @@ -0,0 +1 @@ +Compare mars requests between version 7.0.4 and version 7.1 : diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-51-24 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-51-24 new file mode 100644 index 0000000000000000000000000000000000000000..059e7debdbaef1e881137794369579a2a5ffe3e2 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-51-24 @@ -0,0 +1,31 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_CERA.public_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_EI_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_CV_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.highres.gauss_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-51-35 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-51-35 new file mode 100644 index 0000000000000000000000000000000000000000..059e7debdbaef1e881137794369579a2a5ffe3e2 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-51-35 @@ -0,0 +1,31 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_CERA.public_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_EI_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_CV_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.highres.gauss_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-52-51 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-52-51 new file mode 100644 index 0000000000000000000000000000000000000000..059e7debdbaef1e881137794369579a2a5ffe3e2 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-52-51 @@ -0,0 +1,31 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_CERA.public_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_EI_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_CV_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.highres.gauss_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-53-25 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-53-25 new file mode 100644 index 0000000000000000000000000000000000000000..059e7debdbaef1e881137794369579a2a5ffe3e2 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-53-25 @@ -0,0 +1,31 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_CERA.public_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_EI_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_CV_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.highres.gauss_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-55-07 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-55-07 new file mode 100644 index 0000000000000000000000000000000000000000..059e7debdbaef1e881137794369579a2a5ffe3e2 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-55-07 @@ -0,0 +1,31 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_CERA.public_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_EI_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_CV_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.highres.gauss_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-55-54 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-55-54 new file mode 100644 index 0000000000000000000000000000000000000000..059e7debdbaef1e881137794369579a2a5ffe3e2 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-55-54 @@ -0,0 +1,31 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_CERA.public_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_EI_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_CV_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.highres.gauss_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-56-03 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-56-03 new file mode 100644 index 0000000000000000000000000000000000000000..059e7debdbaef1e881137794369579a2a5ffe3e2 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-56-03 @@ -0,0 +1,31 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_CERA.public_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_EI_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_CV_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.highres.gauss_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-07-17_11-56-52 b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-56-52 new file mode 100644 index 0000000000000000000000000000000000000000..8e9dbbacc65c9ce9ec24bc6d5db2f678b41f0f50 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-07-17_11-56-52 @@ -0,0 +1,25 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_CERA.public_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_EI_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... OK! +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_CF_mr ... OK! +... CONTROL_CV_mr ... OK! +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.highres.gauss_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-10-02_23-42-22 b/Testing/Regression/Mars_request/Log/log_2019-10-02_23-42-22 new file mode 100644 index 0000000000000000000000000000000000000000..5a42150eadd04296f6b39e9ce25598560225903f --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-10-02_23-42-22 @@ -0,0 +1 @@ +Compare mars requests between version 7.0.4 and version 7.1 : diff --git a/Testing/Regression/Mars_request/Log/log_2019-10-02_23-42-34 b/Testing/Regression/Mars_request/Log/log_2019-10-02_23-42-34 new file mode 100644 index 0000000000000000000000000000000000000000..5a42150eadd04296f6b39e9ce25598560225903f --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-10-02_23-42-34 @@ -0,0 +1 @@ +Compare mars requests between version 7.0.4 and version 7.1 : diff --git a/Testing/Regression/Mars_request/Log/log_2019-10-02_23-42-53 b/Testing/Regression/Mars_request/Log/log_2019-10-02_23-42-53 new file mode 100644 index 0000000000000000000000000000000000000000..f1f5fed3813671f9d2fafb6c02ca6d2b5c357522 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-10-02_23-42-53 @@ -0,0 +1,25 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_OD.OPER.highres.gauss_mr ... OK! +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_EI_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_CV_mr ... OK! +... CONTROL_CF_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_CERA.public_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-10-04_14-42-30 b/Testing/Regression/Mars_request/Log/log_2019-10-04_14-42-30 new file mode 100644 index 0000000000000000000000000000000000000000..f1f5fed3813671f9d2fafb6c02ca6d2b5c357522 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-10-04_14-42-30 @@ -0,0 +1,25 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_OD.OPER.highres.gauss_mr ... OK! +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_EI_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_CV_mr ... OK! +... CONTROL_CF_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_CERA.public_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-10-04_15-06-58 b/Testing/Regression/Mars_request/Log/log_2019-10-04_15-06-58 new file mode 100644 index 0000000000000000000000000000000000000000..5a42150eadd04296f6b39e9ce25598560225903f --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-10-04_15-06-58 @@ -0,0 +1 @@ +Compare mars requests between version 7.0.4 and version 7.1 : diff --git a/Testing/Regression/Mars_request/Log/log_2019-10-04_15-09-27 b/Testing/Regression/Mars_request/Log/log_2019-10-04_15-09-27 new file mode 100644 index 0000000000000000000000000000000000000000..f1f5fed3813671f9d2fafb6c02ca6d2b5c357522 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-10-04_15-09-27 @@ -0,0 +1,25 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_OD.OPER.highres.gauss_mr ... OK! +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_EI_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_CV_mr ... OK! +... CONTROL_CF_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_CERA.public_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-10-04_16-36-49 b/Testing/Regression/Mars_request/Log/log_2019-10-04_16-36-49 new file mode 100644 index 0000000000000000000000000000000000000000..f1f5fed3813671f9d2fafb6c02ca6d2b5c357522 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-10-04_16-36-49 @@ -0,0 +1,25 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_OD.OPER.highres.gauss_mr ... OK! +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_EI_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_CV_mr ... OK! +... CONTROL_CF_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_CERA.public_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-10-11_16-33-36 b/Testing/Regression/Mars_request/Log/log_2019-10-11_16-33-36 new file mode 100644 index 0000000000000000000000000000000000000000..f1f5fed3813671f9d2fafb6c02ca6d2b5c357522 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-10-11_16-33-36 @@ -0,0 +1,25 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_OD.OPER.highres.gauss_mr ... OK! +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_EI_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_CV_mr ... OK! +... CONTROL_CF_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_CERA.public_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-11-05_19-46-23 b/Testing/Regression/Mars_request/Log/log_2019-11-05_19-46-23 new file mode 100644 index 0000000000000000000000000000000000000000..f1f5fed3813671f9d2fafb6c02ca6d2b5c357522 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-11-05_19-46-23 @@ -0,0 +1,25 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_OD.OPER.highres.gauss_mr ... OK! +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_EI_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_CV_mr ... OK! +... CONTROL_CF_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_CERA.public_mr ... OK! diff --git a/Testing/Regression/Mars_request/Log/log_2019-11-26_14-45-26 b/Testing/Regression/Mars_request/Log/log_2019-11-26_14-45-26 new file mode 100644 index 0000000000000000000000000000000000000000..f1f5fed3813671f9d2fafb6c02ca6d2b5c357522 --- /dev/null +++ b/Testing/Regression/Mars_request/Log/log_2019-11-26_14-45-26 @@ -0,0 +1,25 @@ +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_OD.OPER.highres.gauss_mr ... OK! +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_EI_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_CV_mr ... OK! +... CONTROL_CF_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_CERA.public_mr ... OK! diff --git a/Testing/Regression/Mars_request/README.md b/Testing/Regression/Mars_request/README.md new file mode 100644 index 0000000000000000000000000000000000000000..807f66116003588e2af94cefa09c3a0c6a8c604e --- /dev/null +++ b/Testing/Regression/Mars_request/README.md @@ -0,0 +1,60 @@ +# Testcase - Mars request comparison + +This testcase is composed of a number of comparisons of mars requests from two different flex_extract versions. + +## Description + +A single test compares the content of mars requests from two flex_extract versions. It checks for equal number of columns in the requests, if both versions have the same number of requests and the same request content. + +The CONTROL files to be tested are stored in the CONTROL - directory. The corresponding mars request files of the previous version are stored in the directory 7.0.4. These are the references for version 7.1. During the execution of this test, the mars request files for version 7.1 are created and stored ( overwritten ) in directory 7.1. Results of the tests are stored in log files in the Log dir. Some extra output is printed on standard output. + +A log message could look like: + +Compare mars requests between version 7.0.4 and version 7.1 : +... CONTROL_OD.OPER.highres.gauss_mr ... OK! +... CONTROL_OD.OPER.highres.eta_mr ... OK! +... CONTROL_OD.OPER.global.025_mr ... OK! +... CONTROL_OD.OPER.FC.twiceaday_mr ... OK! +... CONTROL_OD.OPER.FC.36hours_mr ... OK! +... CONTROL_OD.OPER.4V.operational_mr ... OK! +... CONTROL_OD.ENFO.PF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ENFO.CF_mr ... FAILED! +... Unconsistency happend to be in column: step + +... CONTROL_OD.ELDA.FC.eta.ens.double_mr ... FAILED! +... Unconsistency happend to be in column: date + +... CONTROL_EI_mr ... OK! +... CONTROL_EI.public_mr ... OK! +... CONTROL_EA5_mr ... OK! +... CONTROL_EA5.public_mr ... OK! +... CONTROL_EA5.highres_mr ... OK! +... CONTROL_CV_mr ... OK! +... CONTROL_CF_mr ... OK! +... CONTROL_CERA_mr ... OK! +... CONTROL_CERA.public_mr ... OK! + + + + +## Usage + +python test_cmp_mars_requests.py <previous-version> <version-to-be-tested> + +e.g. python test_cmp_mars_requests.py 7.0.4 7.1 + +## Author + Anne Philipp + + +## License + (C) Copyright 2014-2019. + + SPDX-License-Identifier: CC-BY-4.0 + + This work is licensed under the Creative Commons Attribution 4.0 + International License. To view a copy of this license, visit + http://creativecommons.org/licenses/by/4.0/ or send a letter to + Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. diff --git a/Testing/Regression/Mars_request/create_old_mars_requests.txt b/Testing/Regression/Mars_request/create_old_mars_requests.txt new file mode 100644 index 0000000000000000000000000000000000000000..84e000ee2b16ca9d13abeae63ad25e233c5e7a54 --- /dev/null +++ b/Testing/Regression/Mars_request/create_old_mars_requests.txt @@ -0,0 +1,85 @@ +#!/bin/bash +# +# @Author: Anne Philipp +# +# @Date: October, 10 2019 +# +# @Description: Creates the mars request files with the older (7.0.4) +# version of flex_extract and places them in the test directory +# of mars request comparsion tests. +# +# @License: +# (C) Copyright 2014-2019. +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +# +# @ChangeHistory: +# +# @Usage: +# start script within the old flex_extract python directory +# ./create_old_mars_request.txt <path to mars request test directory of old version> +# e.g. ./create_old_mars_request.txt <local_path>/flex_extract_v7.1/Testing/Regression/Mars_request/7.0.4/ +# + + +./submit.py --controlfile=CONTROL_CERA_mr --request=1 +mv ../work/mars_requests.csv ../work/CERA_mr.csv + +./submit.py --controlfile=CONTROL_CERA.public_mr --public=1 --request=1 +mv ../work/mars_requests.csv ../work/CERA.public_mr.csv + +./submit.py --controlfile=CONTROL_CF_mr --request=1 +mv ../work/mars_requests.csv ../work/CF_mr.csv + +./submit.py --controlfile=CONTROL_CV_mr --request=1 +mv ../work/mars_requests.csv ../work/CV_mr.csv + +./submit.py --controlfile=CONTROL_EA5.highres_mr --request=1 +mv ../work/mars_requests.csv ../work/EA5.highres_mr.csv + +./submit.py --controlfile=CONTROL_EA5_mr --request=1 +mv ../work/mars_requests.csv ../work/EA5_mr.csv + +./submit.py --controlfile=CONTROL_EA5.public_mr --public=1 --request=1 +mv ../work/mars_requests.csv ../work/EA5.public_mr.csv + +./submit.py --controlfile=CONTROL_EI_mr --request=1 +mv ../work/mars_requests.csv ../work/EI_mr.csv + +./submit.py --controlfile=CONTROL_EI.public_mr --request=1 --public=1 +mv ../work/mars_requests.csv ../work/EI.public_mr.csv + +./submit.py --controlfile=CONTROL_OD.ELDA.FC.eta.ens.double_mr --request=1 +mv ../work/mars_requests.csv ../work/OD.ELDA.FC.eta.ens.double_mr.csv + +./submit.py --controlfile=CONTROL_OD.ENFO.CF_mr --request=1 +mv ../work/mars_requests.csv ../work/OD.ENFO.CF_mr.csv + +./submit.py --controlfile=CONTROL_OD.ENFO.PF_mr --request=1 +mv ../work/mars_requests.csv ../work/OD.ENFO.PF_mr.csv + +./submit.py --controlfile=CONTROL_OD.OPER.4V.operational_mr --request=1 +mv ../work/mars_requests.csv ../work/OD.OPER.4V.operational_mr.csv + +./submit.py --controlfile=CONTROL_OD.OPER.FC.36hours_mr --request=1 +mv ../work/mars_requests.csv ../work/OD.OPER.FC.36hours_mr.csv + +./submit.py --controlfile=CONTROL_OD.OPER.FC.twiceaday_mr --request=1 +mv ../work/mars_requests.csv ../work/OD.OPER.FC.twiceaday_mr.csv + +./submit.py --controlfile=CONTROL_OD.OPER.global.025_mr --request=1 +mv ../work/mars_requests.csv ../work/OD.OPER.global.025_mr.csv + +./submit.py --controlfile=CONTROL_OD.OPER.highres.eta_mr --request=1 +mv ../work/mars_requests.csv ../work/OD.OPER.highres.eta_mr.csv + +./submit.py --controlfile=CONTROL_OD.OPER.highres.gauss_mr --request=1 +mv ../work/mars_requests.csv ../work/OD.OPER.highres.gauss_mr.csv + + +mv ./work/*_mr.csv ${1} diff --git a/Testing/Regression/Mars_request/run_local.sh b/Testing/Regression/Mars_request/run_local.sh new file mode 100755 index 0000000000000000000000000000000000000000..783e2a1682acc33b090b764a99dc184f9c6eb3b2 --- /dev/null +++ b/Testing/Regression/Mars_request/run_local.sh @@ -0,0 +1,115 @@ +#!/bin/bash +# +# @Author: Anne Philipp +# +# @Date: October, 4 2018 +# +# @Description: Sets all command line parameter for the "submit.py" script +# from flex_extract and calls it. +# +# @ChangeHistory: November, 23 2018 +# In this version the parameters are fixed for the extraction of +# MARS request files from the current flex_extract version to run +# a couple of comparison checks. +# The script has to be called with the name of the control file and +# the path to the control files. +# +# Example: +# ./run_local.sh 7.1 Controls +# + + +# ----------------------------------------------------------------- +# AVAILABLE COMMANDLINE ARGUMENTS TO SET +# +# THE USER HAS TO SPECIFY THESE PARAMETER +# + +QUEUE='' +START_DATE=None +END_DATE=None +DATE_CHUNK=None +JOB_CHUNK=None +BASETIME=None +STEP=None +LEVELIST=None +AREA=None +INPUTDIR='./'${1}'/' +OUTPUTDIR=None +PP_ID=None +JOB_TEMPLATE='' +CONTROLFILE=$2 +DEBUG=0 +REQUEST=1 +PUBLIC=0 + +# ----------------------------------------------------------------- +# +# AFTER THIS LINE THE USER DOES NOT HAVE TO CHANGE ANYTHING !!! +# +# ----------------------------------------------------------------- + +# PATH TO SUBMISSION SCRIPT +pyscript=../../../Source/Python/submit.py + +# INITIALIZE EMPTY PARAMETERLIST +parameterlist="" + +# CHECK FOR MORE PARAMETER +if [ -n "$START_DATE" ]; then + parameterlist+=" --start_date=$START_DATE" +fi +if [ -n "$END_DATE" ]; then + parameterlist+=" --end_date=$END_DATE" +fi +if [ -n "$DATE_CHUNK" ]; then + parameterlist+=" --date_chunk=$DATE_CHUNK" +fi +if [ -n "$JOB_CHUNK" ]; then + parameterlist+=" --job_chunk=$JOB_CHUNK" +fi +if [ -n "$BASETIME" ]; then + parameterlist+=" --basetime=$BASETIME" +fi +if [ -n "$STEP" ]; then + parameterlist+=" --step=$STEP" +fi +if [ -n "$LEVELIST" ]; then + parameterlist+=" --levelist=$LEVELIST" +fi +if [ -n "$AREA" ]; then + parameterlist+=" --area=$AREA" +fi +if [ -n "$INPUTDIR" ]; then + parameterlist+=" --inputdir=$INPUTDIR" +fi +if [ -n "$OUTPUTDIR" ]; then + parameterlist+=" --outputdir=$OUTPUTDIR" +fi +if [ -n "$PP_ID" ]; then + parameterlist+=" --ppid=$PP_ID" +fi +if [ -n "$JOB_TEMPLATE" ]; then + parameterlist+=" --job_template=$JOB_TEMPLATE" +fi +if [ -n "$QUEUE" ]; then + parameterlist+=" --queue=$QUEUE" +fi +if [ -n "$CONTROLFILE" ]; then + parameterlist+=" --controlfile=$CONTROLFILE" +fi +if [ -n "$DEBUG" ]; then + parameterlist+=" --debug=$DEBUG" +fi +if [ -n "$REQUEST" ]; then + parameterlist+=" --request=$REQUEST" +fi +if [ -n "$PUBLIC" ]; then + parameterlist+=" --public=$PUBLIC" +fi + +# ----------------------------------------------------------------- +# CALL SCRIPT WITH DETERMINED COMMANDLINE ARGUMENTS + +$pyscript $parameterlist + diff --git a/Testing/Regression/Mars_request/test_cmp_mars_requests.py b/Testing/Regression/Mars_request/test_cmp_mars_requests.py new file mode 100755 index 0000000000000000000000000000000000000000..13039c987b10c7f7b476eefe9956d27cffebdc75 --- /dev/null +++ b/Testing/Regression/Mars_request/test_cmp_mars_requests.py @@ -0,0 +1,331 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Comparison of the created MARS requests of two flex_extract versions. + +There will be comparisons for the given standard control files in the +"Controls" - directory. The result of the comparison is stored in the +"Log" - directory with an individual timestamp in the format %Y-%m-%d_%H-%M-%S. +(E.g. log_2018-11-23_12-42-29) +The MARS request files are named such that it contains the name of the +corresponding control files "<control-identifier>.csv" (e.g. EA5_mr.csv). +They are stored in the corresponding version directory and have the same +name in both versions. + +The script should be called like: + + python test_cmp_mars_requests.py <old_version_number> <new_version_number> + +Note +---- +The MARS request files from the older version have to be in place already. +The request files of the new/current version will be generated automatically +with the "run_local.sh" script. +It is necessary to have a directory named after the version number of +flex_extract. For example: "7.0.3" and "7.1". + +Licence: +-------- + (C) Copyright 2014-2019. + + SPDX-License-Identifier: CC-BY-4.0 + + This work is licensed under the Creative Commons Attribution 4.0 + International License. To view a copy of this license, visit + http://creativecommons.org/licenses/by/4.0/ or send a letter to + Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. + +Example +------- + python test_cmp_mars_requests.py 7.0.4 7.1 +""" + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +import os +import sys +import pandas as pd +import subprocess +import shutil +from datetime import datetime + +sys.path.append('../../../Source/Python') +import _config +from Mods.tools import init128 + +# ------------------------------------------------------------------------------ +# FUNCTION +# ------------------------------------------------------------------------------ +def test_mr_column_equality(mr_old, mr_new): + '''Check if old and new version of MARS requests have the same + amount of columns. + + If the number is not equal and/or the column names are not equal + an error message is stored in global variable "err_msg". + + Parameters + ---------- + mr_old : :obj:`pandas DataFrame` + Contains the mars requests from the old version of + flex_extract. + + mr_new : :obj:`pandas DataFrame` + Contains the mars requests from the new version of + flex_extract. + + Return + ------ + bool + True if successful, False otherwise. + ''' + global err_msg + if (len(mr_old.columns.values) == len(mr_new.columns.values) and + sorted(mr_old.columns.values) == sorted(mr_new.columns.values)): + return True + else: + err_msg = 'Unequal number and/or column names!\n' + return False + + +def test_mr_number_equality(mr_old, mr_new): + '''Check if old and new version have the same number of requests. + + If the number is not equal an error message is stored in + global variable "err_msg". + + Parameters + ---------- + mr_old : :obj:`pandas DataFrame` + Contains the mars requests from the old version of + flex_extract. + + mr_new : :obj:`pandas DataFrame` + Contains the mars requests from the new version of + flex_extract. + + Return + ------ + bool + True if successful, False otherwise. + ''' + global err_msg + if len(mr_new.index) == len(mr_old.index): + return True + else: + err_msg = 'Unequal number of mars requests!\n' + return False + +def test_mr_content_equality(mr_old, mr_new): + '''Check if old and new version have the same request contents. + + If the content in a column is not equal an error message is stored in + global variable "err_msg", recording the column. + + Parameters + ---------- + mr_old : :obj:`pandas DataFrame` + Contains the mars requests from the old version of + flex_extract. + + mr_new : :obj:`pandas DataFrame` + Contains the mars requests from the new version of + flex_extract. + + Return + ------ + bool + True if successful, False otherwise. + ''' + global err_msg + lresult = None + columns = list(mr_new.columns.values) + del columns[columns.index('target')] + mr_new = trim_all_columns(mr_new) + mr_old = trim_all_columns(mr_old) + for col in columns: + if mr_new[col].equals(mr_old[col]): + lresult = True + else: + err_msg += 'Inconsistency in column: ' + col + '\n' + print("THERE SEEMS TO BE AN ERROR:") + print("CONTENT OF NEW VERSION:") + print(mr_new[col]) + print("CONTENT OF OLD VERSION:") + print(mr_old[col]) + return False + return lresult + + +def trim_all_columns(df): + """ + Trim whitespace from ends of each value across all series in dataframe + """ + trim_strings = lambda x: x.strip() if isinstance(x, str) else x + return df.applymap(trim_strings) + +def convert_param_numbers(mr_old): + """ + Convert the numbers parameter into integers with 3 digits. + """ + + if str(mr_old).strip() != "OFF" and mr_old != None and '/' in str(mr_old) : + numbers = mr_old.split('/') + number = str(int(numbers[0])).zfill(3)+'/TO/'+str(int(numbers[2])).zfill(3) + + return number + + return mr_old + +def convert_param_step(mr_old): + """ + For pure forecast with steps greater than 23 hours, the older versions + writes out a list of steps instead with the syntax 'to' and 'by'. + e.g. 000/003/006/009/012/015/018/021/024/027/030/033/036 + + Convert this to 0/to/36/by/3 + """ + + #if 'to' in str(mr_old) and 'by' in str(mr_old): + # steps = mr_old.split('/') + # step = [] + # for i in range(int(steps[0]),int(steps[2]),int(steps[4])): + # step.append(str(int(i)).zfill(2)) + # return '/'.join(step) + + if not mr_old.isdigit() and 'to' not in mr_old.lower(): + if int(mr_old.split('/')[-1]) > 23: + + steps = mr_old.split('/') + dtime = int(steps[1]) - int(steps[0]) + + nsteps = str(int(steps[1]))+'/to/'+str(int(steps[-1]))+'/by/'+str(int(dtime)) + return nsteps + + return mr_old + +def to_param_id(pars, table): + '''Transform parameter names to parameter ids with ECMWF grib table 128. + + Parameters + ---------- + pars : str + 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. + + table : dict + Contains the ECMWF grib table 128 information. + The key is the parameter number and the value is the + short name of the parameter. + + Return + ------ + ipar : list of int + List of addpar parameters from CONTROL file transformed to + parameter ids in the format of integer. + ''' + if not pars: + return [] + if not isinstance(pars, str): + pars=str(pars) + + cpar = pars.upper().split('/') + spar = [] + for par in cpar: + par = par.strip() + for k, v in table.items(): + if par.isdigit(): + par = str(int(par)).zfill(3) + if par == k or par == v: + spar.append(k + '.128') + break + else: + print('\n\Warning: par ' + par + ' not found in table 128\n\n”') + + return '/'.join(str(l) for l in spar) + + + +if __name__ == '__main__': + + # basic values for paths and versions + control_path = 'Controls' + log_path = 'Log' + old_dir = sys.argv[1] # e.g. '7.0.4' + new_dir = sys.argv[2] # e.g. '7.1' + mr_filename = 'mars_requests.csv' + + # have to be set to "True" in the beginnning + # so it only fails if a test fails + lfinal = True + + # prepare log file for this test run + currenttime = datetime.now() + time_str = currenttime.strftime('%Y-%m-%d_%H-%M-%S') + logfile = os.path.join(log_path, 'log_' + time_str) + with open(logfile, 'a') as f: + f.write('Compare mars requests between version ' + old_dir + + ' and version ' + new_dir + ' : \n') + + # list all controlfiles + controls = os.listdir(control_path) + + # loop over controlfiles + for c in controls: + # empty error message for every controlfile + err_msg = '' + + # start flex_extract with controlfiles to get mars_request files + shutil.copy(os.path.join(control_path,c), _config.PATH_CONTROLFILES) + subprocess.check_output(['run_local.sh', new_dir, c]) + os.remove(os.path.join(_config.PATH_CONTROLFILES,c)) + + # cut-of "CONTROL_" string and mv mars_reqeust file + # to a name including control specific name + mr_name = c.split('CONTROL_')[1] + '.csv' + shutil.move(os.path.join(new_dir,mr_filename), os.path.join(new_dir,mr_name)) + + # read both mr files (old & new) + mr_old = pd.read_csv(os.path.join(old_dir, mr_name)) + mr_new = pd.read_csv(os.path.join(new_dir, mr_name)) + + mr_old.columns = mr_old.columns.str.strip() + mr_new.columns = mr_new.columns.str.strip() + + # convert names in old to ids + table128 = init128(_config.PATH_GRIBTABLE) + #print mr_old['param'] + + # some format corrections are necessary to compare older versions with 7.1 + mr_old['param'] = mr_old['param'].apply(to_param_id, args=[table128]) + mr_old['number'] = mr_old['number'].apply(convert_param_numbers) + if '142' in mr_old.loc[0,'param']: # if flux request + mr_old.loc[0,'step'] = convert_param_step(mr_old.loc[0,'step']) + + print('Results: ', c) + + # do tests on mr files + lcoleq = test_mr_column_equality(mr_old, mr_new) + lnoeq = test_mr_number_equality(mr_old, mr_new) + lcoeq = test_mr_content_equality(mr_old, mr_new) + + # check results for mr file + lfinal = lfinal and lcoleq and lnoeq and lcoeq + + # write out result to logging file + with open(logfile, 'a') as f: + if lcoleq and lnoeq and lcoeq: + f.write('... ' + c + ' ... OK!' + '\n') + else: + f.write('... ' + c + ' ... FAILED!' + '\n') + if err_msg: + f.write('... ' + err_msg + '\n') + + exit + + # exit with success or error status + if lfinal: + sys.exit(0) # 'SUCCESS' + else: + sys.exit(1) # 'FAIL' diff --git a/Testing/Regression/Unit/Controls/CONTROL.req.test b/Testing/Regression/Unit/Controls/CONTROL.req.test new file mode 100644 index 0000000000000000000000000000000000000000..8bde8b88db9497b5292c19723c552c9484b5b7ff --- /dev/null +++ b/Testing/Regression/Unit/Controls/CONTROL.req.test @@ -0,0 +1,37 @@ +DAY1 20100809 +DAY2 +DTIME 3 +TYPE AN FC FC FC FC FC AN FC FC FC FC FC AN FC FC FC FC FC AN FC FC FC FC FC +TIME 00 00 00 00 00 00 06 00 00 00 00 00 12 12 12 12 12 12 18 12 12 12 12 12 +STEP 00 01 02 03 04 05 00 07 08 09 10 11 00 01 02 03 04 05 00 07 08 09 10 11 +CLASS EI +STREAM OPER +NUMBER OFF +EXPVER 1 +GRID 1000 +LEFT -50000 +LOWER -90000 +UPPER 90000 +RIGHT 50000 +LEVEL 60 +LEVELIST 1/to/60 +RESOL 63 +GAUSS 1 +ACCURACY 16 +OMEGA 0 +OMEGADIFF 0 +ETA 0 +ETADIFF 0 +DPDETA 1 +SMOOTH 0 +FORMAT GRIB1 +ADDPAR 186/187/188/235/139/39 +PREFIX EN +ECSTORAGE 1 +ECTRANS 0 +ECFSDIR ectmp:/${USER}/econdemand/ +MAILFAIL ${USER} +MAILOPS ${USER} +GRIB2FLEXPART 0 +EOF + diff --git a/Testing/Regression/Unit/Controls/CONTROL.test b/Testing/Regression/Unit/Controls/CONTROL.test new file mode 100644 index 0000000000000000000000000000000000000000..46b4008b87a0084ad1fbcd2b83255b8c63716efa --- /dev/null +++ b/Testing/Regression/Unit/Controls/CONTROL.test @@ -0,0 +1,14 @@ +DTIME 3 +TYPE AN FC FC FC FC FC AN FC FC FC FC FC AN FC FC FC FC FC AN FC FC FC FC FC +TIME 00 00 00 00 00 00 06 00 00 00 00 00 12 12 12 12 12 12 18 12 12 12 12 12 +STEP 00 01 02 03 04 05 00 07 08 09 10 11 00 01 02 03 04 05 00 07 08 09 10 11 +CLASS EI +STREAM OPER +EXPVER 1 +GRID 5000 +LEFT -10000 +LOWER 30000 +UPPER 40000 +RIGHT 10000 +LEVELIST 59/to/60 +RESOL 63 diff --git a/Testing/Regression/Unit/Controls/CONTROL.worktest b/Testing/Regression/Unit/Controls/CONTROL.worktest new file mode 100644 index 0000000000000000000000000000000000000000..7bd637d8b4a27f63ffc03eb0ea1b4669661afa85 --- /dev/null +++ b/Testing/Regression/Unit/Controls/CONTROL.worktest @@ -0,0 +1,37 @@ +DAY1 20100101 +DAY2 +DTIME 3 +TYPE AN FC FC FC FC FC AN FC FC FC FC FC AN FC FC FC FC FC AN FC FC FC FC FC +TIME 00 00 00 00 00 00 06 00 00 00 00 00 12 12 12 12 12 12 18 12 12 12 12 12 +STEP 00 01 02 03 04 05 00 07 08 09 10 11 00 01 02 03 04 05 00 07 08 09 10 11 +CLASS EI +STREAM OPER +NUMBER OFF +EXPVER 1 +GRID 5000 +LEFT -10000 +LOWER 30000 +UPPER 40000 +RIGHT 10000 +LEVEL 60 +LEVELIST 58/to/60 +RESOL 63 +GAUSS 1 +ACCURACY 16 +OMEGA 0 +OMEGADIFF 0 +ETA 0 +ETADIFF 0 +DPDETA 1 +SMOOTH 0 +FORMAT GRIB1 +ADDPAR 186/187/188/235/139/39 +PREFIX EI +ECSTORAGE 0 +ECTRANS 1 +ECFSDIR ectmp:/${USER}/econdemand/ +MAILFAIL ${USER} +MAILOPS ${USER} +GRIB2FLEXPART 0 +EOF + diff --git a/Testing/Regression/Unit/Dir/FCOG__ML.20160410.40429.16424.grb b/Testing/Regression/Unit/Dir/FCOG__ML.20160410.40429.16424.grb new file mode 100644 index 0000000000000000000000000000000000000000..852a87f120f7f47d0d02897b30c7bdf4edc4ffd3 Binary files /dev/null and b/Testing/Regression/Unit/Dir/FCOG__ML.20160410.40429.16424.grb differ diff --git a/Testing/Regression/Unit/Dir/FCOG__SL.20160410.40429.16424.grb b/Testing/Regression/Unit/Dir/FCOG__SL.20160410.40429.16424.grb new file mode 100644 index 0000000000000000000000000000000000000000..e0a29285929408678276b7313097083e4ad72de1 Binary files /dev/null and b/Testing/Regression/Unit/Dir/FCOG__SL.20160410.40429.16424.grb differ diff --git a/Testing/Regression/Unit/Dir/FCSH__ML.20160410.40429.16424.grb b/Testing/Regression/Unit/Dir/FCSH__ML.20160410.40429.16424.grb new file mode 100644 index 0000000000000000000000000000000000000000..51e775c88990a5037b3a287e20674fd5d3f6aec6 Binary files /dev/null and b/Testing/Regression/Unit/Dir/FCSH__ML.20160410.40429.16424.grb differ diff --git a/Testing/Regression/Unit/Dir/FCSH__SL.20160410.40429.16424.grb b/Testing/Regression/Unit/Dir/FCSH__SL.20160410.40429.16424.grb new file mode 100644 index 0000000000000000000000000000000000000000..3d021c6a4e9eca56fe5ae95522091004f4443688 Binary files /dev/null and b/Testing/Regression/Unit/Dir/FCSH__SL.20160410.40429.16424.grb differ diff --git a/Testing/Regression/Unit/Dir/SubTestDir/OG_OROLSM__SL.20160410.40429.16424.grb b/Testing/Regression/Unit/Dir/SubTestDir/OG_OROLSM__SL.20160410.40429.16424.grb new file mode 100644 index 0000000000000000000000000000000000000000..10f1c96f45b0d5f6251546374d60d42f4b30103d Binary files /dev/null and b/Testing/Regression/Unit/Dir/SubTestDir/OG_OROLSM__SL.20160410.40429.16424.grb differ diff --git a/Testing/Regression/Unit/Dir/SubTestDir/SubSubTestDir/FCGG__SL.20160410.40429.16424.grb b/Testing/Regression/Unit/Dir/SubTestDir/SubSubTestDir/FCGG__SL.20160410.40429.16424.grb new file mode 100644 index 0000000000000000000000000000000000000000..3e87854a2ff76d6f985bf777146a3fef4af382e9 Binary files /dev/null and b/Testing/Regression/Unit/Dir/SubTestDir/SubSubTestDir/FCGG__SL.20160410.40429.16424.grb differ diff --git a/Testing/Regression/Unit/Dir/SubTestDir2/FCOG_acc_SL.20160409.40429.16424.grb b/Testing/Regression/Unit/Dir/SubTestDir2/FCOG_acc_SL.20160409.40429.16424.grb new file mode 100644 index 0000000000000000000000000000000000000000..fa7cc0a415bf4dce32f26ae427cb3f4ab3ee5259 Binary files /dev/null and b/Testing/Regression/Unit/Dir/SubTestDir2/FCOG_acc_SL.20160409.40429.16424.grb differ diff --git a/Testing/Regression/Unit/Dir/test.test b/Testing/Regression/Unit/Dir/test.test new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Testing/Regression/Unit/InstallTar/mk_install_tar.sh b/Testing/Regression/Unit/InstallTar/mk_install_tar.sh new file mode 100755 index 0000000000000000000000000000000000000000..2a6bc413cd7ff208cd364bc3a9647a01dba4440f --- /dev/null +++ b/Testing/Regression/Unit/InstallTar/mk_install_tar.sh @@ -0,0 +1,70 @@ +#!/bin/bash +# +# @Author: Anne Philipp +# +# @Date: November, 10 2018 +# +# @Description: Makes a tar-ball for installation +# + +# path to flex_extract base directory +path=../../ + +tarname='flex_extract_v7.1_local.tar' +pwd +tar -zcvf ../../Testing/Regression/Unit/InstallTar/$tarname \ + ${path}Source/Python/Classes/*py \ + ${path}Source/Python/Mods/*py \ + ${path}Source/Python/*py \ + ${path}Source/Pythontest/*py \ + ${path}Source/Fortran/*.f90 \ + ${path}Source/Fortran/*.h \ + ${path}Source/Fortran/makefile* \ + ${path}Templates/convert.nl \ + ${path}Templates/*.temp \ + ${path}Templates/ecmwf_grib1_table_128 \ + ${path}Run/run_local.sh \ + ${path}Run/Control/CONTROL* \ + --exclude=${path}Run/Control/Testgrid \ + --exclude=${path}Run/Control/notPublic \ + ${path}Run/Jobscripts \ + ${path}LICENSE.md \ + ${path}CODE_OF_CONDUCT.md \ + ${path}README.md \ + ${path}Testing/* \ + --exclude=*.ksh \ + --exclude=flex_extract_v7.1_*.tar + + + +tarname='flex_extract_v7.1_ecgate.tar' + +tar -zcvf ../../Testing/Regression/Unit/InstallTar/$tarname \ + ${path}Source/Python/Classes/*py \ + ${path}Source/Python/Mods/*py \ + ${path}Source/Python/*py \ + ${path}Source/Pythontest/*py \ + ${path}Source/Fortran/*.f90 \ + ${path}Source/Fortran/*.h \ + ${path}Source/Fortran/makefile* \ + ${path}Templates/convert.nl \ + ${path}Templates/*.temp \ + ${path}Templates/ecmwf_grib1_table_128 \ + ${path}Run/ECMWF_ENV \ + ${path}Run/run.sh \ + ${path}Run/Control/CONTROL* \ + --exclude=${path}Run/Control/Testgrid \ + --exclude=${path}Run/Control/notPublic \ + ${path}Run/Jobscripts \ + ${path}LICENSE.md \ + ${path}CODE_OF_CONDUCT.md \ + ${path}README.md \ + ${path}Testing/* \ + --exclude=*.ksh \ + --exclude=flex_extract_v7.1_*.tar + + + + + + diff --git a/Testing/Regression/Unit/InstallTar/un_install_tar.sh b/Testing/Regression/Unit/InstallTar/un_install_tar.sh new file mode 100755 index 0000000000000000000000000000000000000000..2e8d52c454ddce8de891ac7ea448d8fa39d2fcba --- /dev/null +++ b/Testing/Regression/Unit/InstallTar/un_install_tar.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# +# @Author: Anne Philipp +# +# @Date: November, 10 2018 +# +# @Description: Untar a tar-ball for installation +# + +tarname='flex_extract_v7.1_local.tar' +dirname='flex_extract_v7.1_local' +path=../../Testing/Regression/Unit/InstallTar/ +mkdir $path$dirname +cd $path$dirname +tar xvf ../$tarname +cd ../../../../../Source/Pythontest + +tarname='flex_extract_v7.1_ecgate.tar' +dirname='flex_extract_v7.1_ecgate' +path=../../Testing/Regression/Unit/InstallTar/ +mkdir $path$dirname +cd $path$dirname +tar xvf ../$tarname +cd ../../../../../Source/Pythontest diff --git a/Testing/Regression/Unit/Testfiles/CONTROL.test b/Testing/Regression/Unit/Testfiles/CONTROL.test new file mode 100644 index 0000000000000000000000000000000000000000..46b4008b87a0084ad1fbcd2b83255b8c63716efa --- /dev/null +++ b/Testing/Regression/Unit/Testfiles/CONTROL.test @@ -0,0 +1,14 @@ +DTIME 3 +TYPE AN FC FC FC FC FC AN FC FC FC FC FC AN FC FC FC FC FC AN FC FC FC FC FC +TIME 00 00 00 00 00 00 06 00 00 00 00 00 12 12 12 12 12 12 18 12 12 12 12 12 +STEP 00 01 02 03 04 05 00 07 08 09 10 11 00 01 02 03 04 05 00 07 08 09 10 11 +CLASS EI +STREAM OPER +EXPVER 1 +GRID 5000 +LEFT -10000 +LOWER 30000 +UPPER 40000 +RIGHT 10000 +LEVELIST 59/to/60 +RESOL 63 diff --git a/Testing/Regression/Unit/Testfiles/ECMWF_ENV.test b/Testing/Regression/Unit/Testfiles/ECMWF_ENV.test new file mode 100644 index 0000000000000000000000000000000000000000..dc258a940b6cacb52706c196b6ea9a5f609cc72c --- /dev/null +++ b/Testing/Regression/Unit/Testfiles/ECMWF_ENV.test @@ -0,0 +1,4 @@ +ECUID testuser +ECGID testgroup +GATEWAY gateway.test.ac.at +DESTINATION user@destination diff --git a/python/compilejob.temp b/Testing/Regression/Unit/Testfiles/compilejob.test similarity index 50% rename from python/compilejob.temp rename to Testing/Regression/Unit/Testfiles/compilejob.test index f0691e4fda8e011ac825ef0101012b89b10b53af..3a4646f868234a3db43d23a818ec38b89b6f1ba6 100644 --- a/python/compilejob.temp +++ b/Testing/Regression/Unit/Testfiles/compilejob.test @@ -4,7 +4,7 @@ # start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server # start with sbatch NAME_OF_THIS_FILE directly on machine -#SBATCH --workdir=/scratch/ms/spatlh00/lh0 +#SBATCH --workdir=/scratch/ms/testgroup/testuser #SBATCH --qos=normal #SBATCH --job-name=flex_ecmwf #SBATCH --output=flex_ecmwf.%j.out @@ -16,7 +16,7 @@ ##PBS -N flex_ecmwf ##PBS -q ns ##PBS -S /usr/bin/ksh -# -o /scratch/ms/no/sbc/flex_ecmwf.$Jobname.$Job_ID.out +##PBS -o /scratch/ms/testgroup/testuser/flex_ecmwf.${Jobname}.${Job_ID}.out # job output is in .ecaccess_DO_NOT_REMOVE ##PBS -j oe ##PBS -V @@ -24,54 +24,46 @@ ##PBS -l EC_memory_per_task=3200MB set -x -export VERSION=7.0.4 -case $HOST in +export VERSION=7.1 +case ${HOST} in *ecg*) - module load python module unload grib_api + module unload eccodes + module load eccodes + module load python module unload emos - module load grib_api/1.14.5 - module load emos/437-r64 - export FLEXPART_ROOT_SCRIPTS= - export MAKEFILE=Makefile.gfortran + module load emos/455-r64 + export FLEXPART_ROOT_SCRIPTS=fp_root_test_path + export MAKEFILE=Makefile.TEST ;; *cca*) module switch PrgEnv-cray PrgEnv-intel - module load grib_api + module load eccodes module load emos module load python echo ${GROUP} echo ${HOME} - echo $HOME | awk -F / '{print $1, $2, $3, $4}' - export GROUP=`echo $HOME | awk -F / '{print $4}'` + echo ${HOME} | awk -F / '{print $1, $2, $3, $4}' + export GROUP=`echo ${HOME} | awk -F / '{print $4}'` export SCRATCH=/scratch/ms/${GROUP}/${USER} - export FLEXPART_ROOT_SCRIPTS= - export MAKEFILE=Makefile.CRAY + export FLEXPART_ROOT_SCRIPTS=fp_root_test_path + export MAKEFILE=Makefile.TEST ;; 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 src -\rm *.o *.mod CONVERT2 -make -f $MAKEFILE >flexcompile 2>flexcompile +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 +make -f ${MAKEFILE} >flexcompile 2>flexcompile ls -l CONVERT2 >>flexcompile if [ $? -eq 0 ]; then echo 'SUCCESS!' >>flexcompile - mail -s flexcompile.$HOST.$$ $USER <flexcompile + mail -s flexcompile.${HOST}.$$ ${USER} <flexcompile else echo Environment: >>flexcompile env >> flexcompile - mail -s "ERROR! flexcompile.$HOST.$$" $USER <flexcompile + mail -s "ERROR! flexcompile.${HOST}.$$" ${USER} <flexcompile fi - - - - - - - - - diff --git a/Testing/Regression/Unit/Testfiles/convert.nl.test b/Testing/Regression/Unit/Testfiles/convert.nl.test new file mode 100644 index 0000000000000000000000000000000000000000..6134989413cdb76683d7f2c06c99dfd14b6fa56c --- /dev/null +++ b/Testing/Regression/Unit/Testfiles/convert.nl.test @@ -0,0 +1,19 @@ +&NAMGEN + maxl = 61, + maxb = 46, + mlevel = 60, + mlevelist = "55/to/60", + mnauf = 63, + metapar = 77, + rlo0 = -15.0, + rlo1 = 45.0, + rla0 = 30.0, + rla1 = 75.0, + momega = 0, + momegadiff = 0, + mgauss = 1, + msmooth = 0, + meta = 0, + metadiff = 0, + mdpdeta = 1 +/ diff --git a/Testing/Regression/Unit/Testfiles/job.temp.test b/Testing/Regression/Unit/Testfiles/job.temp.test new file mode 100644 index 0000000000000000000000000000000000000000..23424a3a873daf2cecd1ec99161d3e9286a3f083 --- /dev/null +++ b/Testing/Regression/Unit/Testfiles/job.temp.test @@ -0,0 +1,77 @@ +#!/bin/ksh + +# ON ECGB: +# start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server +# start with sbatch NAME_OF_THIS_FILE directly on machine + +#SBATCH --workdir=/scratch/ms/testgroup/testuser +#SBATCH --qos=normal +#SBATCH --job-name=flex_ecmwf +#SBATCH --output=flex_ecmwf.%j.out +#SBATCH --error=flex_ecmwf.%j.out +#SBATCH --mail-type=FAIL +#SBATCH --time=12:00:00 + +## CRAY specific batch requests +##PBS -N flex_ecmwf +##PBS -q np +##PBS -S /usr/bin/ksh +## -o /scratch/ms/testgroup/testuser/flex_ecmwf.${PBS_JOBID}.out +## job output is in .ecaccess_DO_NOT_REMOVE +##PBS -j oe +##PBS -V +##PBS -l EC_threads_per_task=24 +##PBS -l EC_memory_per_task=32000MB + +set -x +export VERSION=7.1 +case ${HOST} in + *ecg*) + module load python + module unload grib_api + module unload eccodes + module load eccodes + module unload emos + module load emos/455-r64 + export PATH=${PATH}:fp_root_test_path/flex_extract_v7.1/source/python + ;; + *cca*) + module switch PrgEnv-cray PrgEnv-intel + module load eccodes + module load emos + module load python + export SCRATCH=${TMPDIR} + export PATH=${PATH}:fp_root_test_path/flex_extract_v7.1/source/python + ;; +esac + +cd ${SCRATCH} +mkdir -p python$$ +cd python$$ + +export CONTROL=CONTROL + +cat >${CONTROL}<<EOF +EOF + + +submit.py --controlfile=${CONTROL} --inputdir=./work --outputdir=./work 1> prot 2>&1 + +if [ $? -eq 0 ] ; then + l=0 + for muser in `grep -i MAILOPS ${CONTROL}`; do + if [ ${l} -gt 0 ] ; then + mail -s flex.${HOST}.$$ ${muser} <prot + fi + l=$((${l}+1)) + done +else + l=0 + for muser in `grep -i MAILFAIL ${CONTROL}`; do + if [ ${l} -gt 0 ] ; then + mail -s "ERROR! flex.${HOST}.$$" ${muser} <prot + fi + l=$((${l}+1)) + done +fi + diff --git a/Testing/Regression/Unit/Testfiles/test_put_to_ecserver.txt b/Testing/Regression/Unit/Testfiles/test_put_to_ecserver.txt new file mode 100644 index 0000000000000000000000000000000000000000..f28a7b5dee1644a76232d820e59c2dcca24615bc --- /dev/null +++ b/Testing/Regression/Unit/Testfiles/test_put_to_ecserver.txt @@ -0,0 +1,2 @@ +#This file is just for testing the submission of files to an ecserver. +ls -l diff --git a/docs/Fp_extract_strukt.png b/docs/Fp_extract_strukt.png deleted file mode 100644 index fe7ec20913fc1f2cd8f77ca7d05bcb4ad80819d8..0000000000000000000000000000000000000000 Binary files a/docs/Fp_extract_strukt.png and /dev/null differ diff --git a/docs/SIP.doc b/docs/SIP.doc deleted file mode 100644 index 4babdc892b37919fb501b1b4bdf59139dcb6584d..0000000000000000000000000000000000000000 Binary files a/docs/SIP.doc and /dev/null differ diff --git a/docs/SIP.pdf b/docs/SIP.pdf deleted file mode 100644 index b5b54918670796371df9c6662b329ef629811d4e..0000000000000000000000000000000000000000 Binary files a/docs/SIP.pdf and /dev/null differ diff --git a/docs/SUT_ondemand.doc b/docs/SUT_ondemand.doc deleted file mode 100644 index 079112e53dff614a201bfcaaa41bc8a7e672feb8..0000000000000000000000000000000000000000 Binary files a/docs/SUT_ondemand.doc and /dev/null differ diff --git a/docs/SUT_ondemand.pdf b/docs/SUT_ondemand.pdf deleted file mode 100644 index dadd230eabffe9446e6d00703089705dc57b2405..0000000000000000000000000000000000000000 Binary files a/docs/SUT_ondemand.pdf and /dev/null differ diff --git a/docs/linksECMWF b/docs/linksECMWF deleted file mode 100644 index de34e002b8c49fcef02214b33cf4e01ab3ac4388..0000000000000000000000000000000000000000 --- a/docs/linksECMWF +++ /dev/null @@ -1,86 +0,0 @@ -USEFUL LINKS FOR WORKING WITH ECMWF ARCHIVE AND FLEX_EXTRACT -============================================================ - -general overview ----------------- -https://software.ecmwf.int/wiki/display/WEBAPI/ECMWF+Web+API+Home -https://software.ecmwf.int/wiki/display/SUP/Home - -follow instructions to register -------------------------------- -https://software.ecmwf.int/wiki/display/WEBAPI/Access+MARS - -available public datasets and accept licence --------------------------------------------- -https://software.ecmwf.int/wiki/display/WEBAPI/Available+ECMWF+Public+Datasets - -member-state WebApi access --------------------------- -http://apps.ecmwf.int/archive-catalogue/ - -website to download directly public datasets and check webapi activity ----------------------------------------------------------------------- -http://apps.ecmwf.int/datasets/ - -general user documentation --------------------------- -https://software.ecmwf.int/wiki/display/UDOC/User+Documentation - -mars user documentation ------------------------ -https://software.ecmwf.int/wiki/display/UDOC/MARS+user+documentation - -> specifically the keywords!!!! - https://software.ecmwf.int/wiki/display/UDOC/MARS+keywords - -libraries: ---------- -https://software.ecmwf.int/wiki/display/SUP/2015/05/11/Building+ECMWF+software+with+gfortran -http://www.fftw.org -https://software.ecmwf.int/wiki/display/EMOS/Emoslib -https://software.ecmwf.int/wiki/display/GRIB -https://software.ecmwf.int/wiki/display/ECC - - -Information to datasets: -======================== -https://www.ecmwf.int/en/forecasts/datasets/archive-datasets - -EA5 ----- -https://software.ecmwf.int/wiki/display/CKB/What+is+ERA5 -https://software.ecmwf.int/wiki/display/CKB/How+to+download+ERA5+data+via+the+ECMWF+Web+API -https://software.ecmwf.int/wiki/display/CKB/ERA5+data+documentation - -CERA-20C ---------- -https://software.ecmwf.int/wiki/display/CKB/What+is+CERA-20C -https://www.ecmwf.int/en/forecasts/datasets/archive-datasets/reanalysis-datasets/cera-20c - -ERA-Interim ------------- -https://www.ecmwf.int/en/forecasts/datasets/archive-datasets/reanalysis-datasets/era-interim - -Plotting GRIB fields: ------------------------ -https://software.ecmwf.int/wiki/display/CKB/How+to+plot+GRIB+files+with+Python+and+matplotlib - - -Installation hints: -=================== -1. Read Emoslib installation instructions -2. Read ECMWF blog about gfortran -3. Install FFTW -4. Install EMOSLIB (2 times make! one without any options and one with single precision option) -5. Install ECCODES OR GRIB_API -6. Register at Mars -7. Install WEBAPI -8. Check LD_LIBRARY_PATH environment variable if it contains all paths to the libs -9. Check available python packages (e.g. import eccodes / import grib_api / import ecmwfapi) -10. Start test retrieval -11. Install flex_extract - -Notes: --------- -- use the same compiler and compiler version all the time -- don't forget to set all Library paths to the LD_LIBRARY_PATH variable -- adapt makefile diff --git a/python/CONTROL_OPS b/python/CONTROL_OPS deleted file mode 100644 index fd5a89fb5f305de20350eb485a68a6388b3b54b6..0000000000000000000000000000000000000000 --- a/python/CONTROL_OPS +++ /dev/null @@ -1,29 +0,0 @@ -M_TYPE AN FC FC FC FC FC FC FC FC FC FC FC AN FC FC FC FC FC FC FC FC FC FC FC -M_TIME 00 00 00 00 00 00 00 00 00 00 00 00 12 12 12 12 12 12 12 12 12 12 12 12 -M_STEP 00 01 02 03 04 05 06 07 08 09 10 11 00 01 02 03 04 05 06 07 08 09 10 11 -DTIME 3 -PREFIX EN -M_UPPER 90000 -M_LOWER -90000 -M_LEFT -179000 -M_RIGHT 180000 -M_CLASS OD -M_STREAM OPER -M_NUMBER OFF -M_GRID 1000 -M_RESOL 159 -M_SMOOTH 0 -M_GAUSS 0 -M_ETA 1 -M_ETAPAR 77 -M_DPDETA 1 -M_LEVEL 137 -M_LEVELIST 130/to/137 -M_ADDPAR /186/187/188/235/139/39 -M_FORMAT GRIB2 -ECSTORAGE 0 -ECTRANS 1 -ECFSDIR ectmp:/${USER}/ecops -MAILOPS ${USER} -MAILFAIL ${USER} -M_CWC 1 diff --git a/python/FlexpartTools.py b/python/FlexpartTools.py deleted file mode 100644 index 04ce12993e8ac3879802c976e0b462134423a345..0000000000000000000000000000000000000000 --- a/python/FlexpartTools.py +++ /dev/null @@ -1,1696 +0,0 @@ -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# Functionality provided: Prepare input 3D-wind fields in hybrid coordinates + surface fields for FLEXPART runs -# -# Creation: October 2014 - Anne Fouilloux - University of Oslo -# Extension November 2015 - Leopold Haimberger - University of Vienna for: -# - using the WebAPI also for general MARS retrievals -# - job submission on ecgate and cca -# - job templates suitable for twice daily operational dissemination -# - dividing retrievals of longer periods into digestable chunks -# - retrieve also longer term forecasts, not only analyses and short term forecast data -# - conversion into GRIB2 -# - conversion into .fp format for faster execution of FLEXPART -# -# Extension May 2018 - Anne Philipp - University of Vienna -# - introduced new CONTROL parameter to seperate accumulation and other -# data specification -# - modified code to be able to retrieve ERA-5 data -# - modified code to be able to retrieve CERA-20C data -# - added possibility to retrieve data from public data server als as -# public user -# - allow specifying TIME/TYPE/STEP combinations only with needed data instead -# of the full 24 hours -# -# Requirements: -# in addition to a standard python 2.6 or 2.7 installation the following packages need to be installed -# ECMWF WebMARS, gribAPI with python enabled, emoslib, ecaccess web toolkit, all available from https://software.ecmwf.int/ -# dateutils -# matplotlib (optional, for debugging) -# -# -import subprocess -from argparse import ArgumentParser,ArgumentDefaultsHelpFormatter -import traceback -import shutil -import os, errno,sys,inspect,glob -import datetime - -from string import atoi -from numpy import * - -ecapi=True -try: - import ecmwfapi -except ImportError: - ecapi=False -from gribapi import * -from GribTools import GribTools -from opposite import opposite - -def interpret_args_and_control(*args,**kwargs): - - parser = ArgumentParser(description='Retrieve FLEXPART input from ECMWF MARS archive', - formatter_class=ArgumentDefaultsHelpFormatter) - -# the most important arguments - parser.add_argument("--start_date", dest="start_date", - help="start date YYYYMMDD") - parser.add_argument( "--end_date", dest="end_date", - help="end_date YYYYMMDD") - parser.add_argument( "--date_chunk", dest="date_chunk",default=None, - help="# of days to be retrieved at once") - -# some arguments that override the default in the control file - parser.add_argument("--basetime", dest="basetime", help="base such as 00/12 (for half day retrievals)") - parser.add_argument("--step", dest="step", help="steps such as 00/to/48") - parser.add_argument("--levelist", dest="levelist",help="Vertical levels to be retrieved, e.g. 30/to/60") - parser.add_argument("--area", dest="area", help="area defined as north/west/south/east") - -# set the working directories - parser.add_argument("--inputdir", dest="inputdir",default=None, - help="root directory for storing intermediate files") - parser.add_argument("--outputdir", dest="outputdir",default=None, - help="root directory for storing output files") - parser.add_argument("--flexpart_root_scripts", dest="flexpart_root_scripts", - help="FLEXPART root directory (to find grib2flexpart and COMMAND file)\n\ - Normally flex_extract resides in the scripts directory of the FLEXPART distribution") - -# this is only used by prepareFLEXPART.py to rerun a postprocessing step - parser.add_argument("--ppid", dest="ppid", - help="Specify parent process id for rerun of prepareFLEXPART") - -# arguments for job submission to ECMWF, only needed by submit.py - parser.add_argument("--job_template", dest='job_template',default="job.temp", - help="job template file for submission to ECMWF") - #parser.add_argument("--remote", dest="remote", - #help="target for submission to ECMWF (ecgate or cca etc.)") - parser.add_argument("--queue", dest="queue", - help="queue for submission to ECMWF (e.g. ecgate or cca )") - - - parser.add_argument("--controlfile", dest="controlfile",default='CONTROL.temp', - help="file with control parameters") - parser.add_argument("--debug", dest="debug",default=0, - help="Debug mode - leave temporary files intact") - parser.add_argument("--public", dest="public", default=0, - help="Public mode - retrieves the public datasets") - - parser.add_argument("--request", dest="request", default=None, - help="list all mars request in file mars_requests.dat \ - and skip submission to mars") - - args = parser.parse_args() - - try: - c=Control(args.controlfile) - except IOError: - try: - c=Control(localpythonpath+args.controlfile) - - except: - print 'Could not read control file "'+args.controlfile+'"' - print 'Either it does not exist or its syntax is wrong.' - print 'Try "'+sys.argv[0].split('/')[-1]+' -h" to print usage information' - exit(1) - - if args.start_date==None and getattr(c,'start_date')==None: - print 'start_date specified neither in command line nor in control file '+args.controlfile - print 'Try "'+sys.argv[0].split('/')[-1]+' -h" to print usage information' - exit(1) - - if args.start_date!=None: - c.start_date=args.start_date - if args.end_date!=None: - c.end_date=args.end_date - if c.end_date==None: - c.end_date=c.start_date - if args.date_chunk!=None: - c.date_chunk=args.date_chunk - - if not hasattr(c,'debug'): - c.debug=args.debug - - if not hasattr(c, 'public'): - setattr(c, 'public', args.public) - - if args.inputdir==None and args.outputdir==None: - c.inputdir='../work' - c.outputdir='../work' - else: - if args.inputdir!=None: - c.inputdir=args.inputdir - if args.outputdir==None: - c.outputdir=args.inputdir - if args.outputdir!=None: - c.outputdir=args.outputdir - if args.inputdir==None: - c.inputdir=args.outputdir - - if hasattr(c,'outputdir')==False and args.outputdir==None: - c.outputdir=c.inputdir - else: - if args.outputdir!=None: - c.outputdir=args.outputdir - - if args.area!=None: - afloat='.' in args.area - l=args.area.split('/') - if afloat: - for i in range(len(l)): - l[i]=str(int(float(l[i])*1000)) - c.upper,c.left,c.lower,c.right=l - -# basetime aktiviert den ''operational mode'' - if args.basetime!=None: - c.basetime=args.basetime - #if int(c.basetime)==0: - #c.start_date=datetime.datetime.strftime(datetime.datetime.strptime(c.start_date,'%Y%m%d')-datetime.timedelta(days=1),'%Y%m%d') - #c.end_date=c.start_date - - if args.step!=None: - l=args.step.split('/') - if 'to' in args.step.lower(): - if 'by' in args.step.lower(): - ilist=arange(int(l[0]),int(l[2])+1,int(l[4])) - c.step=['{:0>3}'.format(i) for i in ilist] - else: - myerror(None,args.step+':\n'+'please use "by" as well if "to" is used') - else: - c.step=l - - if args.levelist!=None: - c.levelist=args.levelist - if 'to' in c.levelist: - c.level=c.levelist.split('/')[2] - else: - c.level=c.levelist.split('/')[-1] - - - if args.flexpart_root_scripts!=None: - c.flexpart_root_scripts=args.flexpart_root_scripts - - # set request attribute to control file - if args.request != None: - c.request=int(args.request) - else: - c.request = 0 - - if c.request != 0: - marsfile = os.path.join(c.inputdir, 'mars_requests.csv') - if os.path.isfile(marsfile): - os.remove(marsfile) - - return args,c - -def install_args_and_control(): - - parser = ArgumentParser(description='Install flex_extract software locally or on ECMWF machines', - formatter_class=ArgumentDefaultsHelpFormatter) - parser.add_argument('--target',dest='install_target', - help="Valid targets: local | ecgate | cca , the latter two are at ECMWF") - parser.add_argument("--makefile", dest="makefile",help='Name of Makefile to use for compiling CONVERT2') - parser.add_argument("--ecuid", dest="ecuid",help='user id at ECMWF') - parser.add_argument("--ecgid", dest="ecgid",help='group id at ECMWF') - parser.add_argument("--gateway", dest="gateway",help='name of local gateway server') - parser.add_argument("--destination", dest="destination",help='ecaccess destination, e.g. leo@genericSftp') - - parser.add_argument("--flexpart_root_scripts", dest="flexpart_root_scripts", - help="FLEXPART root directory on ECMWF servers (to find grib2flexpart and COMMAND file)\n\ - Normally flex_extract resides in the scripts directory of the FLEXPART distribution, thus the:") - -# arguments for job submission to ECMWF, only needed by submit.py - parser.add_argument("--job_template", dest='job_template',default="job.temp.o", - help="job template file for submission to ECMWF") - - parser.add_argument("--controlfile", dest="controlfile",default='CONTROL.temp', - help="file with control parameters") - args = parser.parse_args() - - try: -# if True: - c=Control(args.controlfile) -# else: - except: - print 'Could not read control file "'+args.controlfile+'"' - print 'Either it does not exist or its syntax is wrong.' - print 'Try "'+sys.argv[0].split('/')[-1]+' -h" to print usage information' - exit(1) - - if args.install_target!='local': - if args.ecgid==None or args.ecuid==None or args.gateway==None or args.destination==None : - print 'Please enter your ECMWF user id and group id as well as the \nname of the local gateway and the ectrans destination ' - print 'with command line options --ecuid --ecgid --gateway --destination' - print 'Try "'+sys.argv[0].split('/')[-1]+' -h" to print usage information' - print 'Please consult ecaccess documentation or ECMWF user support for further details' - sys.exit(1) - else: - c.ecuid=args.ecuid - c.ecgid=args.ecgid - c.gateway=args.gateway - c.destination=args.destination - - try: - c.makefile=args.makefile - except: - pass - - if args.install_target=='local': - if args.flexpart_root_scripts==None: - c.flexpart_root_scripts='../' - else: - c.flexpart_root_scripts=args.flexpart_root_scripts - - if args.install_target!='local': - if args.flexpart_root_scripts==None: - c.ec_flexpart_root_scripts='${HOME}' - else: - c.ec_flexpart_root_scripts=args.flexpart_root_scripts - - return args,c - -def cleanup(c): - print "cleanup" - cleanlist=glob.glob(c.inputdir+"/*") -# cleanlist[-1:-1]=glob.glob(c.inputdir+"/flux*") -# cleanlist[-1:-1]=glob.glob(c.inputdir+"/*.grb") -# if c.ecapi==False and (c.ectrans=='1' or c.ecstorage=='1'): -# cleanlist[-1:-1]=glob.glob(c.inputdir+"/"+c.prefix+"*") - - -# silentremove(c.inputdir+"/VERTICAL.EC") -# silentremove(c.inputdir+"/date_time_stepRange.idx") - for cl in cleanlist: - if c.prefix not in cl: - silentremove(cl) - if c.ecapi==False and (c.ectrans=='1' or c.ecstorage=='1'): - silentremove(cl) - - - - print "Done" - - -def myerror(c,message='ERROR'): - - try: - target=c.mailfail - except AttributeError: - target=os.getenv('USER') - - if(type(target) is not list): - target=[target] - print message - # uncomment if user wants email notification directly from python - #for t in target: - #p=subprocess.Popen(['mail','-s flex_extract v7.0.4 ERROR', os.path.expandvars(t)], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,bufsize=1) - #tr='\n'.join(traceback.format_stack()) - #pout=p.communicate(input=message+'\n\n'+tr)[0] - #print 'Email sent to '+os.path.expandvars(t) # +' '+pout.decode() - - exit(1) - -def normalexit(c,message='Done!'): - - try: - target=c.mailops - - - if(type(target) is not list): - target=[target] - # Uncomment if user wants notification directly from python - #for t in target: - #p=subprocess.Popen(['mail','-s flex_extract v7.0.4 normal exit', os.path.expandvars(t)], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,bufsize=1) - #pout=p.communicate(input=message+'\n\n')[0] - #print pout.decode() - - except: - pass - - print message - - return - -def product(*args, **kwds): - # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy - # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111 - pools = map(tuple, args) * kwds.get('repeat', 1) - result = [[]] - for pool in pools: - result = [x+[y] for x in result for y in pool] - for prod in result: - yield tuple(prod) - -############################################################### -# utility to remove a file if it exists -# it does not fail if the file does not exist -############################################################### -def silentremove(filename): - try: - os.remove(filename) - except OSError as e: # this would be "except OSError, e:" before Python 2.6 - if e.errno != errno.ENOENT: # errno.ENOENT = no such file or directory - raise # re-raise exception if a different error occured - - -def init128(fn): - - table128=dict() - with open(fn) as f: - fdata = f.read().split('\n') - for data in fdata: - if data[0]!='!': - table128[data[0:3]]=data[59:64].strip() - - return table128 - -def toparamId(pars,table): - - cpar=pars.upper().split('/') - ipar=[] - for par in cpar: - found=False - for k,v in table.iteritems(): - if par==k or par==v: - ipar.append(int(k)) - found=True - break - if found==False: - print 'Warning: par '+par+' not found in table 128' - return ipar - -def dapoly(alist): - - - pya=(alist[3]-alist[0]+3.*(alist[1]-alist[2]))/6. - pyb=(alist[2]+alist[0])/2.-alist[1]-9.*pya/2. - pyc=alist[1]-alist[0]-7.*pya/2.-2.*pyb - pyd=alist[0]-pya/4.-pyb/3.-pyc/2. - sfeld=8.*pya+4.*pyb+2.*pyc+pyd - - return sfeld - -def darain(alist): - xa=alist[0] - xb=alist[1] - xc=alist[2] - xd=alist[3] - xa[xa<0.]=0. - xb[xb<0.]=0. - xc[xc<0.]=0. - xd[xd<0.]=0. - - xac=0.5*xb - mask=xa+xc>0. - xac[mask]=xb[mask]*xc[mask]/(xa[mask]+xc[mask]) - xbd=0.5*xc - mask=xb+xd>0. - xbd[mask]=xb[mask]*xc[mask]/(xb[mask]+xd[mask]) - sfeld=xac+xbd - - return sfeld - -def add_previousday_ifneeded(attrs): - - if attrs['type']=='FC' and 'acc' not in attrs['target']: - steps=attrs['step'].split('/') - times=attrs['time'].split('/') - addpday=False - #for t in times: - #for s in steps: - if int(times[0])+int(steps[0])>23: - addpday=True - if(addpday): - dates=attrs['date'].split('/') - start_date=dates[0] - syear=int(start_date[:4]) - smonth=int(start_date[4:6]) - sday=int(start_date[6:]) - start = datetime.date( year = syear, month = smonth, day = sday ) - startm1=start- datetime.timedelta(days=1) - - attrs['date']='/'.join([startm1.strftime("%Y%m%d")]+dates[1:]) - print('CHANGED FC start date to '+startm1.strftime("%Y%m%d")+'to accomodate TIME='+times[0]+', STEP='+steps[0]) - - return - - - -class Control: - 'class containing the information of the flex_extract control file' - - def __init__(self,filename): - - #try: - with open(filename) as f: - fdata = f.read().split('\n') - for ldata in fdata: - data=ldata.split() - if len(data)>1: - if 'm_' in data[0].lower(): - data[0]=data[0][2:] - if data[0].lower()=='class': - data[0]='marsclass' - if data[0].lower()=='day1': - data[0]='start_date' - if data[0].lower()=='day2': - data[0]='end_date' - if data[0].lower()=='addpar': - if '/' in data[1]: - if data[1][0]=='/': - data[1]=data[1][1:] - dd=data[1].split('/') - data=[data[0]] - for d in dd: - data.append(d) - pass - if len(data)==2: - if '$' in data[1]: -# print data[1] - setattr(self,data[0].lower(),data[1]) - while '$' in data[1]: - i=data[1].index('$') - j=data[1].find('{') - k=data[1].find('}') - var=os.getenv(data[1][j+1:k]) - if var is not None: - data[1]=data[1][:i]+var+data[1][k+1:] - else: - myerror(None,'Could not find variable '+data[1][j+1:k]+' while reading '+filename) - -# print data[0],data[1] - setattr(self,data[0].lower()+'_expanded',data[1]) - else: - if data[1].lower()!='none': - setattr(self,data[0].lower(),data[1]) - else: - setattr(self,data[0].lower(),None) - - elif len(data)>2: - setattr(self,data[0].lower(),(data[1:])) - else: - pass - - if not hasattr(self,'start_date'): - self.start_date=None - if not hasattr(self,'end_date'): - self.end_date=self.start_date - if not hasattr(self,'accuracy'): - self.accuracy=24 - if not hasattr(self,'omega'): - self.omega='0' - if not hasattr(self,'cwc'): - self.cwc='0' - if not hasattr(self,'omegadiff'): - self.omegadiff='0' - if not hasattr(self,'etadiff'): - self.etadiff='0' - - if not hasattr(self,'addpar'): - self.addpar='' - if not isinstance(self.type, list): - self.type = [self.type] - if not isinstance(self.time, list): - self.time = [self.time] - if not isinstance(self.step, list): - self.step = [self.step] - - max_level_list = [16, 19, 31, 40, 50, 60, 62, 91, 137] - if not hasattr(self,'levelist'): - if not hasattr(self,'level'): - print 'WARNING: neither levelist nor level specified in CONTROL file' - else: - if self.level in max_level_list: - self.levelist='1/to/'+self.level - else: - if not hasattr(self, 'level'): - if 'to' in self.levelist.lower(): - max_level = self.levelist.split('/')[2] - if int(max_level) in max_level_list: - self.level = max_level - else: - print 'ERROR: LEVEL-parameter could not be set' - print 'LEVEL must be the maximum level of a specified level list from ECMWF, e.g.' - print '16, 19, 31, 40, 50, 60, 62, 91 or 137' - sys.exit(1) - else: - max_level = self.levelist.split('/')[-1] - if int(max_level) in max_level_list: - self.level = max_level - else: - print 'ERROR: LEVEL-parameter could not be set' - print 'LEVEL must be the maximum level of a specified level list from ECMWF, e.g.' - print '16, 19, 31, 40, 50, 60, 62, 91 or 137' - sys.exit(1) - else: - # check if consistent - if int(self.level) in max_level_list: - pass - else: - print 'ERROR: LEVEL-parameter is not properly selected' - print 'LEVEL must be the maximum level of a specified level list from ECMWF, e.g.' - print '16, 19, 31, 40, 50, 60, 62, 91 or 137' - sys.exit(1) - - if not hasattr(self,'maxstep'): - self.maxstep=0 - for s in self.step: - if int(s)>self.maxstep: - self.maxstep=int(s) - else: - self.maxstep=int(self.maxstep) - if not hasattr(self,'prefix'): - self.prefix='EN' - if not hasattr(self,'makefile'): - self.makefile=None - if not hasattr(self,'basetime'): - self.basetime=None - if not hasattr(self,'date_chunk'): - self.date_chunk='3' - - self.flexextractdir=os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))+'/../' # script directory -# if not hasattr(self,'exedir'): - self.exedir=self.flexextractdir+'src/' - if not hasattr(self,'grib2flexpart'): - self.grib2flexpart='0' - if not hasattr(self,'flexpart_root_scripts'): - self.flexpart_root_scripts=self.flexextractdir - - if not hasattr(self,'acctype'): - print('... Control paramter ACCTYPE was not defined in CONTROL file.') - print('Important for (forecast) flux data extraction.') - try: - if len(self.type) > 1 and self.type[1] != 'AN': - print('Use old setting by using TYPE[1].') - self.acctype = self.type[1] - except: - print('Use default value "FC"!') - self.acctype='FC' - - if not hasattr(self,'acctime'): - print('... Control paramter ACCTIME was not defined in CONTROL file.') - print('Use default value "00/12" for flux forecast!') - print('This may be different for single data sets, see documentation if retrieval fails!') - self.acctime='00/12' - - if not hasattr(self, 'accmaxstep'): - print('... Control paramter ACCMAXSTEP was not defined in CONTROL file.') - print('Use default value "12" for flux forecast!') - print('This may be different for single data sets, see documentation if retrieval fails!') - self.accmaxstep='12' - - for i in range(len(self.type)): - if self.type[i] == 'AN' and int(self.step[i]) != 0: - print('Analysis retrievals must have STEP = 0 (setting to 0)') - self.type[i] = 0 - - if not hasattr(self,'request'): - self.request=0 - elif int(self.request) != 0: - self.request=int(self.request) - marsfile = os.path.join(self.inputdir, - 'mars_requests.csv') - if os.path.isfile(marsfile): - silentremove(marsfile) - - return - def __str__(self): - - attrs = vars(self) - # {'kids': 0, 'name': 'Dog', 'color': 'Spotted', 'age': 10, 'legs': 2, 'smell': 'Alot'} - # now dump this in some way or another - return ', '.join("%s: %s" % item for item in attrs.items()) - - def tolist(self): - attrs=vars(self) - l=list() - for item in attrs.items(): - if '_expanded' in item[0]: - pass - elif 'exedir' in item[0]: - pass - elif 'flexpart_root_scripts' in item[0]: - pass - elif 'flexextractdir' in item[0]: - pass - - else: - if type(item[1]) is list: - stot='' - for s in item[1]: - stot+=s+' ' - - l.append("%s %s" % (item[0],stot)) - else: - l.append("%s %s" % item ) - return sorted(l) - - - -############################################################## -# MARSretrieval class -############################################################## -class MARSretrieval: - 'class for MARS retrievals' - - def __init__(self,server, public, marsclass="ei",type="",levtype="",levelist="", - repres="", date="",resol="",stream="",area="",time="",step="",expver="1", - number="",accuracy="", grid="", gaussian="", target="",param="",dataset="",expect=""): - self.dataset=dataset - self.marsclass=marsclass - self.type=type - self.levtype=levtype - self.levelist=levelist - self.repres=repres - self.date=date - self.resol=resol - self.stream=stream - self.area=area - self.time=time - self.step=step - self.expver=expver - self.target=target - self.param=param - self.number=number - self.accuracy=accuracy - self.grid=grid - self.gaussian=gaussian -# self.expect=expect - self.server=server - self.public=public - - def displayInfo(self): - attrs=vars(self) - for item in attrs.items(): - if item[0] in ('server'): - pass - else: - print item[0]+': '+str(item[1]) - - return - - def print_infodata_csv(self, inputdir, request_number): - ''' - @Description: - Write all request parameter in alpabetical order into a "csv" file. - - @Input: - self: instance of MarsRetrieval - For description see class documentation. - - inputdir: string - The path where all data from the retrievals are stored. - - request_number: integer - Number of mars requests for flux and non-flux data. - - @Return: - <nothing> - ''' - - # Get all class attributes and their values as a dictionary - attrs = vars(self).copy() - del attrs['server'] - del attrs['public'] - - # open a file to store all requests to - with open(os.path.join(inputdir, 'mars_requests.csv'), 'a') as f: - f.write(str(request_number) + ', ') - f.write(', '.join(str(attrs[key]) - for key in sorted(attrs.iterkeys()))) - f.write('\n') - - return - - def dataRetrieve(self): - attrs=vars(self).copy() - - del attrs['server'] - del attrs['public'] - mclass = attrs.get('marsclass') - del attrs['marsclass'] - attrs['class'] = mclass - - add_previousday_ifneeded(attrs) - - target = attrs.get('target') - if not int(self.public): - del attrs['target'] - print 'target: ', target - - delete_keys = [] - for k, v in attrs.iteritems(): - if v == '': - delete_keys.append(str(k)) - else: - attrs[k] = str(v) - - for k in delete_keys: - del attrs[k] - - if self.server != False: - try: - if int(self.public): - print 'RETRIEVE DATA!' - self.server.retrieve(attrs) - else: - print 'EXECUTE RETRIEVAL!' - self.server.execute(attrs, target) - except: - e = sys.exc_info()[0] - print "Error: ", e - print 'MARS Request failed'#, have you already registered at apps.ecmwf.int?' - #raise IOError - if not int(self.public) and os.stat(target).st_size==0: - print 'MARS Request returned no data - please check request' - raise IOError - elif int(self.public) and os.stat(attrs.get('target')).st_size==0: - print 'MARS Request returned no data - please check request' - raise IOError - else: - s='ret' - for k,v in attrs.iteritems(): - s=s+','+k+'='+str(v) - - s+=',target="'+target+'"' - p=subprocess.Popen(['mars'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,bufsize=1) - pout=p.communicate(input=s)[0] - print pout.decode() - if 'Some errors reported' in pout.decode(): - print 'MARS Request failed - please check request' - raise IOError - - if os.stat(target).st_size==0: - print 'MARS Request returned no data - please check request' - raise IOError - - return - -############################################################## -class EIFlexpart: - 'class to retrieve Era Interim data for running FLEXPART' -############################################################## - - def __init__(self,c,fluxes=False): - # different mars types for retrieving reanalysis data for flexpart - - # set a counter for the number of mars requests generated - self.mreq_count = 0 - self.types=dict() - try: - if c.maxstep>24: #len(c.type): # Pure forecast mode - c.type=[c.type[0]] # AP changed this index from 1 to 0 - c.step=['{:0>3}'.format(int(c.step[0]))] - c.time=[c.time[0]] - for i in range(1,c.maxstep+1): - c.type.append(c.type[0]) - c.step.append('{:0>3}'.format(i)) - c.time.append(c.time[0]) - except: - pass - - self.inputdir=c.inputdir - self.basetime=c.basetime - self.dtime=c.dtime - self.mars={} - i=0 - j=0 - if fluxes==True and c.maxstep<=24: - self.types[str(c.acctype)]={'times':str(c.acctime), - 'steps':'{}/to/{}/by/{}'.format( - c.dtime,c.accmaxstep,c.dtime)} - i=1 - for k in [0,12]: - for j in range(int(c.dtime),13,int(c.dtime)): - self.mars['{:0>3}'.format(i*int(c.dtime))]=[c.type[1],'{:0>2}'.format(k),'{:0>3}'.format(j)] - i+=1 - else: - for ty,st,ti in zip(c.type,c.step,c.time): - btlist=range(len(c.time)) - if c.basetime=='12': - btlist=[1,2,3,4,5,6,7,8,9,10,11,12] - if c.basetime=='00': - btlist=[13,14,15,16,17,18,19,20,21,22,23,0] - - - if ((ty.upper() == 'AN' and mod(int(c.time[i]),int(c.dtime))==0 and int(c.step[i])==0) or \ - (ty.upper() != 'AN' and mod(int(c.step[i]),int(c.dtime))==0 and \ - mod(int(c.step[i]),int(c.dtime))==0) ) and \ - (i in btlist or c.maxstep>24): - if ty not in self.types.keys(): - self.types[ty]={'times':'','steps':''} - if ti not in self.types[ty]['times']: - if len(self.types[ty]['times'])>0: - self.types[ty]['times']+='/' - self.types[ty]['times']+=ti - if st not in self.types[ty]['steps']: - if len(self.types[ty]['steps'])>0: - self.types[ty]['steps']+='/' - self.types[ty]['steps']+=st - - self.mars['{:0>3}'.format(j)]=[ty,'{:0>2}'.format(int(ti)),'{:0>3}'.format(int(st))] - j+=int(c.dtime) - - i+=1 - -# Different grids need different retrievals -# SH=Spherical Harmonics, GG=Gaussian Grid, OG=Output Grid, ML=MultiLevel, SL=SingleLevel - self.params={'SH__ML':'','SH__SL':'', - 'GG__ML':'','GG__SL':'', - 'OG__ML':'','OG__SL':'', - 'OG_OROLSM_SL':'','OG_acc_SL':''} - - self.marsclass=c.marsclass - self.stream=c.stream - self.number=c.number - self.resol=c.resol - if 'N' in c.grid: # Gaussian output grid - self.grid=c.grid - self.area='G' - else: - self.grid='{}/{}'.format(int(c.grid)/1000.,int(c.grid)/1000.) - self.area='{}/{}/{}/{}'.format(int(c.upper)/1000.,int(c.left)/1000.,int(c.lower)/1000.,int(c.right)/1000.) - - self.accuracy=c.accuracy - self.level=c.level - try: - self.levelist=c.levelist - except: - self.levelist='1/to/'+c.level - self.glevelist='1/to/'+c.level - try: - self.gaussian=c.gaussian - except: - self.gaussian='' - try: - self.dataset=c.dataset - except: - self.dataset='' - try: - self.expver=c.expver - except: - self.expver='1' - try: - self.number=c.number - except: - self.number='0' - - self.outputfilelist=[] - - -# Now comes the nasty part that deals with the different scenarios we have: -# 1) Calculation of etadot on -# a) Gaussian grid -# b) Output grid -# c) Output grid using parameter 77 retrieved from MARS -# 3) Calculation/Retrieval of omega -# 4) Download also data for WRF - - if fluxes==False: - self.params['SH__SL']=['LNSP','ML','1','OFF'] -# self.params['OG__SL']=["SD/MSL/TCC/10U/10V/2T/2D/129/172",'SFC','1',self.grid] - self.params['OG__SL']=["141/151/164/165/166/167/168/129/172",'SFC','1',self.grid] - if c.marsclass.upper() == 'EA' or c.marsclass.upper() == 'EP': - self.params['OG_OROLSM__SL']=["160/27/28/244",'SFC','1',self.grid] - else: - self.params['OG_OROLSM__SL']=["160/27/28/173",'SFC','1',self.grid] - - if len(c.addpar)>0: - if c.addpar[0]=='/': - c.addpar=c.addpar[1:] - self.params['OG__SL'][0]+='/'+'/'.join(c.addpar) - self.params['OG__ML']=['T/Q','ML',self.levelist,self.grid] - - if c.gauss=='0' and c.eta=='1': # the simplest case - self.params['OG__ML'][0]+='/U/V/77' - elif c.gauss=='0' and c.eta=='0': # this is not recommended (inaccurate) - self.params['OG__ML'][0]+='/U/V' - elif c.gauss=='1' and c.eta=='0': # this is needed for data before 2008, or for reanalysis data - self.params['GG__SL']=['Q','ML','1','{}'.format((int(self.resol)+1)/2)] - self.params['SH__ML']=['U/V/D','ML',self.glevelist,'OFF'] - else: - print 'Warning: This is a very costly parameter combination, use only for debugging!' - self.params['GG__SL']=['Q','ML','1','{}'.format((int(self.resol)+1)/2)] - self.params['GG__ML']=['U/V/D/77','ML',self.glevelist,'{}'.format((int(self.resol)+1)/2)] - - if c.omega=='1': - self.params['OG__ML'][0]+='/W' - - try: # add cloud water content if necessary - if c.cwc=='1': - self.params['OG__ML'][0]+='/CLWC/CIWC' - except: - pass - - try: # add vorticity and geopotential height for WRF if necessary - if c.wrf=='1': - self.params['OG__ML'][0]+='/Z/VO' - if '/D' not in self.params['OG__ML'][0]: - self.params['OG__ML'][0]+='/D' -# wrf_sfc='sp/msl/skt/2t/10u/10v/2d/z/lsm/sst/ci/sd/stl1/stl2/stl3/stl4/swvl1/swvl2/swvl3/swvl4'.upper() -# 134/151/235/167/165/166/168/129/172/034/031/141/139/170/183/236/039/040/041/042 - wrf_sfc='134/235/167/165/166/168/129/172/34/31/141/139/170/183/236/39/40/41/42'.upper() - lwrt_sfc=wrf_sfc.split('/') - for par in lwrt_sfc: - if par not in self.params['OG__SL'][0]: - self.params['OG__SL'][0]+='/'+par - - except: - pass - else: - self.params['OG_acc_SL']=["LSP/CP/SSHF/EWSS/NSSS/SSR",'SFC','1',self.grid] - - - return - # add additional WRF specific parameters here - - def create_namelist(self,c,filename): - -# if inputdir=="": -# self.inputdir='.' -# else: -# self.inputdir=inputdir - - self.inputdir=c.inputdir - area=asarray(self.area.split('/')).astype(float) - grid=asarray(self.grid.split('/')).astype(float) - -# if area[3]<0: -# area[3]+=360 - if area[1]>area[3]: - area[1]-=360 - zyk=abs((area[3]-area[1]-360.)+grid[1])<1.e-6 - maxl=int((area[3]-area[1])/grid[1])+1 - maxb=int((area[0]-area[2])/grid[0])+1 - - f=open(self.inputdir+'/'+filename,'w') - f.write('&NAMGEN\n') - f.write(',\n '.join(['maxl='+str(maxl),'maxb='+str(maxb), - 'mlevel='+self.level,'mlevelist='+'"'+self.levelist+'"', - 'mnauf='+self.resol,'metapar='+'77', - 'rlo0='+str(area[1]),'rlo1='+str(area[3]),'rla0='+str(area[2]),'rla1='+str(area[0]), - 'momega='+c.omega,'momegadiff='+c.omegadiff,'mgauss='+c.gauss, - 'msmooth='+c.smooth,'meta='+c.eta,'metadiff='+c.etadiff,'mdpdeta='+c.dpdeta])) - - f.write('\n/\n') - f.close() - return - - - def retrieve(self, server, public, dates, request, times, inputdir=''): - self.dates=dates - self.server=server - self.public=public - - if inputdir=="": - self.inputdir='.' - else: - self.inputdir=inputdir - - # Retrieve Q not for using Q but as a template for a reduced gaussian grid one date and time is enough -# Take analysis at 00 -# qdate=self.dates -# idx=qdate.find("/") -# if (idx >0): -# qdate=self.dates[:idx] - - #QG= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=self.stream, type="an", levtype="ML", levelist="1", - #gaussian="reduced",grid='{}'.format((int(self.resol)+1)/2), resol=self.resol,accuracy=self.accuracy,target=self.inputdir+"/"+"QG.grb", - #date=qdate, time="00",expver=self.expver, param="133.128") - #QG.displayInfo() - #QG.dataRetrieve() - - oro=False - for ftype in self.types: - for pk,pv in self.params.iteritems(): - if isinstance(pv,str): # or pk!='GG__SL' : - continue - mftype=''+ftype - mftime=self.types[ftype]['times'] - mfstep=self.types[ftype]['steps'] - mfdate=self.dates - mfstream=self.stream - mftarget=self.inputdir+"/"+ftype+pk+'.'+self.dates.split('/')[0]+'.'+str(os.getppid())+'.'+str(os.getpid())+".grb" - - if pk=='OG__SL': - pass - if pk=='OG_OROLSM__SL': - if oro==False: - # in CERA20C there is no stream "OPER"! - if self.marsclass.upper() != 'EP': - mfstream='OPER' - mftype='AN' - mftime='00' - mfstep='000' - mfdate=self.dates.split('/')[0] - mftarget=self.inputdir+"/"+pk+'.'+mfdate+'.'+str(os.getppid())+'.'+str(os.getpid())+".grb" - oro=True - else: - continue - - if pk=='GG__SL' and pv[0]=='Q': - area="" - gaussian='reduced' - else: - area=self.area - gaussian=self.gaussian - - if self.basetime==None: - # increase number of mars requests - self.mreq_count += 1 - MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=mfstream, - type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian, - accuracy=self.accuracy,grid=pv[3],target=mftarget,area=area, - date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0]) - - if request == 0: - MR.displayInfo() - MR.dataRetrieve() - elif request == 1: - MR.print_infodata_csv(self.inputdir, self.mreq_count) - elif request == 2: - MR.print_infodata_csv(self.inputdir, self.mreq_count) - MR.displayInfo() - MR.dataRetrieve() -# The whole else section is only necessary for operational scripts. It could be removed - else: # check if mars job requests fields beyond basetime. If yes eliminate those fields since they may not - # be accessible with user's credentials - sm1=-1 - if 'by' in mfstep: - sm1=2 - tm1=-1 - if 'by' in mftime: - tm1=2 - maxtime=datetime.datetime.strptime(mfdate.split('/')[-1]+mftime.split('/')[tm1],'%Y%m%d%H')+ \ - datetime.timedelta(hours=int(mfstep.split('/')[sm1])) - - elimit=datetime.datetime.strptime(mfdate.split('/')[-1]+self.basetime,'%Y%m%d%H') - - if self.basetime=='12': - if 'acc' in pk: - - # Strategy: if maxtime-elimit>=24h reduce date by 1, - # if 12h<=maxtime-elimit<12h reduce time for last date - # if maxtime-elimit<12h reduce step for last time - # A split of the MARS job into 2 is likely necessary. - maxtime=elimit-datetime.timedelta(hours=24) - mfdate='/'.join(('/'.join(mfdate.split('/')[:-1]),datetime.datetime.strftime(maxtime,'%Y%m%d'))) - # increase number of mars requests - self.mreq_count += 1 - MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=self.stream, - type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian, - accuracy=self.accuracy,grid=pv[3],target=mftarget,area=area, - date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0]) - - if request == 0: - MR.displayInfo() - MR.dataRetrieve() - elif request == 1: - MR.print_infodata_csv(self.inputdir, self.mreq_count) - elif request == 2: - MR.print_infodata_csv(self.inputdir, self.mreq_count) - MR.displayInfo() - MR.dataRetrieve() - - maxtime=elimit-datetime.timedelta(hours=12) - mfdate=datetime.datetime.strftime(maxtime,'%Y%m%d') - mftime='00' - mftarget=self.inputdir+"/"+ftype+pk+'.'+mfdate+'.'+str(os.getppid())+'.'+str(os.getpid())+".grb" - # increase number of mars requests - self.mreq_count += 1 - MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=self.stream, - type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian, - accuracy=self.accuracy,grid=pv[3],target=mftarget,area=area, - date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0]) - if request == 0: - MR.displayInfo() - MR.dataRetrieve() - elif request == 1: - MR.print_infodata_csv(self.inputdir, self.mreq_count) - elif request == 2: - MR.print_infodata_csv(self.inputdir, self.mreq_count) - MR.displayInfo() - MR.dataRetrieve() - else: - # increase number of mars requests - self.mreq_count += 1 - MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=self.stream, - type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian, - accuracy=self.accuracy,grid=pv[3],target=mftarget,area=area, - date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0]) - - if request == 0: - MR.displayInfo() - MR.dataRetrieve() - elif request == 1: - MR.print_infodata_csv(self.inputdir, self.mreq_count) - elif request == 2: - MR.print_infodata_csv(self.inputdir, self.mreq_count) - MR.displayInfo() - MR.dataRetrieve() - else: - maxtime=elimit-datetime.timedelta(hours=24) - mfdate=datetime.datetime.strftime(maxtime,'%Y%m%d') - - mftimesave=''.join(mftime) - - if pk=='OG_OROLSM__SL': - mfdate=self.dates.split('/')[0] - mftarget=self.inputdir+"/"+pk+'.'+mfdate+'.'+str(os.getppid())+'.'+str(os.getpid())+".grb" - - if '/' in mftime: - times=mftime.split('/') - while int(times[0])+int(mfstep.split('/')[0])<=12 and pk!='OG_OROLSM__SL' and 'acc' not in pk: - times=times[1:] - if len(times)>1: - mftime='/'.join(times) - else: - mftime=times[0] - - if int(mftimesave.split('/')[0])==0 and int(mfstep.split('/')[0])==0 and pk!='OG_OROLSM__SL': - mfdate=datetime.datetime.strftime(elimit,'%Y%m%d') - mftime='00' - mfstep='000' - mftarget=self.inputdir+"/"+ftype+pk+'.'+mfdate+'.'+str(os.getppid())+'.'+str(os.getpid())+".grb" - - # increase number of mars requests - self.mreq_count += 1 - MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=self.stream, - type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian, - accuracy=self.accuracy,grid=pv[3],target=mftarget,area=area, - date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0]) - - if request == 0: - MR.displayInfo() - MR.dataRetrieve() - elif request == 1: - MR.print_infodata_csv(self.inputdir, self.mreq_count) - elif request == 2: - MR.print_infodata_csv(self.inputdir, self.mreq_count) - MR.displayInfo() - MR.dataRetrieve() - - - if request == 0 or request == 2: - print('MARS retrieve done ... ') - elif request == 1: - print('MARS request printed ...') - - def getFlexpartTime(self, type,step, time): - cstep='{:0>3}'.format(step) - ctime='{:0>2}'.format(int(time/100)) - - ctype = str(type).upper() - myinfo = [ctype,ctime, cstep] - cflextime = None - for t, marsinfo in self.mars.items(): - if myinfo == marsinfo: - cflextime=t - return cflextime - - def process_output(self, c): - - print 'Postprocessing:\n Format: {}\n'.format(c.format) - if c.ecapi==False: - print 'ecstorage: {}\n ecfsdir: {}\n'.format(c.ecstorage,c.ecfsdir) - if not hasattr(c,'gateway'): - c.gateway=os.getenv('GATEWAY') - if not hasattr(c,'destination'): - c.destination=os.getenv('DESTINATION') - print 'ectrans: {}\n gateway: {}\n destination: {}\n '.format(c.ectrans, c.gateway,c.destination) - print 'Output filelist: \n',self.outputfilelist - - if c.format.lower()=='grib2': - for ofile in self.outputfilelist: - p=subprocess.check_call(['grib_set','-s','edition=2,productDefinitionTemplateNumber=8',ofile,ofile+'_2']) - p=subprocess.check_call(['mv',ofile+'_2',ofile]) - if c.debug==0: - inputfiles=glob.glob('*.grb') - for grb in inputfiles: - try: - os.remove(grb) - except: - pass - if c.stream=='ELDA': - opposite(self.inputdir+'/'+c.prefix) - for i in range(len(self.outputfilelist)): - if self.outputfilelist[i][-4:]!='N000' : - j=int(self.outputfilelist[i][-3:]) - self.outputfilelist.append(self.outputfilelist[i][:-3]+'{:0>3}'.format(j+25)) - - if int(c.ectrans)==1 and c.ecapi==False: - for ofile in self.outputfilelist: - p=subprocess.check_call(['ectrans','-overwrite','-gateway',c.gateway, - '-remote',c.destination,'-source',ofile]) - print 'ectrans:',p - if int(c.ecstorage)==1 and c.ecapi==False: - for ofile in self.outputfilelist: - p=subprocess.check_call(['ecp','-o',ofile,os.path.expandvars(c.ecfsdir)]) - -#20131107 000000 EN13110700 ON DISC - if c.outputdir!=c.inputdir: - for ofile in self.outputfilelist: - p=subprocess.check_call(['mv',ofile,c.outputdir]) - - if c.grib2flexpart=='1': - f=open(c.outputdir+'/'+'AVAILABLE','w') - clist=[] - for ofile in self.outputfilelist: # generate AVAILABLE file - fname=ofile.split('/') - if '.' in fname[-1]: - l=fname[-1].split('.') - timestamp=datetime.datetime.strptime(l[0][-6:]+l[1],'%y%m%d%H') - timestamp+=datetime.timedelta(hours=int(l[2])) - cdate=datetime.datetime.strftime(timestamp,'%Y%m%d') - chms=datetime.datetime.strftime(timestamp,'%H%M%S') - - else: - cdate='20'+fname[-1][-8:-2] - chms=fname[-1][-2:]+'0000' - clist.append(cdate+' '+chms+' '*6+fname[-1]+' '*14+'ON DISC') - clist.sort() - f.write('\n'.join(clist)+'\n') - f.close() - - pwd=os.path.abspath(c.outputdir) - f=open(pwd+'/pathnames','w') - f.write(pwd+'/Options/\n') - f.write(pwd+'/\n') - f.write(pwd+'/\n') - f.write(pwd+'/AVAILABLE\n') - f.write('==================\n') - f.close() - - if not os.path.exists(pwd+'/Options'): - os.makedirs(pwd+'/Options') - f=open(os.path.expandvars(os.path.expanduser(c.flexpart_root_scripts))+'/../Options/COMMAND','r') - lflist=f.read().split('\n') - i=0 - for l in lflist: - if 'LDIRECT' in l.upper(): - break - i+=1 - - clist.sort() - lflist=lflist[:i+1]+[clist[0][:16],clist[-1][:16]]+lflist[i+3:] - g=open(pwd+'/Options/COMMAND','w') - g.write('\n'.join(lflist)+'\n') - g.close() - - os.chdir(c.outputdir) - p=subprocess.check_call([os.path.expandvars(os.path.expanduser(c.flexpart_root_scripts))+'/../FLEXPART_PROGRAM/grib2flexpart', - 'useAvailable','.']) - os.chdir(pwd) - - def create(self, inputfiles, c,): - - table128=init128(c.flexextractdir+'/grib_templates/ecmwf_grib1_table_128') - wrfpars=toparamId('sp/mslp/skt/2t/10u/10v/2d/z/lsm/sst/ci/sd/stl1/stl2/stl3/stl4/swvl1/swvl2/swvl3/swvl4',table128) -# index_keys=["date","time","stepRange"] - if '/' in c.number: - index_keys=["number","date","time","step"] - else: - index_keys=["date","time","step"] - - indexfile=c.inputdir+"/date_time_stepRange.idx" - silentremove(indexfile) - grib=GribTools(inputfiles.files) - iid=grib.index(index_keys=index_keys, index_file = indexfile) - - print 'index done...' - fdict={'10':None,'11':None,'12':None,'13':None,'16':None,'17':None,'19':None,'21':None,'22':None,'20':None} - for f in fdict.keys(): - silentremove(c.inputdir+"/fort."+f) - - index_vals = [] - for key in index_keys: - key_vals = grib_index_get(iid,key) - print key_vals - - index_vals.append(key_vals) - - for prod in product(*index_vals): - for i in range(len(index_keys)): - grib_index_select(iid,index_keys[i],prod[i]) - - - gid = grib_new_from_index(iid) - hid = gid - cflextime = None - for k,f in fdict.iteritems(): - fdict[k] = open(c.inputdir+'/fort.'+k,'w') - if gid is not None: - cdate = str(grib_get(gid, 'date')) - time = grib_get(gid, 'time') - type = grib_get(gid, 'type') - step = grib_get(gid, 'step') -# step = grib_get(gid, 'stepRange') -# cflextime = self.getFlexpartTime(type,step, time) - timestamp=datetime.datetime.strptime(cdate+'{:0>2}'.format(time/100),'%Y%m%d%H') - timestamp+=datetime.timedelta(hours=int(step)) -# print gid,index_keys[i],prod[i],cdate,time,step,timestamp - - cdateH=datetime.datetime.strftime(timestamp,'%Y%m%d%H') - chms=datetime.datetime.strftime(timestamp,'%H%M%S') - - if c.basetime !=None: - slimit=datetime.datetime.strptime(c.start_date+'00','%Y%m%d%H') - bt='23' - if c.basetime=='00': - bt='00' - slimit=datetime.datetime.strptime(c.end_date+bt,'%Y%m%d%H')-datetime.timedelta(hours=12-int(c.dtime)) - - if c.basetime=='12': - bt='12' - slimit=datetime.datetime.strptime(c.end_date+bt,'%Y%m%d%H')-datetime.timedelta(hours=12-int(c.dtime)) - - elimit=datetime.datetime.strptime(c.end_date+bt,'%Y%m%d%H') - - if timestamp<slimit or timestamp>elimit: - continue - else: - if c.maxstep<24: - if cdateH<c.start_date+'00': - continue - if cdateH>c.end_date+'23': - continue - - - - try: - if c.wrf=='1': - if 'olddate' not in locals(): - fwrf = open(c.outputdir+'/WRF'+cdate+'.{:0>2}'.format(time)+'.000.grb2','w') - olddate=cdate[:] - else: - if cdate!=olddate: - fwrf = open(c.outputdir+'/WRF'+cdate+'.{:0>2}'.format(time)+'.000.grb2','w') - olddate=cdate[:] - except AttributeError: - pass - -# print 'cyear '+cyear+'/'+cmonth+'/'+'/EI'+cyear[2:4]+cmonth+cday+cflextime - - savedfields=[] - while 1: - if gid is None: break - paramId = grib_get(gid, 'paramId') - gridtype = grib_get(gid, 'gridType') - datatype = grib_get(gid, 'dataType') - levtype = grib_get(gid, 'typeOfLevel') - if paramId == 133 and gridtype=='reduced_gg': -# Relative humidity (Q.grb) is used as a template only so we need the first we "meet" - fout=open(c.inputdir+'/fort.18','w') - grib_write(gid,fout) - fout.close() - elif paramId == 131 or paramId == 132: - grib_write(gid, fdict['10']) - elif paramId == 130: - grib_write(gid, fdict['11']) - elif paramId == 133 and gridtype!='reduced_gg': - grib_write(gid, fdict['17']) - elif paramId == 152: - grib_write(gid, fdict['12']) - elif paramId == 155 and gridtype=='sh': - grib_write(gid, fdict['13']) - elif paramId in [129,138,155] and levtype=='hybrid' and c.wrf=='1': -# print paramId,'not written' - pass - elif paramId == 246 or paramId == 247: # cloud liquid water and ice - if paramId==246: - clwc=grib_get_values(gid) - else: - clwc+=grib_get_values(gid) - grib_set_values(gid,clwc) -# grib_set(gid,'shortName','qc') - grib_set(gid,'paramId',201031) - grib_write(gid, fdict['22']) - - elif paramId == 135: - grib_write(gid, fdict['19']) - elif paramId == 77: - grib_write(gid, fdict['21']) - else: - if paramId not in savedfields: - grib_write(gid, fdict['16']) - savedfields.append(paramId) - else: - print 'duplicate '+str(paramId)+' not written' - - try: - if c.wrf=='1': - if levtype=='hybrid': - if paramId in [129,130,131,132,133,138,155]: - grib_write(gid,fwrf) - else: - if paramId in wrfpars: - grib_write(gid,fwrf) - except AttributeError: - pass - - - - grib_release(gid) - gid = grib_new_from_index(iid) -# call for CONVERT2 - - for f in fdict.values(): - f.close() - - if hid is not None: - pwd=os.getcwd() - os.chdir(c.inputdir) - if os.stat('fort.21').st_size==0 and int(c.eta)==1: - print 'Parameter 77 (etadot) is missing, most likely it is not available for this type or date/time\n' - print 'Check parameters CLASS, TYPE, STREAM, START_DATE\n' - myerror(c,'fort.21 is empty while parameter eta is set to 1 in CONTROL file') - - p=subprocess.check_call([os.path.expandvars(os.path.expanduser(c.exedir))+'/CONVERT2'],shell=True) - os.chdir(pwd) -# create the corresponding output file fort.15 (generated by CONVERT2) + fort.16 (paramId 167 and paramId 168) - fnout=c.inputdir+'/'+c.prefix - if c.maxstep>12: - suffix=cdate[2:8]+'.{:0>2}'.format(time/100)+'.{:0>3}'.format(step) - else: - suffix=cdateH[2:10] - try: - numberindex=index_keys.index('number') - if len(index_vals[numberindex])>1: - suffix=suffix+'.N{:0>3}'.format(int(prod[numberindex])) - except: - pass - - fnout+=suffix - print "outputfile = " + fnout - self.outputfilelist.append(fnout) # needed for final processing - fout = open(fnout,'wb') - shutil.copyfileobj(open(c.inputdir+'/fort.15','rb'), fout) - if c.cwc=='1': - shutil.copyfileobj(open(c.inputdir+'/fort.22','rb'), fout) - shutil.copyfileobj(open(c.inputdir+'/flux'+cdate[0:2]+suffix,'rb'), fout) - shutil.copyfileobj(open(c.inputdir+'/fort.16','rb'), fout) - orolsm=glob.glob(c.inputdir+'/OG_OROLSM__SL.*.'+c.ppid+'*')[0] - shutil.copyfileobj(open(orolsm,'rb'), fout) - fout.close() - if c.omega=='1': - fnout=c.outputdir+'/OMEGA'+suffix - fout = open(fnout,'wb') - shutil.copyfileobj(open(c.inputdir+'/fort.25','rb'), fout) - - - - try: - if c.wrf=='1': - fwrf.close() - except: - pass - - grib_index_release(iid) - - return - - def deacc_fluxes(self, inputfiles, c): - - table128=init128(c.flexextractdir+'/grib_templates/ecmwf_grib1_table_128') - pars=toparamId(self.params['OG_acc_SL'][0],table128) - if '/' in c.number: - index_keys=["number","date","time","step"] - else: - index_keys=["date","time","step"] - indexfile=c.inputdir+"/date_time_stepRange.idx" - silentremove(indexfile) - grib=GribTools(inputfiles.files) - iid=grib.index(index_keys=index_keys, index_file = indexfile) - - print 'index done...' - - index_vals = [] - for key in index_keys: - key_vals = grib_index_get(iid,key) - print(key_vals) - l=[] - for k in key_vals: - l.append(int(k)) - l.sort() - key_vals=[] - for k in l: - key_vals.append(str(k)) - print key_vals - index_vals.append(key_vals) - - - valsdict={} - svalsdict={} - stepsdict={} - for p in pars: - valsdict[str(p)]=[] - svalsdict[str(p)]=[] - stepsdict[str(p)]=[] - - for prod in product(*index_vals): - for i in range(len(index_keys)): - grib_index_select(iid,index_keys[i],prod[i]) - - #for k,f in fdict.iteritems(): - #fdict[k] = open('fort.'+k,'w') - gid = grib_new_from_index(iid) - hid = gid - cflextime = None - if gid is not None: - cdate = grib_get(gid, 'date') - #cyear = cdate[:4] - #cmonth = cdate[4:6] - #cday = cdate[6:8] - time = grib_get(gid, 'time') - type = grib_get(gid, 'type') - step = grib_get(gid, 'step') - # date+time+step-2*dtime (since interpolated value valid for step-2*dtime) - sdate=datetime.datetime(year=cdate/10000,month=mod(cdate,10000)/100, - day=mod(cdate,100),hour=time/100) - fdate=sdate+datetime.timedelta(hours=step-2*int(c.dtime)) - sdates=sdate+datetime.timedelta(hours=step) - else: - break - - fnout=c.inputdir+'/' - numbersuffix='' - try: - numberindex=index_keys.index('number') - if len(index_vals[numberindex])>1: - numbersuffix='.N{:0>3}'.format(int(prod[numberindex])) - except: - pass - - if c.maxstep>12: - fnout+='flux'+sdate.strftime('%Y%m%d')+'.{:0>2}'.format(time/100)+'.{:0>3}'.format(step-2*int(c.dtime))+numbersuffix - gnout=c.inputdir+'/flux'+sdate.strftime('%Y%m%d')+'.{:0>2}'.format(time/100)+'.{:0>3}'.format(step-int(c.dtime))+numbersuffix - hnout=c.inputdir+'/flux'+sdate.strftime('%Y%m%d')+'.{:0>2}'.format(time/100)+'.{:0>3}'.format(step)+numbersuffix - g=open(gnout,'w') - h=open(hnout,'w') - else: - fnout+='flux'+fdate.strftime('%Y%m%d%H')+numbersuffix - gnout=c.inputdir+'/flux'+(fdate+datetime.timedelta(hours=int(c.dtime))).strftime('%Y%m%d%H')+numbersuffix - hnout=c.inputdir+'/flux'+sdates.strftime('%Y%m%d%H')+numbersuffix - g=open(gnout,'w') - h=open(hnout,'w') - print "outputfile = " + fnout - f=open(fnout,'w') - - while 1: - if gid is None: break - cparamId = str(grib_get(gid, 'paramId')) - step = grib_get(gid, 'step') - atime = grib_get(gid, 'time') - ni=grib_get(gid, 'Ni') - nj=grib_get(gid, 'Nj') - if cparamId in valsdict.keys(): - values = grib_get_values(gid) - vdp=valsdict[cparamId] - svdp=svalsdict[cparamId] - sd=stepsdict[cparamId] - - if cparamId=='142' or cparamId=='143': - fak=1./1000. - else: - fak=3600. - - values=(reshape(values,(nj,ni))).flatten()/fak - vdp.append(values[:]) # save the accumulated values - if c.marsclass.upper() in ('EA') or \ - step<=int(c.dtime): - svdp.append(values[:]/int(c.dtime)) - else: - svdp.append((vdp[-1]-vdp[-2])/int(c.dtime)) - - print cparamId,atime,step,len(values),values[0],std(values) - #svdp.append(values[:]) # save the 1-hourly or 3-hourly specific values - sd.append(step) - if len(svdp)>=3: - if len(svdp)>3: - if cparamId=='142' or cparamId=='143': - values=darain(svdp) - else: - values=dapoly(svdp) - - if not (step==c.maxstep and c.maxstep>12 or sdates==elimit): - vdp.pop(0) - svdp.pop(0) - else: - if c.maxstep>12: - values=svdp[1] - else: - values=svdp[0] - - grib_set_values(gid, values) - if c.maxstep>12: - grib_set(gid,'stepRange',max(0,step-2*int(c.dtime))) - else: - grib_set(gid,'stepRange',0) - grib_set(gid,'time',fdate.hour*100) - grib_set(gid,'date',fdate.year*10000+fdate.month*100+fdate.day) - grib_write(gid, f) - - if c.basetime is not None: - elimit=datetime.datetime.strptime(c.end_date+c.basetime,'%Y%m%d%H') - else: - elimit=sdate+datetime.timedelta(2*int(c.dtime)) - - # squeeze out information of last two steps contained in svdp - # if step+int(c.dtime)==c.maxstep and c.maxstep>12 or sdates+datetime.timedelta(hours=int(c.dtime))>=elimit: - # Note that svdp[0] has not been popped in this case - - - if step==c.maxstep and c.maxstep>12 or sdates==elimit: - values=svdp[3] - grib_set_values(gid, values) - grib_set(gid,'stepRange',0) - truedatetime=fdate+datetime.timedelta(hours=2*int(c.dtime)) - grib_set(gid,'time',truedatetime.hour*100) - grib_set(gid,'date',truedatetime.year*10000+truedatetime.month*100+truedatetime.day) - grib_write(gid, h) - - #values=(svdp[1]+svdp[2])/2. - if cparamId=='142' or cparamId=='143': - values=darain(list(reversed(svdp))) - else: - values=dapoly(list(reversed(svdp))) - - grib_set(gid,'stepRange',0) - truedatetime=fdate+datetime.timedelta(hours=int(c.dtime)) - grib_set(gid,'time',truedatetime.hour*100) - grib_set(gid,'date',truedatetime.year*10000+truedatetime.month*100+truedatetime.day) - grib_set_values(gid, values) - grib_write(gid, g) - - grib_release(gid) - - gid = grib_new_from_index(iid) - - f.close() - g.close() - h.close() - - - grib_index_release(iid) diff --git a/python/GribTools.py b/python/GribTools.py deleted file mode 100644 index 2fa20fd803b5a7718a1311971aa0ae90874176a4..0000000000000000000000000000000000000000 --- a/python/GribTools.py +++ /dev/null @@ -1,141 +0,0 @@ -# -# (C) Copyright 2014 UIO. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# -# Creation: July 2014 - Anne Fouilloux - University of Oslo -# -# - -from gribapi import * -import traceback -import sys,os - - -############################################################## -# GRIB utilities -############################################################## -class GribTools: - 'class for GRIB API with new methods' - def __init__(self,filename): - self.filename=filename - -# get keyvalues for a given list of keynames -# a where statment can be given (list of key and list of values) - - def getkeys(self,keynames,wherekeynames=[],wherekeyvalues=[]): - fileid=open(self.filename,'r') - - return_list=[] - - while 1: - gid_in = grib_new_from_file(fileid) - if gid_in is None: break - select=True - i=0 - if len(wherekeynames) != len(wherekeyvalues): raise Exception("Give a value for each keyname!") - - for wherekey in wherekeynames: - if not grib_is_defined(gid_in, wherekey): raise Exception("where Key was not defined") - select=select and (str(wherekeyvalues[i])==str(grib_get(gid_in, wherekey))) - i=i+1 - if select: - llist = [] - for key in keynames: - llist.extend([str(grib_get(gid_in, key))]) - return_list.append(llist) - grib_release(gid_in) - fileid.close() - return return_list - -# set keyvalues for a given list of keynames -# a where statment can be given (list of key and list of values) -# an input file must be given as an input for reading grib messages -# note that by default all messages are written out -# if you want to get only those meeting the where statement, use -# strict=true - def setkeys(self,fromfile,keynames,keyvalues, wherekeynames=[],wherekeyvalues=[], strict=False, filemode='w'): - fout=open(self.filename,filemode) - fin=open(fromfile) - - while 1: - gid_in = grib_new_from_file(fin) - if gid_in is None: break - - select=True - i=0 - if len(wherekeynames) != len(wherekeyvalues): raise Exception("Give a value for each keyname!") - - for wherekey in wherekeynames: - if not grib_is_defined(gid_in, wherekey): raise Exception("where Key was not defined") - select=select and (str(wherekeyvalues[i])==str(grib_get(gid_in, wherekey))) - i=i+1 - if select: - i=0 - for key in keynames: - grib_set(gid_in, key, keyvalues[i]) - i=i+1 - if strict: - if select: - grib_write(gid_in,fout) - else: - grib_write(gid_in,fout) - grib_release(gid_in) - fin.close() - fout.close() - -# Add the content of a grib file but only messages -# corresponding to keys/values -# if selectWhere is False select fields that are different from keynames/keyvalues - def copy(self,filename_in, selectWhere=True, keynames=[], keyvalues=[],filemode='w'): - fin=open(filename_in) - fout=open(self.filename,filemode) - - while 1: - gid_in = grib_new_from_file(fin) - if gid_in is None: break - - select=True - i=0 - if len(keynames) != len(keyvalues): raise Exception("Give a value for each keyname!") - - for key in keynames: - if not grib_is_defined(gid_in, key): raise Exception("Key was not defined") - - if selectWhere: - select=select and (str(keyvalues[i])==str(grib_get(gid_in, key))) - else: - select=select and (str(keyvalues[i])!=str(grib_get(gid_in, key))) - i=i+1 - if select: - grib_write(gid_in,fout) - grib_release(gid_in) - fin.close() - fout.close() - -# Create index from a list of files if it does not exist or read it - def index(self,index_keys=["mars"], index_file = "my.idx"): - print "index to be done" - self.iid = None - - if (os.path.exists(index_file)): - self.iid = grib_index_read(index_file) - print "Use existing index file: %s "%(index_file) - else: - for file in self.filename: - print "Inputfile: %s "%(file) - if self.iid == None: - self.iid = grib_index_new_from_file(file,index_keys) - else: - grib_index_add_file(self.iid,file) - - if self.iid != None: - grib_index_write(self.iid,index_file) - return self.iid - - - - - diff --git a/python/README.md b/python/README.md deleted file mode 100644 index bce34397e9ba5645e87e04435809901a0fa89bae..0000000000000000000000000000000000000000 --- a/python/README.md +++ /dev/null @@ -1,295 +0,0 @@ -#README - -This documentation shows how to install and use the ***flex_extract*** software package to extract ECMWF data and generate the ***FLEXPART*** specific input files. - -Introduction -================= - -To run ***FLEXPART*** with ECMWF data, you first need to retrieve ECMWF GRIB fields and generate ***FLEXPART*** specific input files afterwards. ***FLEXPART*** needs the GRIB data seperated by time so that ***flex_extract*** will combine all data in output files seperated for each time step. The format of these output filenames looks like: `prefixYYMMDDHH`, where prefix can be defined in ***flex_extract*** (usually it should be limited to "2" characters because of further processing reasons). - -There are 4 different modes of running ***flex_extract*** : -1. Remote (**): ***flex_extract*** is installed and executed directly on the ECMWF Linux member state server ecgate. Users have to be a registered member-state user. -2. Gateway (**): ***flex_extract*** is installed on a local machine and the scripts are submitted to ECMWF -computer facilities via a member-state gateway server. Users have to be a registered member-state user. -3. Local member state (**): ***flex_extract*** is installed and executed on a local machine. Users have to be a registered member-state user. -4. Local public (***): ***flex_extract*** is installed and executed on a local machine. Users do not have to be a member-state user. A normal registration at the ECMWF website is enough. See also the instruction to install the ECMWF Web API - -*(\*\*) To get a ms (member-state) user access, users have to be a resident of a [member state](https://www.ecmwf.int/en/about/who-we-are/member-states) and have to contact their national meteorological center for granting access.* - -*(\*\*\*) To get a public user account, the user can just register at the ECMWF website following the instructions [here](https://software.ecmwf.int/wiki/display/WEBAPI/ECMWF+Web+API+Home)!* - -For setting up a complete ***FLEXPART*** environment it is recommended to build a directory structure such as: - -  - -For installation instructions and usage of ***FLEXPART*** please see ***FLEXPART***-Documentation! - -Data sets archived at ECMWF -=========================== - -There are two modes for accessing ECMWF data sets: the **_full access_** and the **_public access_** mode. -A description of these two modes and links to the available data sets is available here: https://www.ecmwf.int/en/forecasts/datasets/archive-datasets - -#### Important note for public users - -If you want to extract public data sets from the ECMWF servers you first have to register at the ECMWF. Do this by following the instructions at: https://software.ecmwf.int/wiki/display/WEBAPI/Access+MARS - -Afterwards you **_need to accept the licenses_** of the data sets you want to extract: - -https://software.ecmwf.int/wiki/display/WEBAPI/Available+ECMWF+Public+Datasets - -Now your able to use ***flex_extract*** in public mode (command line parameter "*--public=1*"). - -Installation -=================== - -### Some important notes for the installation process: -- Use the same compiler and compiler version for all libraries and the fortran program. -- Don't forget to set all library paths to the LD_LIBRARY_PATH variable. -- Don't forget to adapt the makefile for the Fortran program. - -### Requirements ### - -| Python Support | Link | Notes | -| --------------------- |:----------------------:|:-------------------------| -| python | [http://www.python.org](http://www.python.org) | We have used [Anaconda python](https://store.continuum.io/cshop/anaconda/) for our testing | -| python-numpy | [http://www.numpy.org/](http://www.numpy.org/) | Not necessary if you have installed python Anaconda -| ecmwfapi | [https://software.ecmwf.int/wiki/display/WEBAPI/ECMWF+Web+API+Home](https://software.ecmwf.int/wiki/display/WEBAPI/ECMWF+Web+API+Home) | You also need to install your API key (as explained in the documentation) - -| Utilities | Link | Notes | -| --------------------- |:----------------------:|:-------------------------| -|gfortran|[https://gcc.gnu.org/wiki/GFortran](https://gcc.gnu.org/wiki/GFortran)| Make sure that you are using the same compiler version for all libraries in connection with flex_extract, GRIB_API and FLEXPART, otherwise you will have problems.| -| grib-api or eccodes | [https://software.ecmwf.int/wiki/display/GRIB/Home](https://software.ecmwf.int/wiki/display/GRIB/Home) / [https://software.ecmwf.int/wiki/display/ECC](https://software.ecmwf.int/wiki/display/ECC) | Make sure you install grib_api/eccodes with JPEG support and python.| -|FFTW|[http://www.fftw.org](http://www.fftw.org)|This is needed by the Emos library, as is mentioned in the installation instructions for Emos| -| Emos | [https://software.ecmwf.int/wiki/display/EMOS/Emoslib](https://software.ecmwf.int/wiki/display/EMOS/Emoslib) | Make sure you carefully read the instructions and have installed the FFTW package before installing Emos.| -| CONVERT2 | |to run prepareFLEXPART.py, you need to compile the Fortran program CONVERT2 (located in the src directory). See separate README file in this directory to get instructions on how to compile this code.| - -### Prepare the environment for using ***flex_extract*** on a local machine - -Please follow the instructions on the websites of the libraries. The installation of these libraries can be done by package installation or from scratch, for either case it is useful to consider the official documentation (and also the hints from the ECMWF) rather than trying to explain every detail in here. Nevertheless, we recommend doing the installation in the following order (see links to the libraries in the table above): - -1. Read Emoslib installation instructions. -2. Read ECMWF blog about gfortran (https://software.ecmwf.int/wiki/display/SUP/2015/05/11/Building+ECMWF+software+with+gfortran). -3. Install FFTW. -4. Install EMOSLIB (Hint: Apply make 2 times! One time without any options and one time with single precision option.). -5. Install ECCODES OR GRIB_API (for python and fortran). ECCODES is downward compatible with GRIB_API and GRIB_API support will expire at the end of 2018. -6. Register at Mars (see link to ecmwfapi). -7. Install ECMWF_WEBAPI. -8. Check LD_LIBRARY_PATH environment variable if it contains all paths to the libs. -9. Check available python packages (e.g. check in python console the commands: import eccodes / import grib_api / import ecmwfapi) -10. Start a simple test retrieval (following the instructions at ECMWF Web API website). -11. Install ***flex_extract*** (see next section). - -### Installation of ***flex_extract*** - -To install ***flex_extract*** you have to go to the python directory and call the `install.py` script. It has the following options: - -``` -usage: install.py [-h] [--target INSTALL_TARGET] [--makefile MAKEFILE] - [--ecuid ECUID] [--ecgid ECGID] [--gateway GATEWAY] - [--destination DESTINATION] - [--flexpart_root_scripts FLEXPART_ROOT_SCRIPTS] - [--job_template JOB_TEMPLATE] [--controlfile CONTROLFILE] - -Install flex_extract software locally or on ECMWF machines - -optional arguments: - -h, --help show this help message and exit - --target INSTALL_TARGET - Valid targets: local | ecgate | cca , the latter two - are at ECMWF (default: None) - --makefile MAKEFILE Name of Makefile to use for compiling CONVERT2 - (default: None) - --ecuid ECUID user id at ECMWF (default: None) - --ecgid ECGID group id at ECMWF (default: None) - --gateway GATEWAY name of local gateway server (default: None) - --destination DESTINATION - ecaccess destination, e.g. leo@genericSftp (default: - None) - --flexpart_root_scripts FLEXPART_ROOT_SCRIPTS - FLEXPART root directory on ECMWF servers (to find - grib2flexpart and COMMAND file) Normally flex_extract - resides in the scripts directory of the FLEXPART - distribution, thus the: (default: None) - --job_template JOB_TEMPLATE - job template file for submission to ECMWF (default: - job.temp.o) - --controlfile CONTROLFILE - file with control parameters (default: CONTROL.temp) -``` - - -#### Local installation of ***flex_extract*** (***flex_extract*** modes 1 (on ECMWF servers), 3 and 4) - ---- - -For a local installation of ***flex_extract*** the user has to adapt the makefile for the Fortran program first. Set the paths to the grib_api or eccodes library and emoslib. Then the installation script should be called as follows: - -``` -./install.py --target=local --makefile=Makefile.local.gfortan -``` - -where the makefile name can differ if the user prepared another makefile for his environment. -On ECMWF servers a makefile named "Makefile.gfortran" is already provided in the "src"-directory. It is also the default makefile, so that the parameter does not have to be set when calling "install.py". - -If the ***flex_extract*** is to be installed within a ***FLEXPART*** environment it should be called with the parameter `flexpart_root_scripts` to let ***flex_extract*** know about the path to ***FLEXPART***. - -The installation was successful if the compilation of the Fortran program ``CONVERT2`` didn't fail and is displayed in the terminal. - -#### Installation using a gateway server (***flex_extract*** mode 2 only) - ---- - -If the user has a gateway server and the Ecaccess toolkit available, ***flex_extract*** can be installed such that it is executed on the local machine and a job script is submitted to the ECMWF server. The final ***FLEXPART*** input files are then send back via the Ecaccess command line tool "ectrans". To use this tool, the user has to create an association directly on the local gateway server via the localhost ecaccess.ecmwf.int and provide the association name as the "destination"-parameter when calling "install.py". - -The gateway server has to be registered at ECMWF. For information about a gateway server see: -- https://software.ecmwf.int/wiki/display/ECAC/Releases+-+Gateway+package -- and the Software Installation Plan (SIP.pdf) in the docs/ directory. - -Afterwards ***flex_extract*** can be installed with the following command: -``` -./install.py --target=local --makefile=Makefile.gfortan --ecuid=<id> --ecgid=<gid> --gateway=<servername> --destination=<destinationname> -``` - -If the installation was successful the user gets an email with a success note! - - -Using ***flex_extract*** -=================== - -This section provides the absolut basics on how ***flex_extract*** is to be used. For more information about possible settings, performance, parameter combinations and so one, the user is referred to the SIP.pdf and SUT.pdf documents and the www.flexpart.eu community website. It is also possible to ask for help by writing to the ***FLEXPART*** user email list (registration needed) or by creating a ticket on the community website. - -#### CONTROL file - -***flex_extract*** is controlled by providing "CONTROL"-files with a list of parameter settings. These parameter are described in detail in the *Software User Tutorial (SUT.pdf)*. -The "CONTROL"-files specifies which ECMWF data set is to be retrieved, the time and spatial resolution, the format of the grib file and many more. In the `python` directory are some example `CONTROL` files for the different data sets and access modes which can be retrieved with ***flex_extract***: - -``` -CONTROL_CERA -CONTROL_CV -CONTROL_EA5.public -CONTROL_FC.pure -CONTROL_OD.highres.gauss -CONTROL_CERA.public -CONTROL_EA5 -CONTROL_EI.global -CONTROL_FC.twiceaday -CONTROL_OPS.4V -CONTROL_CF -CONTROL_EA5.highres -CONTROL_EI.public -CONTROL_OD.highres.eta -CONTROL.temp -``` - -For information about all the possible parameter settings and explanation, please see the SUT.pdf document in the `docs/` directory. - -`CONTROL`-files with a `.public` ending is usable for the public access mode. The main difference is the parameter ``dataset`` which explicitly specifies the public data sets. Additionally, not all meteorological fields and times were archived in the public data sets and are considered in the public `CONTROL`-files. - -#### Python scripts - -* `submit.py` - -This is the main program for doing both, retrieving ECMWF data and generating the ***FLEXPART*** input files. It combines the two sub-programs `getMARSdata.py` and `prepareFLEXPART.py` which can also be run by themselves for debugging purposes. -Use the `-h` option to get the parameter options: - -``` -usage: submit.py [-h] [--start_date START_DATE] [--end_date END_DATE] - [--date_chunk DATE_CHUNK] [--basetime BASETIME] [--step STEP] - [--levelist LEVELIST] [--area AREA] [--inputdir INPUTDIR] - [--outputdir OUTPUTDIR] - [--flexpart_root_scripts FLEXPART_ROOT_SCRIPTS] [--ppid PPID] - [--job_template JOB_TEMPLATE] [--queue QUEUE] - [--controlfile CONTROLFILE] [--debug DEBUG] [--public PUBLIC] - -Retrieve FLEXPART input from ECMWF MARS archive - -optional arguments: - -h, --help show this help message and exit - --start_date START_DATE - start date YYYYMMDD (default: None) - --end_date END_DATE end_date YYYYMMDD (default: None) - --date_chunk DATE_CHUNK - # of days to be retrieved at once (default: None) - --basetime BASETIME base such as 00/12 (for half day retrievals) (default: - None) - --step STEP steps such as 00/to/48 (default: None) - --levelist LEVELIST Vertical levels to be retrieved, e.g. 30/to/60 - (default: None) - --area AREA area defined as north/west/south/east (default: None) - --inputdir INPUTDIR root directory for storing intermediate files - (default: None) - --outputdir OUTPUTDIR - root directory for storing output files (default: - None) - --flexpart_root_scripts FLEXPART_ROOT_SCRIPTS - FLEXPART root directory (to find grib2flexpart and - COMMAND file) Normally flex_extract resides in the - scripts directory of the FLEXPART distribution - (default: None) - --ppid PPID Specify parent process id for rerun of prepareFLEXPART - (default: None) - --job_template JOB_TEMPLATE - job template file for submission to ECMWF (default: - job.temp) - --queue QUEUE queue for submission to ECMWF (e.g. ecgate or cca ) - (default: None) - --controlfile CONTROLFILE - file with control parameters (default: CONTROL.temp) - --debug DEBUG Debug mode - leave temporary files intact (default: 0) - --public PUBLIC Public mode - retrieves the public datasets (default: - 0) -``` - -*Optional arguments are listed in squared brackets.* - - -* `getMARSdata.py` - -This program retrieves the ECMWF data from ECMWF servers using [ECMWF WebApi](https://software.ecmwf.int/wiki/display/WEBAPI/ECMWF+Web+API+Home) or [Mars](https://software.ecmwf.int/wiki/display/UDOC/MARS+user+documentation), depending on your user status and your selection of the running mode. It requires the `ECMWF WebApi` python library (see Requirements below). Check with your local IT group as it may be already available. - - -* `prepareFLEXPART.py` - -This program generates FLEXPART input files from the retrieved meteorological fields. It requires python interface to grib_api or eccodes and the Fortran program `CONVERT2` (located in `src` directory). `CONVERT2` needs a namelist which is generated from the python program. - -#### execute flex_extract locally (member-state user) - -Almost every command line parameter for the `submit.py` script call has a default value or is read from the specified `CONTROL` file. -Therefore, for a local extraction of ERA-Interim data as a member-state user the script can be called simply by passing a `CONTROL` file and a starting date with the following command: -``` -./submit.py --controlfile=CONTROL_EI.global --start_date=20101201 -``` -If there was just a starting date without an end date, ***flex_extract*** retrieves just this one day of meteorological data. The `CONTROL_EI.global` file has a set of default values which needs to be adjusted regarding users needs. It is also possible to set the dates within the `CONTROL`-file instead of passing it via command line parameter. - - -#### execute flex_extract locally (public user) - -As a public user one has to use the `CONTROL` file with the `.public` extension and the parameter `public`: -``` -./submit.py --controlfile=CONTROL_EI.public --start_date=20101201 --public=1 -``` -Otherwise, except of the different data available, the usage of ***flex_extract*** is the same as for member-state users. - -#### execute flex_extract via gateway server - -If ***flex_extract*** was installed via a gateway server and a file "*ECMWF_ENV*" is available in the ``python``-directory, the ``submit.py`` script can be called with the `--queue` option. A job script is then prepared and submitted to the ECMWF server (in this case, "ecgate") . - -``` -./submit.py --queue=ecgate --controlfile=CONTROL_EI.global --start_date=20101201 -``` - -The job status can then be checked by typing: -```` -ecaccess-job-list -```` - -If the parameters *ecuid*, *ecgid*, *gateway* and *destination* were set correctly during installation and the gateway server is running, the resulting ***FLEXPART*** input files can be directly transferred to the local gateway by setting the paramter ``ectrans`` in the ``CONTROL``-file to ``1``. - -Regardless of the job being successful or not, the user will receive an email with the log messages. - -# Installation FAQ - - - - diff --git a/python/UIOTools.py b/python/UIOTools.py deleted file mode 100644 index f469d9d3a19bb1dc4866ef86e2920fc167237b72..0000000000000000000000000000000000000000 --- a/python/UIOTools.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python -# -# (C) Copyright 2014 UIO. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# Creation: October 2014 - Anne Fouilloux - University of Oslo -# - -import os -import glob - -class UIOFiles: - 'class to manipulate files' - def __init__(self,suffix): -# type of files to manipulate such as ['.grib', 'grb', 'grib1', 'grib2', 'grb1','grb2'] - self.suffix=suffix - - def listFiles(self,pathname,pattern): - ''' list files (suffix previously given) within this directory. ''' - # Get the absolute path of the pathname parameter - pathname = os.path.abspath(pathname) - - # Get a list of files in pathname - filesInCurDir0 = glob.glob(pathname+'/'+pattern) - filesInCurDir=[] - for f in filesInCurDir0: - filesInCurDir.append(f.split('/')[-1]) - self.counter = 0 - self.files = [] - # Traverse through all files - for file in filesInCurDir: - curFile = os.path.join(pathname, file) - - # Check if it's a normal file or directory - if os.path.isfile(curFile): - # Get the file extension - fileNoExt,curFileExtension = os.path.splitext(curFile) - # Check if the file has an extension of typical video files - if curFileExtension in self.suffix: - # We have got a file file! Increment the counter - self.counter += 1 - # add this filename in the list - self.files.append(curFile) - - else: - # We got a directory, enter into it for further processing - self.listFiles(curFile) - - return diff --git a/python/getMARSdata.py b/python/getMARSdata.py deleted file mode 100755 index 43af2702d390aa193e82cee254a22182c0d1f2d2..0000000000000000000000000000000000000000 --- a/python/getMARSdata.py +++ /dev/null @@ -1,179 +0,0 @@ -#!/usr/bin/env python -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# Functionality provided: Prepare input 3D-wind fields in hybrid coordinates + surface fields for FLEXPART runs -# -# Creation: October 2014 - Anne Fouilloux - University of Oslo -# Extension November 2015 - Leopold Haimberger - University of Vienna for: -# - using the WebAPI also for general MARS retrievals -# - job submission on ecgate and cca -# - job templates suitable for twice daily operational dissemination -# - dividing retrievals of longer periods into digestable chunks -# - retrieve also longer term forecasts, not only analyses and short term forecast data -# - conversion into GRIB2 -# - conversion into .fp format for faster execution of FLEXPART -# -# -# Further documentation may be obtained from www.flexpart.eu -# -# Requirements: -# in addition to a standard python 2.6 or 2.7 installation the following packages need to be installed -# ECMWF WebMARS, gribAPI with python enabled, emoslib, ecaccess web toolkit, all available from https://software.ecmwf.int/ -# dateutils -# matplotlib (optional, for debugging) -# -# Get MARS GRIB fields from ECMWF for FLEXPART -# - -#import socket - -#hostname=socket.gethostname() -#ecapi= 'ecmwf' not in hostname -try: - ecapi=True - import ecmwfapi -except ImportError: - ecapi=False - -import calendar -import shutil -import datetime -import time -import os,glob,sys,inspect -#from string import strip -from argparse import ArgumentParser,ArgumentDefaultsHelpFormatter -# add path to submit.py to pythonpath so that python finds its buddies -localpythonpath=os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) -if localpythonpath not in sys.path: - sys.path.append(localpythonpath) - -from FlexpartTools import MARSretrieval, EIFlexpart, silentremove, \ - Control,myerror,normalexit, interpret_args_and_control - - -def getMARSdata(args,c): - - if not os.path.exists(c.inputdir): - os.makedirs(c.inputdir) - - - if c.request == 0: - print("Retrieving EC data!") - else: - if c.request == 1: - print("Printing mars requests!") - elif c.request == 2: - print("Retrieving EC data and printing mars request!") - # first, write header with the mars parameter to file - # create a dummy MarsRetrieval to get parameter - MR = MARSretrieval(None, None) - attrs = vars(MR).copy() - del attrs['server'] - del attrs['public'] - marsfile = os.path.join(c.inputdir, 'mars_requests.csv') - with open(marsfile, 'w') as f: - f.write('request_number' + ', ') - f.write(', '.join(str(key) for key in sorted(attrs.iterkeys()))) - f.write('\n') - - print "start date %s "%(c.start_date) - print "end date %s "%(c.end_date) - - if ecapi: - if int(c.public): - server = ecmwfapi.ECMWFDataServer() - else: - server = ecmwfapi.ECMWFService("mars") - else: - server = False - - c.ecapi=ecapi - print 'ecapi:',c.ecapi -# Retrieve ERA interim data for running flexpart - - syear=int(c.start_date[:4]) - smonth=int(c.start_date[4:6]) - sday=int(c.start_date[6:]) - start = datetime.date( year = syear, month = smonth, day = sday ) - startm1=start- datetime.timedelta(days=1) - if c.basetime=='00': - start=startm1 - eyear=int(c.end_date[:4]) - emonth=int(c.end_date[4:6]) - eday=int(c.end_date[6:]) - - end = datetime.date( year = eyear, month = emonth, day = eday ) - if c.basetime=='00' or c.basetime=='12': - endp1=end+ datetime.timedelta(days=1) - else: - endp1=end+ datetime.timedelta(days=2) - - datechunk=datetime.timedelta(days=int(c.date_chunk)) - if c.request == 0 or c.request == 2: - print 'removing content of '+c.inputdir - tobecleaned=glob.glob(c.inputdir+'/*_acc_*.'+str(os.getppid())+'.*.grb') - for f in tobecleaned: - os.remove(f) - - times=None - if c.maxstep<=24: - day=startm1 - while day<endp1: - # we need to retrieve MARS data for this period (maximum one month) - flexpart = EIFlexpart(c,fluxes=True) - if day+datechunk-datetime.timedelta(days=1)<endp1: - dates= day.strftime("%Y%m%d") + "/to/" + (day+datechunk-datetime.timedelta(days=1)).strftime("%Y%m%d") - else: - dates= day.strftime("%Y%m%d") + "/to/" + end.strftime("%Y%m%d") - - print "retrieve " + dates + " in dir " + c.inputdir - try: - flexpart.retrieve(server, c.public, dates, c.request, times, c.inputdir) - except IOError: - myerror(c,'MARS request failed') - - day+=datechunk - else: - day=start - while day<=end: - # we need to retrieve MARS data for this period (maximum one month) - flexpart = EIFlexpart(c,fluxes=True) - if day+datechunk-datetime.timedelta(days=1)<end: - dates= day.strftime("%Y%m%d") + "/to/" + (day+datechunk-datetime.timedelta(days=1)).strftime("%Y%m%d") - else: - dates= day.strftime("%Y%m%d") + "/to/" + end.strftime("%Y%m%d") - - print "retrieve " + dates + " in dir " + c.inputdir - flexpart.retrieve(server, c.public, dates, c.request, times, c.inputdir) - day+=datechunk - - - if c.request == 0 or c.request == 2: - print 'removing content of '+c.inputdir - tobecleaned=glob.glob(c.inputdir+'/*__*.'+str(os.getppid())+'.*.grb') - for f in tobecleaned: - os.remove(f) - - day=start - times=None - while day<=end: - - # we need to retrieve MARS data for this period (maximum one month) - flexpart = EIFlexpart(c) - if day+datechunk-datetime.timedelta(days=1)<end: - dates= day.strftime("%Y%m%d") + "/to/" + (day+datechunk-datetime.timedelta(days=1)).strftime("%Y%m%d") - else: - dates= day.strftime("%Y%m%d") + "/to/" + end.strftime("%Y%m%d") - print "retrieve " + dates + " in dir " + c.inputdir - - flexpart.retrieve(server, c.public, dates, c.request, times, c.inputdir) - day+=datechunk - - -if __name__ == "__main__": - - args,c=interpret_args_and_control() - getMARSdata(args,c) - normalexit(c) diff --git a/python/install.py b/python/install.py deleted file mode 100755 index f028ec973f3156d5ad46bf336e96a35ad1fca93d..0000000000000000000000000000000000000000 --- a/python/install.py +++ /dev/null @@ -1,197 +0,0 @@ -#!/usr/bin/env python -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# Functionality provided: Prepare input 3D-wind fields in hybrid coordinates + surface fields for FLEXPART runs -# -# Creation: October 2014 - Anne Fouilloux - University of Oslo -# Extension November 2015 - Leopold Haimberger - University of Vienna for: -# - using the WebAPI also for general MARS retrievals -# - job submission on ecgate and cca -# - job templates suitable for twice daily operational dissemination -# - dividing retrievals of longer periods into digestable chunks -# - retrieve also longer term forecasts, not only analyses and short term forecast data -# - conversion into GRIB2 -# - conversion into .fp format for faster execution of FLEXPART -# -# -# Further documentation may be obtained from www.flexpart.eu -# -# Requirements: -# in addition to a standard python 2.6 or 2.7 installation the following packages need to be installed -# ECMWF WebMARS, gribAPI with python enabled, emoslib, ecaccess web toolkit, all available from https://software.ecmwf.int/ -# dateutils -# matplotlib (optional, for debugging) -# -# -import calendar -import shutil -import datetime -import time -import os,sys,glob -import subprocess -import inspect -# add path to submit.py to pythonpath so that python finds its buddies -localpythonpath=os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) -sys.path.append(localpythonpath) -from UIOTools import UIOFiles -from string import strip -from argparse import ArgumentParser,ArgumentDefaultsHelpFormatter -from GribTools import GribTools -from FlexpartTools import EIFlexpart, Control, install_args_and_control -from getMARSdata import getMARSdata -from prepareFLEXPART import prepareFLEXPART - - - -def main(): - - calledfromdir=os.getcwd() - os.chdir(localpythonpath) - args,c=install_args_and_control() -# if c.outputdir[0]!='/': -# c.outputdir=os.path.join(calledfromdir,c.outputdir) -# c.inputdir=c.outputdir - if args.install_target!=None: - install_via_gateway(c,args.install_target) - - else: - print 'Please specify installation target (local|ecgate|cca)' - print 'use -h or --help for help' - sys.exit() - -def install_via_gateway(c,target): - - ecd=c.flexextractdir - template=ecd+'python/compilejob.temp' - job=ecd+'python/compilejob.ksh' - fo=open(job,'w') - with open(template) as f: - fdata = f.read().split('\n') - for data in fdata: - if 'MAKEFILE=' in data: - if c.makefile is not None: - data='export MAKEFILE='+c.makefile - if 'FLEXPART_ROOT_SCRIPTS=' in data: - if c.flexpart_root_scripts!='../': - data='export FLEXPART_ROOT_SCRIPTS='+c.flexpart_root_scripts - else: - data='export FLEXPART_ROOT_SCRIPTS=$HOME' - if target.lower()!='local': - if '--workdir' in data: - data='#SBATCH --workdir=/scratch/ms/'+c.ecgid+'/'+c.ecuid - if '##PBS -o' in data: - data='##PBS -o /scratch/ms/'+c.ecgid+'/'+c.ecuid+'flex_ecmwf.$Jobname.$Job_ID.out' - if 'FLEXPART_ROOT_SCRIPTS=' in data: - if c.ec_flexpart_root_scripts!='../': - data='export FLEXPART_ROOT_SCRIPTS='+c.ec_flexpart_root_scripts - else: - data='export FLEXPART_ROOT_SCRIPTS=$HOME' - - fo.write(data+'\n') - f.close() - fo.close() - - if target.lower()!='local': - template=ecd+'python/job.temp.o' - with open(template) as f: - fdata = f.read().split('\n') - f.close() - fo=open(template[:-2],'w') - for data in fdata: - if '--workdir' in data: - data='#SBATCH --workdir=/scratch/ms/'+c.ecgid+'/'+c.ecuid - if '##PBS -o' in data: - data='##PBS -o /scratch/ms/'+c.ecgid+'/'+c.ecuid+'flex_ecmwf.$Jobname.$Job_ID.out' - if 'export PATH=${PATH}:' in data: - data+=c.ec_flexpart_root_scripts+'/flex_extract_v7.0.4/python' - - if 'cat>>' in data or 'cat >>' in data: - i=data.index('>') - fo.write(data[:i]+data[i+1:]+'\n') - fo.write('GATEWAY '+c.gateway+'\n') - fo.write('DESTINATION '+c.destination+'\n') - fo.write('EOF\n') - - fo.write(data+'\n') - fo.close() - - job=ecd+'python/ECMWF_ENV' - fo=open(job,'w') - fo.write('ECUID '+c.ecuid+'\n') - fo.write('ECGID '+c.ecgid+'\n') - fo.write('GATEWAY '+c.gateway+'\n') - fo.write('DESTINATION '+c.destination+'\n') - fo.close() - - - - if target.lower()=='local': - # compile CONVERT2 - if c.flexpart_root_scripts==None or c.flexpart_root_scripts=='../': - print 'Warning: FLEXPART_ROOT_SCRIPTS has not been specified' - print 'Only CONVERT2 will be compiled in '+ecd+'/../src' - else: - c.flexpart_root_scripts=os.path.expandvars(os.path.expanduser(c.flexpart_root_scripts)) - if os.path.abspath(ecd)!=os.path.abspath(c.flexpart_root_scripts): - os.chdir('/') - p=subprocess.check_call(['tar','-cvf',ecd+'../flex_extract_v7.0.4.tar',ecd+'python',ecd+'grib_templates',ecd+'src']) - try: - os.makedirs(c.flexpart_root_scripts+'/flex_extract_v7.0.4') - except: - pass - os.chdir(c.flexpart_root_scripts+'/flex_extract_v7.0.4') - p=subprocess.check_call(['tar','-xvf',ecd+'../flex_extract_v7.0.4.tar']) - os.chdir(c.flexpart_root_scripts+'/flex_extract_v7.0.4/src') - - os.chdir('../src') - print 'install flex_extract_v7.0.4 software on '+target+' in directory '+os.getcwd() - if c.makefile==None: - makefile='Makefile.local.ifort' - else: - makefile=c.makefile - flist=glob.glob('*.mod')+glob.glob('*.o') - if flist: - p=subprocess.check_call(['rm']+flist) - try: - print 'Using makefile: '+makefile - p=subprocess.check_call(['make','-f',makefile]) - p=subprocess.check_call(['ls','-l','CONVERT2']) - except: - print 'compile failed - please edit '+makefile+' or try another Makefile in the src directory.' - print 'most likely GRIB_API_INCLUDE_DIR, GRIB_API_LIB and EMOSLIB must be adapted.' - print 'Available Makefiles:' - print glob.glob('Makefile*') - - elif target.lower()=='ecgate': - os.chdir('/') - p=subprocess.check_call(['tar','-cvf',ecd+'../flex_extract_v7.0.4.tar',ecd+'python',ecd+'grib_templates',ecd+'src']) - try: - p=subprocess.check_call(['ecaccess-file-put',ecd+'../flex_extract_v7.0.4.tar','ecgate:/home/ms/'+c.ecgid+'/'+c.ecuid+'/flex_extract_v7.0.4.tar']) - except: - print 'ecaccess-file-put failed! Probably the eccert key has expired.' - exit(1) - p=subprocess.check_call(['ecaccess-job-submit','-queueName',target,ecd+'python/compilejob.ksh']) - print 'compilejob.ksh has been submitted to ecgate for installation in '+c.ec_flexpart_root_scripts+'/flex_extract_v7.0.4' - print 'You should get an email with subject flexcompile within the next few minutes' - elif target.lower()=='cca': - os.chdir('/') - p=subprocess.check_call(['tar','-cvf',ecd+'../flex_extract_v7.0.4.tar',ecd+'python',ecd+'grib_templates',ecd+'src']) - try: - p=subprocess.check_call(['ecaccess-file-put',ecd+'../flex_extract_v7.0.4.tar','cca:/home/ms/'+c.ecgid+'/'+c.ecuid+'/flex_extract_v7.0.4.tar']) - except: - print 'ecaccess-file-put failed! Probably the eccert key has expired.' - exit(1) - - p=subprocess.check_call(['ecaccess-job-submit','-queueName',target,ecd+'python/compilejob.ksh']) - print 'compilejob.ksh has been submitted to cca for installation in '+c.ec_flexpart_root_scripts+'/flex_extract_v7.0.4' - print 'You should get an email with subject flexcompile within the next few minutes' - else: - print 'ERROR: unknown installation target ',target - print 'Valid targets: ecgate, cca, local' - return - - -if __name__ == "__main__": - main() diff --git a/python/job.temp b/python/job.temp deleted file mode 100644 index 8afd7c9f3db08e869aba0403efddd8cd13e178fd..0000000000000000000000000000000000000000 --- a/python/job.temp +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/ksh - -# ON ECGB: -# start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server -# start with sbatch NAME_OF_THIS_FILE directly on machine - -#SBATCH --workdir=/scratch/ms/at/km4a -#SBATCH --qos=normal -#SBATCH --job-name=flex_ecmwf -#SBATCH --output=flex_ecmwf.%j.out -#SBATCH --error=flex_ecmwf.%j.out -#SBATCH --mail-type=FAIL -#SBATCH --time=24:00:00 - -## CRAY specific batch requests -##PBS -N flex_ecmwf -##PBS -q np -##PBS -S /usr/bin/ksh -## -o /scratch/ms/spatlh00/lh0/flex_ecmwf.$PBS_JOBID.out -## job output is in .ecaccess_DO_NOT_REMOVE -##PBS -j oe -##PBS -V -##PBS -l EC_threads_per_task=24 -##PBS -l EC_memory_per_task=32000MB - -set -x -export VERSION=7.0.4 -case $HOST in - *ecg*) - module load python - module unload grib_api - module unload emos - module load grib_api/1.14.5 - module load emos/437-r64 - export PATH=${PATH}:${HOME}/flex_extract_v7.0.4/python - ;; - *cca*) - module switch PrgEnv-cray PrgEnv-intel - module load grib_api - module load emos - module load python - export SCRATCH=$TMPDIR - export PATH=${PATH}:${HOME}/flex_extract_v7.0.4/python - ;; -esac - -cd $SCRATCH -mkdir -p python$$ -cd python$$ - -export CONTROL=CONTROL - -cat >$CONTROL<<EOF -GATEWAY srvx8.img.univie.ac.at -DESTINATION annep@genericSftp -EOF -cat >>$CONTROL<<EOF -EOF - - -submit.py --controlfile=$CONTROL --inputdir=./work --outputdir=./work 1> prot 2>&1 - -if [ $? -eq 0 ] ; then - l=0 - for muser in `grep -i MAILOPS $CONTROL`; do - if [ $l -gt 0 ] ; then - mail -s flex.${HOST}.$$ $muser <prot - fi - l=$(($l+1)) - done -else - l=0 - for muser in `grep -i MAILFAIL $CONTROL`; do - if [ $l -gt 0 ] ; then - mail -s "ERROR! flex.${HOST}.$$" $muser <prot - fi - l=$(($l+1)) - done -fi - diff --git a/python/job.temp.o b/python/job.temp.o deleted file mode 100644 index 010404c60aa7647de06678a38a5863578596dc85..0000000000000000000000000000000000000000 --- a/python/job.temp.o +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/ksh - -# ON ECGB: -# start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE on gateway server -# start with sbatch NAME_OF_THIS_FILE directly on machine - -#SBATCH --workdir=/scratch/ms/spatlh00/lh0 -#SBATCH --qos=normal -#SBATCH --job-name=flex_ecmwf -#SBATCH --output=flex_ecmwf.%j.out -#SBATCH --error=flex_ecmwf.%j.out -#SBATCH --mail-type=FAIL -#SBATCH --time=24:00:00 - -## CRAY specific batch requests -##PBS -N flex_ecmwf -##PBS -q np -##PBS -S /usr/bin/ksh -## -o /scratch/ms/spatlh00/lh0/flex_ecmwf.$PBS_JOBID.out -## job output is in .ecaccess_DO_NOT_REMOVE -##PBS -j oe -##PBS -V -##PBS -l EC_threads_per_task=24 -##PBS -l EC_memory_per_task=32000MB - -set -x -export VERSION=7.0.4 -case $HOST in - *ecg*) - module load python - module unload grib_api - module unload emos - module load grib_api/1.14.5 - module load emos/437-r64 - export PATH=${PATH}: - ;; - *cca*) - module switch PrgEnv-cray PrgEnv-intel - module load grib_api - module load emos - module load python - export SCRATCH=$TMPDIR - export PATH=${PATH}: - ;; -esac - -cd $SCRATCH -mkdir -p python$$ -cd python$$ - -export CONTROL=CONTROL - -cat >>$CONTROL<<EOF -EOF - - -submit.py --controlfile=$CONTROL --inputdir=./work --outputdir=./work 1> prot 2>&1 - -if [ $? -eq 0 ] ; then - l=0 - for muser in `grep -i MAILOPS $CONTROL`; do - if [ $l -gt 0 ] ; then - mail -s flex.${HOST}.$$ $muser <prot - fi - l=$(($l+1)) - done -else - l=0 - for muser in `grep -i MAILFAIL $CONTROL`; do - if [ $l -gt 0 ] ; then - mail -s "ERROR! flex.${HOST}.$$" $muser <prot - fi - l=$(($l+1)) - done -fi diff --git a/python/opposite.py b/python/opposite.py deleted file mode 100644 index 979398940adf61e201a7376e0ed51c688a9a02ab..0000000000000000000000000000000000000000 --- a/python/opposite.py +++ /dev/null @@ -1,53 +0,0 @@ -import os,sys,glob -from gribapi import * -import numpy - -def opposite(prefix): - fclist=glob.glob(prefix+'*'+'N000') - - for fcn in fclist: - nprefix=fcn.split('N000')[0] - f=open(nprefix+'N{:0>3}'.format(0),'rb') - fcvalues=[] - while 1: - try: - fid=grib_new_from_file(f) - if fid is not None: - fcvalues.append(grib_get_array(fid,'values')) - grib_release(fid) - else: - break - except: - break - for i in range(1,26): - try: - g=open(nprefix+'N{:0>3}'.format(i),'rb') - h=open(nprefix+'N{:0>3}'.format(i+25),'wb') - j=0 - while 1: - try: - gid=grib_new_from_file(g) - if gid is not None: - values=grib_get_array(gid,'values') - grib_set_array(gid,'values',values-2*(values-fcvalues[j])) - grib_set(gid, 'number', i+25) - grib_write(gid,h) - grib_release(gid) - j+=1 - else: - break - except: - break - g.close() - h.close() - print('wrote '+nprefix+'N{:0>3}'.format(i+25)) - except: - break - f.close() - return - -if __name__ == "__main__": - opposite(os.path.expandvars('EN')) - - - diff --git a/python/prepareFLEXPART.py b/python/prepareFLEXPART.py deleted file mode 100755 index cec924d298f0bf7e1a39fae9b94e6cda24a31791..0000000000000000000000000000000000000000 --- a/python/prepareFLEXPART.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env python -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# Functionality provided: Prepare input 3D-wind fields in hybrid coordinates + surface fields for FLEXPART runs -# -# Creation: October 2014 - Anne Fouilloux - University of Oslo -# Extension November 2015 - Leopold Haimberger - University of Vienna for: -# - using the WebAPI also for general MARS retrievals -# - job submission on ecgate and cca -# - job templates suitable for twice daily operational dissemination -# - dividing retrievals of longer periods into digestable chunks -# - retrieve also longer term forecasts, not only analyses and short term forecast data -# - conversion into GRIB2 -# - conversion into .fp format for faster execution of FLEXPART -# -# Requirements: -# in addition to a standard python 2.6 or 2.7 installation the following packages need to be installed -# ECMWF WebMARS, gribAPI with python enabled, emoslib, ecaccess web toolkit, all available from https://software.ecmwf.int/ -# dateutils -# matplotlib (optional, for debugging) -# -import calendar -import shutil -import datetime -import time -import os,inspect,sys -import socket -from argparse import ArgumentParser,ArgumentDefaultsHelpFormatter -# add path to submit.py to pythonpath so that python finds its buddies -localpythonpath=os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) -if localpythonpath not in sys.path: - sys.path.append(localpythonpath) -from UIOTools import UIOFiles -#from string import strip -from GribTools import GribTools -from FlexpartTools import EIFlexpart, Control,interpret_args_and_control, cleanup -from opposite import opposite - -hostname=socket.gethostname() -ecapi= 'ecmwf' not in hostname - -try: - if ecapi: - import ecmwfapi -except ImportError: - ecapi=False - - -def prepareFLEXPART(args,c): - - - - namelist='fort.4' - - if not args.ppid: - c.ppid=str(os.getppid()) - else: - c.ppid=args.ppid - - c.ecapi=ecapi - - syear=int(c.start_date[:4]) - smonth=int(c.start_date[4:6]) - sday=int(c.start_date[6:]) - start = datetime.date( year = syear, month = smonth, day = sday ) - eyear=int(c.end_date[:4]) - emonth=int(c.end_date[4:6]) - eday=int(c.end_date[6:]) - - end = datetime.date( year = eyear, month = emonth, day = eday ) - - inputfiles=UIOFiles(['.grib', '.grb', '.grib1', '.grib2', '.grb1','.grb2']) - - startm1=start- datetime.timedelta(days=1) - endp1=end + datetime.timedelta(days=1) - - inputfiles.listFiles(c.inputdir, '*OG_acc_SL*.'+c.ppid+'.*') - if not os.path.exists(c.outputdir): - os.makedirs(c.outputdir) - - flexpart = EIFlexpart(c,fluxes=True) - flexpart.create_namelist(c,'fort.4') - flexpart.deacc_fluxes(inputfiles, c) - - inputfiles=UIOFiles(['.grib', '.grb', '.grib1', '.grib2', '.grb1','.grb2']) - - print 'Prepare '+start.strftime("%Y%m%d") + "/to/" + end.strftime("%Y%m%d") - # we will make the list of files from the root inputdir - inputfiles.listFiles(c.inputdir, '????__??.*'+c.ppid+'.*') - - if c.basetime=='00': - start=startm1 - flexpart = EIFlexpart(c) - flexpart.create(inputfiles, c) # produce FLEXPART-ready GRIB files - flexpart.process_output(c) # process GRIB files - copy/transfer/interpolate them or make them GRIB2 - - if int(c.debug)!=0: - print('Temporary files left intact') - else: - cleanup(c) - -if __name__ == "__main__": - args,c=interpret_args_and_control() - prepareFLEXPART(args,c) - - diff --git a/python/submit.py b/python/submit.py deleted file mode 100755 index 35e40b8ce37f3409a73349c3f31a9f22da6adb53..0000000000000000000000000000000000000000 --- a/python/submit.py +++ /dev/null @@ -1,115 +0,0 @@ -#!/usr/bin/env python -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# Functionality provided: Prepare input 3D-wind fields in hybrid coordinates + surface fields for FLEXPART runs -# -# Creation: October 2014 - Anne Fouilloux - University of Oslo -# Extension November 2015 - Leopold Haimberger - University of Vienna for: -# - using the WebAPI also for general MARS retrievals -# - job submission on ecgate and cca -# - job templates suitable for twice daily operational dissemination -# - dividing retrievals of longer periods into digestable chunks -# - retrieve also longer term forecasts, not only analyses and short term forecast data -# - conversion into GRIB2 -# - conversion into .fp format for faster execution of FLEXPART -# -# Further documentation may be obtained from www.flexpart.eu -# -# Requirements: -# in addition to a standard python 2.6 or 2.7 installation the following packages need to be installed -# ECMWF WebMARS, gribAPI with python enabled, emoslib, ecaccess web toolkit, all available from https://software.ecmwf.int/ -# dateutils -# matplotlib (optional, for debugging) -# -# -import calendar -import shutil -import datetime -import time -import os,sys,glob -import subprocess -import inspect -# add path to submit.py to pythonpath so that python finds its buddies -localpythonpath=os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) -sys.path.append(localpythonpath) -from UIOTools import UIOFiles -from string import strip -from argparse import ArgumentParser,ArgumentDefaultsHelpFormatter -from GribTools import GribTools -from FlexpartTools import EIFlexpart, Control, interpret_args_and_control, normalexit,myerror -from getMARSdata import getMARSdata -from prepareFLEXPART import prepareFLEXPART - - - -def main(): - - calledfromdir=os.getcwd() -# os.chdir(localpythonpath) - args,c=interpret_args_and_control() - if args.queue==None: - if c.inputdir[0]!='/': - c.inputdir=os.path.join(calledfromdir,c.inputdir) - if c.outputdir[0]!='/': - c.outputdir=os.path.join(calledfromdir,c.outputdir) - getMARSdata(args,c) - if c.request == 0 or c.request == 2: - prepareFLEXPART(args,c) - normalexit(c) - else: - normalexit(c) - else: - submit(args.job_template,c,args.queue) - - -def submit(jtemplate,c,queue): - - f=open(jtemplate) - lftext=f.read().split('\n') - insert_point=lftext.index('EOF') - f.close() - - clist=c.tolist() - colist=[] - mt=0 - for elem in clist: - if 'maxstep' in elem: - mt=int(elem.split(' ')[1]) - - for elem in clist: - if 'start_date' in elem: - elem='start_date '+'${MSJ_YEAR}${MSJ_MONTH}${MSJ_DAY}' - if 'end_date' in elem: - elem='start_date '+'${MSJ_YEAR}${MSJ_MONTH}${MSJ_DAY}' - if 'base_time' in elem: - elem='base_time '+'${MSJ_BASETIME}' - if 'time' in elem and mt>24: - elem='time '+'${MSJ_BASETIME} {MSJ_BASETIME}' - colist.append(elem) - - lftextondemand=lftext[:insert_point]+clist+lftext[insert_point+2:] - lftextoper=lftext[:insert_point]+colist+lftext[insert_point+2:] - - h=open('job.ksh','w') - h.write('\n'.join(lftextondemand)) - h.close() - - h=open('joboper.ksh','w') - h.write('\n'.join(lftextoper)) - h.close() - - try: - p=subprocess.check_call(['ecaccess-job-submit','-queueName',queue,'job.ksh']) - except: - print 'ecaccess-job-submit failed, probably eccert has expired' - exit(1) - #pout=p.communicate(input=s)[0] - print 'You should get an email with subject flex.hostname.pid' - - - - -if __name__ == "__main__": - main() diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000000000000000000000000000000000000..5adc7ad9ad20bf0996afdd9f5ebd97c69606bed1 --- /dev/null +++ b/setup.sh @@ -0,0 +1,86 @@ +#!/bin/bash +# +# @Author: Anne Philipp +# +# @Date: September, 10 2018 +# +# @Description: +# This file defines the flex_extract's available installation +# parameters and puts them together for the call of the actual +# python installation script. It also does some checks to +# guarantee necessary parameters were set. +# +# @Licence: +# (C) Copyright 2014-2019. +# +# SPDX-License-Identifier: CC-BY-4.0 +# +# This work is licensed under the Creative Commons Attribution 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +# +# ----------------------------------------------------------------- +# AVAILABLE COMMANDLINE ARGUMENTS TO SET +# +# THE USER HAS TO SPECIFY THESE PARAMETERS +# +TARGET='ecgate' +MAKEFILE='makefile_ecgate' +ECUID='<username>' +ECGID='<groupID>' +GATEWAY='<gatewayname>' +DESTINATION='<name>@genericSftp' +INSTALLDIR=None +JOB_TEMPLATE='' +CONTROLFILE='CONTROL_EA5' +# ----------------------------------------------------------------- +# +# AFTER THIS LINE THE USER DOES NOT HAVE TO CHANGE ANYTHING !!! +# +# ----------------------------------------------------------------- + +# PATH TO INSTALLATION SCRIPT +script="Source/Python/install.py" + +# INITIALIZE EMPTY PARAMETERLIST +parameterlist="" + +# DEFAULT PARAMETERLIST +if [ -n "$TARGET" ]; then + parameterlist=" --target=$TARGET" +else + echo "ERROR: No installation target specified." + echo "EXIT WITH ERROR" + exit +fi + +# CHECK FOR MORE PARAMETER +if [ "$TARGET" == "ecgate" ] || [ "$TARGET" == "cca" ]; then + # check if necessary Parameters are set + if [ -z "$ECUID" ] || [ -z "$ECGID" ] || [ -z "$GATEWAY" ] || [ -z "$DESTINATION" ]; then + echo "ERROR: At least one of the following parameters are not set: ECUID, ECGID, GATEWAY, DESTINATION!" + echo "EXIT WITH ERROR" + exit + else + parameterlist+=" --ecuid=$ECUID --ecgid=$ECGID --gateway=$GATEWAY --destination=$DESTINATION" + fi +fi +if [ -n "$MAKEFILE" ]; then + parameterlist+=" --makefile=$MAKEFILE" +fi +if [ -n "$FLEXPARTDIR" ]; then # not empty + parameterlist+=" --flexpartdir=$FLEXPARTDIR" +fi +if [ -n "$JOB_TEMPLATE" ]; then + parameterlist+=" --job_template=$JOB_TEMPLATE" +fi +if [ -n "$CONTROLFILE" ]; then + parameterlist+=" --controlfile=$CONTROLFILE" +fi + +# ----------------------------------------------------------------- +# CALL INSTALLATION SCRIPT WITH DETERMINED COMMANDLINE ARGUMENTS + +$script $parameterlist + diff --git a/src/Makefile.local.gfortran b/src/Makefile.local.gfortran deleted file mode 100644 index 6041bcbe9f12038c1e9882b961df30dc22a93909..0000000000000000000000000000000000000000 --- a/src/Makefile.local.gfortran +++ /dev/null @@ -1,62 +0,0 @@ -############################################################################### -# -# Top level Makefile for ECMWFDATA7.0 software -# -# Last modified: December 1, 2015 -# -############################################################################### - - -.SUFFIXES: .o .c .c~ .f .f~ .F90 .f90 .f90~ .f95 .f95~ .F .F~ .y .y~ .l .l~ \ - .s .s~ .sh .sh~ .h .h~ .C .C~ .a - - -GRIB_API_INCLUDE_DIR=/usr/local/gcc-4.9.3/grib_api-1.14.3/include -GRIB_API_LIB= -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 -EMOSLIB=-lemosR64 - -OPT = -g -O3 -fopenmp -DEBUG = -g -LIB = $(GRIB_API_LIB) $(EMOSLIB) - -FC=gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -F90C=gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian - -FFLAGS = $(OPT) -I. -I$(GRIB_API_INCLUDE_DIR) -F90FLAGS = $(OPT) -I. -I$(GRIB_API_INCLUDE_DIR) - -LDFLAGS = $(OPT) - -BINDIR = . - -EXE = CONVERT2 - - -.f.o: - $(F90C) -c $(F90FLAGS) $(DEBUG) $*.f -.f90.o: - $(F90C) -c $(F90FLAGS) $(DEBUG) $*.f90 - -all: $(EXE) - -clean: - rm *.o *.mod ${EXE} - -phgrreal.o: phgrreal.f - $(F90C) -c -g -O3 -fopenmp phgrreal.f - -grphreal.o: grphreal.f - $(F90C) -c -g -O3 -fopenmp grphreal.f - -ftrafo.o: ftrafo.f - $(F90C) -c -g -O3 -fopenmp ftrafo.f - -$(BINDIR)/${EXE}: phgrreal.o grphreal.o ftrafo.o rwGRIB2.o posnam.o preconvert.o - $(F90C) $(DEBUG) $(OPT) -o $(BINDIR)/${EXE} ftrafo.o phgrreal.o grphreal.o rwGRIB2.o posnam.o preconvert.o ${LIB} - - -############################################################################### -# -# End of the Makefile -# -############################################################################### diff --git a/src/Makefile.new b/src/Makefile.new deleted file mode 100644 index 9953d130c88dbb3a07e54867ef5c700c12df799f..0000000000000000000000000000000000000000 --- a/src/Makefile.new +++ /dev/null @@ -1,61 +0,0 @@ -############################################################################### -# -# Top level Makefile for ECMWFDATA7.0 software -# -# Last modified: December 1, 2015 -# -############################################################################### - - -.SUFFIXES: .o .c .c~ .f .f~ .F90 .f90 .f90~ .f95 .f95~ .F .F~ .y .y~ .l .l~ \ - .s .s~ .sh .sh~ .h .h~ .C .C~ .a - - -GRIB_API_INCLUDE_DIR=/usr/local/ifort/grib1.12.3//include -GRIB_API_LIBS=-openmp -L/usr/local/ifort/grib1.12.3/lib -Bstatic -lgrib_api_f77 -lgrib_api_f90 -lgrib_api -Bdynamic -lm -ljasper - -OPT = -g -DEBUG = -g -LIB = $(GRIB_API_LIBS) -lemosR64 - -FC=ifort -132 -traceback -r8 -F90C=ifort -132 -traceback -r8 - -FFLAGS = $(OPT) -I. -I$(GRIB_API_INCLUDE_DIR) -F90FLAGS = $(OPT) -I. -I$(GRIB_API_INCLUDE_DIR) - -LDFLAGS = $(OPT) - -BINDIR = . - -EXE = CONVERT2 - - -.f.o: - $(F90C) -c $(F90FLAGS) -132 $(DEBUG) $*.f -.f90.o: - $(F90C) -c $(F90FLAGS) -132 $(DEBUG) $*.f90 - -all: ${EXE} - -clean: - rm *.o - -phgrreal.o: phgrreal.f - $(F90C) -c -g -O3 -fopenmp phgrreal.f - -grphreal.o: grphreal.f - $(F90C) -c -g -O3 -fopenmp grphreal.f - -ftrafo.o: ftrafo.f - $(F90C) -c -g -O3 -fopenmp ftrafo.f - -$(BINDIR)/CONVERT2: phgrreal.o grphreal.o ftrafo.o rwGRIB2.o posnam.o preconvert.o - $(F90C) $(DEBUG) $(OPT) -o $(BINDIR)/CONVERT2 ftrafo.o phgrreal.o grphreal.o rwGRIB2.o posnam.o preconvert.o ${LIB} - - -############################################################################### -# -# End of the Makefile -# -############################################################################### diff --git a/src/ftrafo.f b/src/ftrafo.f deleted file mode 100644 index affdccdcf8b2a439fbd5fd35435ac076eefe7ee5..0000000000000000000000000000000000000000 --- a/src/ftrafo.f +++ /dev/null @@ -1,504 +0,0 @@ - MODULE FTRAFO - - CONTAINS - - - -C -C Implementierung der spektralen Transformationsmethode unter Verwendung -C des reduzierten Gauss'schen Gitters -C -C Berechnung der scale winds aus Vorticity und Divergenz -C uebergibt man in XMN die Divergenz, so wird der divergente Anteil des -C Windes (XPHI=Ud,XPHI=Vd) zurueckgegeben, uebergibt man die Vorticity, so -C erhaelt man den rotationellen Wind (XLAM=Vrot,XPHI=-Urot). -C Summiert man beide, erhaelt man den gesamten Scale wind -C GWSAVE ist ein Hilfsfeld fuer die FFT -C P enthaelt die assoziierten Legendrepolynome, H deren Ableitung -C MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis -C MNAUF gibt die spektrale Aufloesung an, -C NI = Anzahl der Gauss'schen Gitterpunkte pro Flaeche -C NJ = Anzahl der Gauss'schen Breiten, -C NK = Anzahl der Niveaus - - SUBROUTINE VDTOUV(XMN,XLAM,XPHI,GWSAVE,IFAX,P,MLAT,MNAUF,NI,NJ,NK) - - - USE PHTOGR - - IMPLICIT NONE - INTEGER J,N,NI,NJ,NK,MNAUF,GGIND(NJ/2) - INTEGER MLAT(NJ),IFAX(10,NJ) - REAL XMN(0:(MNAUF+1)*(MNAUF+2)-1,NK) - REAL P(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) - REAL H(0:(MNAUF+2)*(MNAUF+3)/2) - REAL XLAM(NI,NK),XPHI(NI,NK) - REAL GWSAVE(8*NJ+15,NJ/2) - REAL SCR,SCI,ACR,ACI,MUSCR,MUSCI,MUACR,MUACI - REAL RT,IT - - GGIND(1)=0 - DO 4 J = 2,NJ/2 - GGIND(J)=GGIND(J-1)+MLAT(J-1) -4 CONTINUE -!$OMP PARALLEL DO SCHEDULE(DYNAMIC) - DO 5 J = 1,NJ/2 - CALL VDUVSUB(J,XMN,XLAM,XPHI,GWSAVE,IFAX,P,GGIND(J), - *MLAT,MNAUF,NI,NJ,NK) - 5 CONTINUE -!$OMP END PARALLEL DO - RETURN - END SUBROUTINE VDTOUV - - SUBROUTINE VDUVSUB(J,XMN,XLAM,XPHI,GWSAVE,IFAX,P, - *GGIND,MLAT,MNAUF,NI,NJ,NK) - - USE PHTOGR - - IMPLICIT NONE - INTEGER J,K,M,N,NI,NJ,NK,MNAUF,GGIND,LL,LLP,LLH,LLS,LLPS,LLHS - INTEGER MLAT(NJ),IFAX(10,NJ) - REAL UFOUC(0:MAXAUF),MUFOUC(0:MAXAUF) - REAL VFOUC(0:MAXAUF),MVFOUC(0:MAXAUF) - REAL XMN(0:(MNAUF+1)*(MNAUF+2)-1,NK) - REAL P(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) - REAL H(0:(MNAUF+2)*(MNAUF+3)/2) - REAL XLAM(NI,NK),XPHI(NI,NK) - REAL GWSAVE(8*NJ+15,NJ/2) - REAL ERAD,SCR,SCI,ACR,ACI,MUSCR,MUSCI,MUACR,MUACI - REAL FAC(0:MNAUF),RT,IT - - - ERAD = 6367470.D0 - - FAC(0)=0.D0 - DO 12 N=1,MNAUF - FAC(N)=-ERAD/DBLE(N)/DBLE(N+1) -12 CONTINUE - - CALL DPLGND(MNAUF,P(0,J),H) - DO 3 K = 1,NK - LL=0 - LLP=0 - LLH=0 - DO 2 M = 0,MNAUF - SCR=0.D0 - SCI=0.D0 - ACR=0.D0 - ACI=0.D0 - MUSCR=0.D0 - MUSCI=0.D0 - MUACR=0.D0 - MUACI=0.D0 - LLS=LL - LLPS=LLP - LLHS=LLH - IF(2*M+1.LT.MLAT(J)) THEN - DO 1 N = M,MNAUF,2 - RT=XMN(2*LL,K)*FAC(N) - IT=XMN(2*LL+1,K)*FAC(N) - SCR =SCR+ RT*P(LLP,J) - SCI =SCI+ IT*P(LLP,J) - MUACR =MUACR+ RT*H(LLH) - MUACI =MUACI+ IT*H(LLH) - LL=LL+2 - LLP=LLP+2 - LLH=LLH+2 - 1 CONTINUE - LL=LLS+1 - LLP=LLPS+1 - LLH=LLHS+1 - DO 11 N = M+1,MNAUF,2 - RT=XMN(2*LL,K)*FAC(N) - IT=XMN(2*LL+1,K)*FAC(N) - ACR =ACR+ RT*P(LLP,J) - ACI =ACI+ IT*P(LLP,J) - MUSCR =MUSCR+ RT*H(LLH) - MUSCI =MUSCI+ IT*H(LLH) - LL=LL+2 - LLP=LLP+2 - LLH=LLH+2 - 11 CONTINUE - ENDIF - LL=LLS+(MNAUF-M+1) - LLP=LLPS+(MNAUF-M+3) - LLH=LLHS+(MNAUF-M+2) - - UFOUC(2*M)=-M*(SCI-ACI) - UFOUC(2*M+1)=M*(SCR-ACR) - VFOUC(2*M)=-M*(SCI+ACI) - VFOUC(2*M+1)=M*(SCR+ACR) - - MUFOUC(2*M)=-(MUSCR-MUACR) - MUFOUC(2*M+1)=-(MUSCI-MUACI) - MVFOUC(2*M)=-(MUSCR+MUACR) - MVFOUC(2*M+1)=-(MUSCI+MUACI) - 2 CONTINUE - - CALL RFOURTR(VFOUC, - *GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) - XLAM(GGIND+1:GGIND+MLAT(J),K)=VFOUC(0:MLAT(J)-1) - CALL RFOURTR(UFOUC, - *GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) - XLAM(NI-GGIND-MLAT(J)+1:NI-GGIND,K)=UFOUC(0:MLAT(J)-1) - - CALL RFOURTR(MVFOUC, - *GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) - XPHI(GGIND+1:GGIND+MLAT(J),K)=MVFOUC(0:MLAT(J)-1) - CALL RFOURTR(MUFOUC, - *GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) - XPHI(NI-GGIND-MLAT(J)+1:NI-GGIND,K)=MUFOUC(0:MLAT(J)-1) - -3 CONTINUE - - RETURN - END SUBROUTINE VDUVSUB - -C Berechnung des Gradienten eines Skalars aus dem Feld des -C Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der -C Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. -C GWSAVE ist ein Hilfsfeld fuer die FFT -C P enthaelt die assoziierten Legendrepolynome, H deren Ableitung -C MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis -C MNAUF gibt die spektrale Aufloesung an, -C NI = Anzahl der Gauss'schen Gitterpunkte, -C NJ = Anzahl der Gauss'schen Breiten, -C NK = Anzahl der Niveaus - - SUBROUTINE PHGRAD(XMN,XLAM,XPHI,GWSAVE,IFAX,P,H,MLAT, - *MNAUF,NI,NJ,NK) - - USE PHTOGR - IMPLICIT NONE - INTEGER J,K,M,N,NI,NJ,NK,MNAUF,GGIND,LL,LLP,LLH,LLS,LLPS,LLHS - INTEGER MLAT(NJ),IFAX(10,NJ) - REAL UFOUC(0:MAXAUF),MUFOUC(0:MAXAUF) - REAL VFOUC(0:MAXAUF),MVFOUC(0:MAXAUF) - REAL XMN(0:(MNAUF+1)*(MNAUF+2)-1,NK) - REAL P(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2) - REAL H(0:(MNAUF+2)*(MNAUF+3)/2) - REAL XLAM(NI,NK),XPHI(NI,NK) - REAL GWSAVE(8*NJ+15,NJ/2) - REAL ERAD - REAL SCR,SCI,ACR,ACI,MUSCR,MUSCI,MUACR,MUACI,RT,IT - - ERAD = 6367470.0 - - GGIND=0 - DO 4 J = 1,NJ/2 - CALL DPLGND(MNAUF,P(0,J),H) - DO 3 K = 1,NK - LL=0 - LLP=0 - LLH=0 - DO 2 M = 0,MNAUF - SCR=0.D0 - SCI=0.D0 - ACR=0.D0 - ACI=0.D0 - MUSCR=0.D0 - MUSCI=0.D0 - MUACR=0.D0 - MUACI=0.D0 - LLS=LL - LLPS=LLP - LLHS=LLH - IF(2*M+1.LT.MLAT(J)) THEN - DO 1 N = M,MNAUF,2 - RT=XMN(2*LL,K) - IT=XMN(2*LL+1,K) - SCR =SCR+ RT*P(LLP,J) - SCI =SCI+ IT*P(LLP,J) - MUACR =MUACR+RT*H(LLH) - MUACI =MUACI+ IT*H(LLH) - LL=LL+2 - LLP=LLP+2 - LLH=LLH+2 - 1 CONTINUE - LL=LLS+1 - LLP=LLPS+1 - LLH=LLHS+1 - DO 11 N = M+1,MNAUF,2 - RT=XMN(2*LL,K) - IT=XMN(2*LL+1,K) - ACR =ACR+ RT*P(LLP,J) - ACI =ACI+ IT*P(LLP,J) - MUSCR =MUSCR+ RT*H(LLH) - MUSCI =MUSCI+ IT*H(LLH) - LL=LL+2 - LLP=LLP+2 - LLH=LLH+2 - 11 CONTINUE - ENDIF - LL=LLS+(MNAUF-M+1) - LLP=LLPS+(MNAUF-M+3) - LLH=LLHS+(MNAUF-M+2) - - UFOUC(2*M)=-M*(SCI-ACI)/ERAD - UFOUC(2*M+1)=M*(SCR-ACR)/ERAD - VFOUC(2*M)=-M*(SCI+ACI)/ERAD - VFOUC(2*M+1)=M*(SCR+ACR)/ERAD - - MUFOUC(2*M)=-(MUSCR-MUACR)/ERAD - MUFOUC(2*M+1)=-(MUSCI-MUACI)/ERAD - MVFOUC(2*M)=-(MUSCR+MUACR)/ERAD - MVFOUC(2*M+1)=-(MUSCI+MUACI)/ERAD -2 CONTINUE - - CALL RFOURTR(VFOUC, - *GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) - XLAM(GGIND+1:GGIND+MLAT(J),K)=VFOUC(0:MLAT(J)-1) - CALL RFOURTR(UFOUC, - *GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) - XLAM(NI-GGIND-MLAT(J)+1:NI-GGIND,K)=UFOUC(0:MLAT(J)-1) - - CALL RFOURTR(MVFOUC, - *GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) - XPHI(GGIND+1:GGIND+MLAT(J),K)=MVFOUC(0:MLAT(J)-1) - CALL RFOURTR(MUFOUC, - *GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J),1) - XPHI(NI-GGIND-MLAT(J)+1:NI-GGIND,K)=MUFOUC(0:MLAT(J)-1) - -3 CONTINUE - GGIND=GGIND+MLAT(J) -4 CONTINUE - - - RETURN - END SUBROUTINE PHGRAD - -C Berechnung des Gradienten eines Skalars aus dem Feld des -C Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der -C Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. -C GWSAVE ist ein Hilfsfeld fuer die FFT -C P enthaelt die assoziierten Legendrepolynome, H deren Ableitung -C MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis -C MNAUF gibt die spektrale Aufloesung an, -C NI = Anzahl der Gauss'schen Gitterpunkte, -C NJ = Anzahl der Gauss'schen Breiten, -C NK = Anzahl der Niveaus - - SUBROUTINE PHGRACUT(XMN,XLAM,XPHI,GWSAVE,IFAX,P,H,MAUF, - *MNAUF,NI,NJ,MANF,NK) - - USE PHTOGR - IMPLICIT NONE - INTEGER J,K,M,N,NI,NJ,NK,MNAUF,GGIND,LL,LLP,LLH,LLS,LLPS,LLHS - INTEGER MAUF,MANF,I,IFAX(10) - REAL UFOUC(0:MAXAUF),MUFOUC(0:MAXAUF) - REAL VFOUC(0:MAXAUF),MVFOUC(0:MAXAUF) - REAL XMN(0:(MNAUF+1)*(MNAUF+2)-1,NK) - REAL P(0:(MNAUF+3)*(MNAUF+4)/2,NJ) - REAL H(0:(MNAUF+2)*(MNAUF+3)/2) - REAL XLAM(NI,NJ,NK),XPHI(NI,NJ,NK) - REAL HLAM(MAXAUF,2),HPHI(MAXAUF,2) - REAL GWSAVE(4*MAUF+15) - REAL ERAD - REAL SCR,SCI,ACR,ACI,MUSCR,MUSCI,MUACR,MUACI,RT,IT - - ERAD = 6367470.0 - - GGIND=0 - DO 4 J = 1,NJ - CALL DPLGND(MNAUF,P(0,J),H) - DO 3 K = 1,NK - LL=0 - LLP=0 - LLH=0 - DO 2 M = 0,MNAUF - SCR=0.D0 - SCI=0.D0 - ACR=0.D0 - ACI=0.D0 - MUSCR=0.D0 - MUSCI=0.D0 - MUACR=0.D0 - MUACI=0.D0 - LLS=LL - LLPS=LLP - LLHS=LLH - IF(2*M+1.LT.MAUF) THEN - DO 1 N = M,MNAUF,2 - RT=XMN(2*LL,K) - IT=XMN(2*LL+1,K) - SCR =SCR+ RT*P(LLP,J) - SCI =SCI+ IT*P(LLP,J) - MUACR =MUACR+RT*H(LLH) - MUACI =MUACI+ IT*H(LLH) - LL=LL+2 - LLP=LLP+2 - LLH=LLH+2 - 1 CONTINUE - LL=LLS+1 - LLP=LLPS+1 - LLH=LLHS+1 - DO 11 N = M+1,MNAUF,2 - RT=XMN(2*LL,K) - IT=XMN(2*LL+1,K) - ACR =ACR+ RT*P(LLP,J) - ACI =ACI+ IT*P(LLP,J) - MUSCR =MUSCR+ RT*H(LLH) - MUSCI =MUSCI+ IT*H(LLH) - LL=LL+2 - LLP=LLP+2 - LLH=LLH+2 - 11 CONTINUE - ENDIF - LL=LLS+(MNAUF-M+1) - LLP=LLPS+(MNAUF-M+3) - LLH=LLHS+(MNAUF-M+2) - - UFOUC(2*M)=-M*(SCI-ACI)/ERAD - UFOUC(2*M+1)=M*(SCR-ACR)/ERAD - VFOUC(2*M)=-M*(SCI+ACI)/ERAD - VFOUC(2*M+1)=M*(SCR+ACR)/ERAD - - MUFOUC(2*M)=-(MUSCR-MUACR)/ERAD - MUFOUC(2*M+1)=-(MUSCI-MUACI)/ERAD - MVFOUC(2*M)=-(MUSCR+MUACR)/ERAD - MVFOUC(2*M+1)=-(MUSCI+MUACI)/ERAD -2 CONTINUE - - CALL RFOURTR(VFOUC, - *GWSAVE,IFAX,MNAUF,MAUF,1) - - CALL RFOURTR(MVFOUC, - *GWSAVE,IFAX,MNAUF,MAUF,1) - - DO 6 I=0,NI-1 - IF(MANF+I.LE. MAUF) THEN - XLAM(I+1,J,K)=VFOUC(MANF+I-1) - XPHI(I+1,J,K)=MVFOUC(MANF+I-1) - ELSE - XLAM(I+1,J,K)=VFOUC(MANF-MAUF+I-1) - XPHI(I+1,J,K)=MVFOUC(MANF-MAUF+I-1) - ENDIF - 6 CONTINUE -3 CONTINUE - GGIND=GGIND+MAUF -4 CONTINUE - - RETURN - END SUBROUTINE PHGRACUT - -C Berechnung der Divergenz aus dem Windfeld (U,V) -C im Phasenraum. Zurueckgegeben werden die Felder der -C Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter. -C GWSAVE ist ein Hilfsfeld fuer die FFT -C P enthaelt die assoziierten Legendrepolynome, H deren Ableitung -C MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis -C MNAUF gibt die spektrale Aufloesung an, -C NI = Anzahl der Gauss'schen Gitterpunkte, -C NJ = Anzahl der Gauss'schen Breiten, -C NK = Anzahl der Niveaus -C Beachte, dass das Windfeld eine um 1 erhoehte Aufloesung in mu-Richtung hat. - - SUBROUTINE CONTGL(PS,DPSDL,DPSDM,DIV,U,V,BREITE,ETA, - *MLAT,A,B,NI,NJ,NK) - - IMPLICIT NONE - - INTEGER NI,NJ,NK,I,J,K,MLAT(NJ),L - - REAL A(NK+1),B(NK+1) - REAL PS(NI),DPSDL(NI),DPSDM(NI) - REAL DIV(NI,NK),U(NI,NK),V(NI,NK),ETA(NI,NK) - REAL BREITE(NJ) - - REAL DIVT1,DIVT2,POB,PUN,DPSDT,COSB - - L=0 - DO 4 J=1,NJ - COSB=(1.0-BREITE(J)*BREITE(J)) - DO 3 I=1,MLAT(J) - L=L+1 - DIVT1=0.0 - DIVT2=0.0 - DO 1 K=1,NK - POB=A(K)+B(K)*PS(L) - PUN=A(K+1)+B(K+1)*PS(L) - - DIVT1=DIVT1+DIV(L,K)*(PUN-POB) - if(cosb .gt. 0.) then - DIVT2=DIVT2+(B(K+1)-B(K))*PS(L)* - *(U(L,K)*DPSDL(L)+V(L,K)*DPSDM(L))/COSB - endif - - ETA(L,K)=-DIVT1-DIVT2 -1 CONTINUE - - DPSDT=(-DIVT1-DIVT2)/PS(L) - - DO 2 K=1,NK - ETA(L,K)=ETA(L,K)-DPSDT*B(K+1)*PS(L) -2 CONTINUE - PS(L)=DPSDT*PS(L) -3 CONTINUE -4 CONTINUE - RETURN - END SUBROUTINE CONTGL - -C OMEGA berechnet omega im Hybridkoordinatensystem -C PS ist der Bodendruck, -C DPSDL,DPSDM sind die Komponenten des Gradienten des Logarithmus des -C Bodendrucks -C DIV,U,V sind die horizontale Divergenz und das horizontale Windfeld -C BREITE ist das Feld der Gauss'schen Breiten -C E ist omega, - - SUBROUTINE OMEGA(PS,DPSDL,DPSDM,DIV,U,V,BREITE,E,MLAT,A,B,NGI - * ,NGJ,MKK) - - IMPLICIT NONE - - INTEGER I,J,K,L,NGI,NGJ,MKK,MLAT(NGJ) - - REAL PS(NGI),DPSDL(NGI),DPSDM(NGI),A(MKK+1),B(MKK+1) - REAL DIV(NGI,MKK),U(NGI,MKK),V(NGI,MKK),E(NGI,MKK) - REAL BREITE(NGJ) - - REAL DIVT1,DIVT2,POB,PUN,DP,X,Y,COSB - REAL DIVT3(MKK+2) - - L=0 - DO 4 J=1,NGJ - COSB=(1.0-BREITE(J)*BREITE(J)) - DO 3 I=1,MLAT(J) - L=L+1 - DIVT1=0.0 - DIVT2=0.0 - DIVT3(1)=0.0 - DO 1 K=1,MKK - POB=A(K)+B(K)*PS(L) - PUN=A(K+1)+B(K+1)*PS(L) - DP=PUN-POB - - Y=PS(L)*(U(L,K)*DPSDL(L)+V(L,K)*DPSDM(L))/COSB - IF(K.LT.3) THEN - X=0.0 - ELSE - X=(B(K+1)-B(K))*Y - ENDIF - - DIVT1=DIVT1+DIV(L,K)*DP - DIVT2=DIVT2+X - - DIVT3(K+1)=-DIVT1-DIVT2 - - IF(K.GT.1) THEN - E(L,K) = 0.5*(POB+PUN)/DP*Y* - *((B(K+1)-B(K))+(A(K+1)*B(K)-A(K)*B(K+1))/ - *DP*LOG(PUN/POB)) - ELSE - E(L,K) = 0.0 - ENDIF - - E(L,K) = E(L,K)+0.5*(DIVT3(K)+DIVT3(K+1)) - -1 CONTINUE -3 CONTINUE -4 CONTINUE - RETURN - END SUBROUTINE OMEGA - - END MODULE FTRAFO diff --git a/src/grphreal.f b/src/grphreal.f deleted file mode 100644 index dae342bf336d149d97ffa55234c0b1375eff2661..0000000000000000000000000000000000000000 --- a/src/grphreal.f +++ /dev/null @@ -1,188 +0,0 @@ - MODULE GRTOPH - - USE PHTOGR - - CONTAINS -C - SUBROUTINE GRPH213(CXMN,FELD,WSAVE,IFAX,Z,W,MLAT, - *MNAUF,MAXL,MAXB,MLEVEL) - -C DIE ROUTINE F]HRT EINE TRANSFORMATION EINER -C FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN -C RAUM AUF KUGELKOORDINATEN DURCH -C -C CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE -C CX00,CX01,CX11,CX02,....CXMNAUFMNAUF -C CXM = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld -C FELD = FELD DER METEOROLOGISCHEN VARIABLEN -C WSAVE = Working Array fuer Fouriertransformation -C Z = LEGENDREFUNKTIONSWERTE -C -C MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN -C MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN -C MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN -C MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN -C - IMPLICIT REAL (A-H,O-Z) - - -C Anzahl der Gitterpunkte pro Breitenkreis des reduzierten -C Gauss'schen Gitters - INTEGER MLAT(MAXB),ISIZE,IFAX(10,MAXB) - -C FELD DER LEGENDREPOLYNOME FUER EINE BREITE - REAL*8 Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) - -C LOGICAL*1 USED(((216*217)/2+1)*160) - - DIMENSION CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) - REAL FELD(MAXL,MLEVEL) - DIMENSION WSAVE(8*MAXB+15,MAXB/2) - REAL*8 W(MAXB) - DIMENSION IND(MAXB) - - - IND(1)=0 - DO 6 J=2,MAXB/2 - IND(j)=IND(J-1)+MLAT(J-1) - 6 CONTINUE -!$OMP PARALLEL DO SCHEDULE(DYNAMIC) - DO 16 L=1,MLEVEL - CALL GRPHSUB(L,IND,CXMN,FELD,WSAVE,IFAX,Z,W,MLAT, - *MNAUF,MAXL,MAXB,MLEVEL) -16 CONTINUE -!$omp end parallel do - - - RETURN - END SUBROUTINE GRPH213 -C - SUBROUTINE GRPHSUB(L,IND,CXMN,FELD,WSAVE,IFAX,Z,W,MLAT, - *MNAUF,MAXL,MAXB,MLEVEL) - -C DIE ROUTINE F]HRT EINE TRANSFORMATION EINER -C FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN -C RAUM AUF KUGELKOORDINATEN DURCH -C -C CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE -C CX00,CX01,CX11,CX02,....CXMNAUFMNAUF -C CXM = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld -C FELD = FELD DER METEOROLOGISCHEN VARIABLEN -C WSAVE = Working Array fuer Fouriertransformation -C Z = LEGENDREFUNKTIONSWERTE -C -C MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN -C MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN -C MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN -C MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN -C - IMPLICIT REAL (A-H,O-Z) - -C FELD DER FOURIERKOEFFIZIENTEN - REAL CXMS(4*(MNAUF+1)) - REAL CXMA(4*(MNAUF+1)) - REAL,ALLOCATABLE :: CXM(:,:) - -C Anzahl der Gitterpunkte pro Breitenkreis des reduzierten -C Gauss'schen Gitters - INTEGER MLAT(MAXB),ISIZE - -C FELD DER LEGENDREPOLYNOME FUER EINE BREITE - REAL Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) - -C LOGICAL*1 USED(((216*217)/2+1)*160) - - REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) - REAL FELD(MAXL,MLEVEL) - REAL WSAVE(8*MAXB+15,MAXB/2) - INTEGER IFAX(10,MAXB) - REAL W(MAXB) - INTEGER IND(MAXB) - - ALLOCATE(CXM( 4*MAXB,MAXB)) - DO 5 J=1,MAXB/2 - CXMS(1:MLAT(J))=FELD(IND(J)+1:IND(J)+MLAT(J),L) - CALL RFOUFTR(CXMS,WSAVE(1,J),IFAX(:,J),MNAUF,MLAT(J),1) - CXMA(1:MLAT(J))=FELD(MAXL-IND(J)-MLAT(J)+1:MAXL-IND(J),L) - CALL RFOUFTR(CXMA, - *WSAVE(1,J),IFAX(:,J),MNAUF,MLAT(J),1) - DO 4 I=1,2*(MNAUF+1) - CXM(I,J)=CXMS(I)+CXMA(I) - CXM(I,MAXB+1-J)=CXMS(I)-CXMA(I) -4 CONTINUE - 5 CONTINUE - CALL LGTR213(CXMN(0,L),CXM,Z,W,MLAT,MNAUF,MAXB) - - DEALLOCATE(CXM) - - RETURN - END SUBROUTINE GRPHSUB -C - SUBROUTINE LGTR213(CXMN,CXM,Z,W,MLAT,MNAUF,MAXB) - IMPLICIT REAL (A-H,O-Z) - INTEGER MLAT(MAXB) - DIMENSION CXM(0:4*MAXB-1,MAXB) - DIMENSION CXMN(0:2*(((MNAUF+1)*MNAUF)/2+MNAUF)+1) - REAL*8 Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2) - REAL*8 W(MAXB),CR,CI,HILF - LOGICAL EVEN -C -C DIESE ROUTINE BERECHNET DIE KFFKs CXMN -C - LL=0 - LLP=0 - DO 1 I=0,MNAUF - KM=0 - 9 KM=KM+1 - IF(MLAT(KM).LE.2*I) THEN - GOTO 9 - ENDIF - DO 2 J=I,MNAUF - CR=0 - CI=0 - EVEN=MOD(I+J,2).EQ.0 - IF(EVEN) THEN - DO 3 K=KM,MAXB/2 - HILF=W(K)*Z(K,LLP) - CR=CR+CXM(2*I,K)*HILF - CI=CI+CXM(2*I+1,K)*HILF - 3 CONTINUE - ELSE - DO 4 K=KM,MAXB/2 - HILF=W(K)*Z(K,LLP) - CR=CR+CXM(2*I,MAXB+1-K)*HILF - CI=CI+CXM(2*I+1,MAXB+1-K)*HILF - 4 CONTINUE - ENDIF - 5 CXMN(2*LL)=CR - CXMN(2*LL+1)=CI - LL=LL+1 - LLP=LLP+1 - 2 CONTINUE - LLP=LLP+2 - 1 CONTINUE - RETURN - END SUBROUTINE LGTR213 -C - -C - SUBROUTINE RFOUFTR(CXM,TRIGS,IFAX,MNAUF,MAXL,ISIGN) -C BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS - IMPLICIT REAL (A-H,O-Z) - DIMENSION CXM(0:2*MAXL-1) - DIMENSION FELD(MAXL),TRIGS(2*MAXL) - DIMENSION WSAVE(MAXAUF) - INTEGER IFAX(10) - - -C NORMIERUNG... - WSAVE(1)=CXM(MAXL-1) - - CXM(1:MAXL)=CXM(0:MAXL-1)/2 - CXM(0)=WSAVE(1)/2 -! CALL CFFTF(MAXL,CXM,WSAVE) - CALL FFT99(CXM,WSAVE,TRIGS,IFAX,1,1,MAXL,1,-1) - RETURN - END SUBROUTINE RFOUFTR - - END MODULE GRTOPH diff --git a/src/phgrreal.f b/src/phgrreal.f deleted file mode 100644 index aa3658c917fd35d15dd4c2b9959f4fcf074923a1..0000000000000000000000000000000000000000 --- a/src/phgrreal.f +++ /dev/null @@ -1,553 +0,0 @@ - MODULE PHTOGR - - INTEGER, PARAMETER :: MAXAUF=36000 - - CONTAINS - - SUBROUTINE PHGR213(CXMN,FELD,WSAVE,IFAX,Z,MLAT,MNAUF, - *MAXL,MAXB,MLEVEL) - -C DIE ROUTINE F]HRT EINE TRANSFORMATION EINER -C FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN -C RAUM AUF DAS REDUZIERTE GAUSS'SCHE GITTER DURCH -C -C CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE -C CX00,CX01,CX11,CX02,....CXMNAUFMNAUF -C FELD = FELD DER METEOROLOGISCHEN VARIABLEN -C WSAVE = Working Array fuer Fouriertransformation -C Z = LEGENDREFUNKTIONSWERTE -C -C MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN -C MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN -C MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN -C MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN -C - IMPLICIT NONE - -C Anzahl der Gitterpunkte auf jedem Breitenkreis - INTEGER MLAT(MAXB/2) - INTEGER K,MAXL,MAXB,MLEVEL,MNAUF - INTEGER IND(MAXB) - - -C FELD DER LEGENDREPOLYNOME FUER EINE BREITE - REAL Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2) - - REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) - REAL FELD(MAXL,MLEVEL) - REAL WSAVE(8*MAXB+15,MAXB/2) - INTEGER :: IFAX(10,MAXB) - - IND(1)=0 - DO 7 K=2,MAXB/2 - IND(K)=IND(K-1)+MLAT(K-1) -7 CONTINUE - -!$OMP PARALLEL DO SCHEDULE(DYNAMIC) - DO 17 K=1,MAXB/2 - CALL PHSYM(K,IND,CXMN,FELD,Z,WSAVE,IFAX,MLAT, - *MNAUF,MAXL,MAXB,MLEVEL) - -17 CONTINUE -!$OMP END PARALLEL DO - - RETURN - END SUBROUTINE PHGR213 -C -C - SUBROUTINE PHSYM(K,IND,CXMN,FELD,Z,WSAVE,IFAX,MLAT, - *MNAUF,MAXL,MAXB,MLEVEL) - - IMPLICIT NONE - - INTEGER MLAT(MAXB/2) - INTEGER K,L,I,J,LLS,LLPS,LL,LLP,MAXL,MAXB,MLEVEL,MNAUF - INTEGER IND(MAXB) - INTEGER :: IFAX(10,MAXB) - - -C FELD DER FOURIERKOEFFIZIENTEN - REAL :: CXMS(0:MAXAUF-1),CXMA(0:MAXAUF-1) - -C FELD DER LEGENDREPOLYNOME FUER EINE BREITE - REAL Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2) - REAL ACR,ACI,SCR,SCI - - REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) - REAL FELD(MAXL,MLEVEL) - REAL WSAVE(8*MAXB+15,MAXB/2) - - DO 6 L=1,MLEVEL - LL=0 - LLP=0 - DO 1 I=0,MNAUF - SCR=0.D0 - SCI=0.D0 - ACR=0.D0 - ACI=0.D0 - LLS=LL - LLPS=LLP - IF(2*I+1.LT.MLAT(K)) THEN -C Innerste Schleife aufgespalten um if-Abfrage zu sparen - DO 18 J=I,MNAUF,2 - SCR=SCR+Z(LLP,K)*CXMN(2*LL,L) - SCI=SCI+Z(LLP,K)*CXMN(2*LL+1,L) - LL=LL+2 - LLP=LLP+2 -18 CONTINUE - LL=LLS+1 - LLP=LLPS+1 - DO 19 J=I+1,MNAUF,2 - ACR=ACR+Z(LLP,K)*CXMN(2*LL,L) - ACI=ACI+Z(LLP,K)*CXMN(2*LL+1,L) - LL=LL+2 - LLP=LLP+2 -19 CONTINUE - ENDIF - LL=LLS+(MNAUF-I+1) - LLP=LLPS+(MNAUF-I+3) - CXMS(2*I)=SCR+ACR - CXMS(2*I+1)=SCI+ACI - CXMA(2*I)=SCR-ACR - CXMA(2*I+1)=SCI-ACI - 1 CONTINUE -C CALL FOURTR(CXMS,FELD(IND(k)+1,L),WSAVE(:,K),MNAUF, -C *MLAT(K),1) -C CALL FOURTR(CXMA,FELD(MAXL-IND(k)-MLAT(K)+1,L), -C *WSAVE(:,K),MNAUF,MLAT(K),1) - CALL RFOURTR(CXMS,WSAVE(:,K),IFAX(:,K),MNAUF, - *MLAT(K),1) - FELD(IND(k)+1:IND(K)+MLAT(K),L)=CXMS(0:MLAT(K)-1) - CALL RFOURTR(CXMA, - *WSAVE(:,K),IFAX(:,K),MNAUF,MLAT(K),1) - FELD(MAXL-IND(k)-MLAT(K)+1:MAXL-IND(k),L)=CXMA(0:MLAT(K)-1) -C WRITE(*,*) IND+1,FELD(IND+1,L) -6 CONTINUE - - END SUBROUTINE PHSYM - - SUBROUTINE PHGCUT(CXMN,FELD,WSAVE,IFAX,Z, - * MNAUF,MMAX,MAUF,MANF,MAXL,MAXB,MLEVEL) - -C DIE ROUTINE FUEHRT EINE TRANSFORMATION EINER -C FELDVARIABLEN VOM PHASENRAUM IN DEN PHYSIKALISCHEN -C RAUM AUF KUGELKOORDINATEN DURCH. Es kann ein Teilausschnitt -C Der Erde angegeben werden. Diese Routine ist langsamer als -C phgrph -C -C CXMN = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE -C CX00,CX01,CX11,CX02,....CXMNAUFMNAUF -C FELD = FELD DER METEOROLOGISCHEN VARIABLEN -C BREITE = SINUS DER GEOGRAFISCHEN BREITEN -C -C MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN -C MAUF ANZAHL DER LAENGEN UND DER FOURIERKOEFFIZIENTEN -C MANF ANFANG DES LAENGENBEREICHS FUER DAS GITTER, -C AUF DAS INTERPOLIERT WERDEN SOLL -C MAXL ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN -C MAXB ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN -C MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN -C - IMPLICIT REAL (A-H,O-Z) - -C FELD DER FOURIERKOEFFIZIENTEN - -C FELD DER LEGENDREPOLYNOME FUER EINE BREITE - REAL Z(0:((MMAX+3)*(MMAX+4))/2,MAXB) - - DIMENSION CXMN(0:(MMAX+1)*(MMAX+2)-1,MLEVEL) - REAL FELD(MAXL,MAXB,MLEVEL) - DIMENSION WSAVE(4*MAUF+15) - INTEGER:: IFAX(10) - - LOGICAL SYM - -C -C write(*,*)mauf,mnauf,manf,maxl - - - IF(MAUF.LE.MNAUF) WRITE(*,*) 'TOO COARSE LONGITUDE RESOLUTION' - IF((MANF.LT.1).OR.(MAXL.LT.1).OR. - * (MANF.GT.MAUF).OR.(MAXL.GT.MAUF)) THEN - WRITE(*,*) 'WRONG LONGITUDE RANGE',MANF,MAXL - STOP - ENDIF - -C Pruefe, ob Ausgabegitter symmetrisch zum Aequator ist -C Wenn ja soll Symmetrie der Legendrepolynome ausgenutzt werden - IF(MAXB .GT. 4) THEN - SYM=.TRUE. - DO 11 J=5,5 - IF(ABS(ABS(Z(100,J))-ABS(Z(100,MAXB+1-J))).GT.1E-11) - * SYM=.FALSE. -C WRITE(*,*) ABS(Z(100,J)),ABS(Z(100,MAXB+1-J)) -11 CONTINUE - WRITE(*,*) 'Symmetrisch: ',SYM - ELSE - SYM=.FALSE. - ENDIF - - - IF(SYM) THEN -!$OMP PARALLEL DO - DO J=1,(MAXB+1)/2 - CALL PHSYMCUT(J,CXMN,FELD,Z,WSAVE,IFAX, - *MAUF,MNAUF,MAXL,MAXB,MLEVEL,MANF) - - ENDDO -!$OMP END PARALLEL DO - ELSE -!$OMP PARALLEL DO - DO J=1,MAXB - CALL PHGPNS(CXMN,FELD,Z,WSAVE,IFAX, - *J,MNAUF,MAUF,MANF,MAXL,MAXB,MLEVEL) - ENDDO -!$OMP END PARALLEL DO - - ENDIF - - - RETURN - END SUBROUTINE PHGCUT - - SUBROUTINE PHSYMCUT(J,CXMN,FELD,Z,WSAVE,IFAX, - *MAUF,MNAUF,MAXL,MAXB,MLEVEL,MANF) - - IMPLICIT REAL (A-H,O-Z) - -C FELD DER FOURIERKOEFFIZIENTEN - - REAL :: CXM(0:MAXAUF-1),CXMA(0:MAXAUF-1) - - -C FELD DER LEGENDREPOLYNOME FUER EINE BREITE - REAL Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB) - REAL SCR,SCI,ACR,ACI - - DIMENSION CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) - REAL FELD(MAXL,MAXB,MLEVEL) - DIMENSION WSAVE(4*MAUF+15) - INTEGER :: IFAX(10) - - DO 16 L=1,MLEVEL - LL=0 - LLP=0 - DO 17 I=0,MNAUF - SCR=0.D0 - SCI=0.D0 - ACR=0.D0 - ACI=0.D0 - LLS=LL - LLPS=LLP -C Innerste Schleife aufgespalten um if-Abfrage zu sparen - DO 18 K=I,MNAUF,2 - SCR=SCR+Z(LLP,J)*CXMN(2*LL,L) - SCI=SCI+Z(LLP,J)*CXMN(2*LL+1,L) - LL=LL+2 - LLP=LLP+2 -18 CONTINUE - LL=LLS+1 - LLP=LLPS+1 - DO 19 K=I+1,MNAUF,2 - ACR=ACR+Z(LLP,J)*CXMN(2*LL,L) - ACI=ACI +Z(LLP,J)*CXMN(2*LL+1,L) - LL=LL+2 - LLP=LLP+2 -19 CONTINUE - LL=LLS+MNAUF-I+1 - LLP=LLPS+MNAUF-I+3 - CXM(2*I)=SCR+ACR - CXM(2*I+1)=SCI+ACI - CXMA(2*I)=SCR-ACR - CXMA(2*I+1)=SCI-ACI -17 CONTINUE - - CALL RFOURTR(CXM,WSAVE,IFAX,MNAUF,MAUF,1) - DO 26 I=0,MAXL-1 - IF(MANF+I.LE.MAUF) THEN - FELD(I+1,J,L)=CXM(MANF+I-1) - ELSE - FELD(I+1,J,L)=CXM(MANF-MAUF+I-1) - ENDIF -26 CONTINUE - CALL RFOURTR(CXMA,WSAVE,IFAX,MNAUF,MAUF,1) - DO 36 I=0,MAXL-1 - IF(MANF+I.LE.MAUF) THEN - FELD(I+1,MAXB+1-J,L)=CXMA(MANF+I-1) - ELSE - FELD(I+1,MAXB+1-J,L)=CXMA(MANF-MAUF+I-1) - ENDIF -36 CONTINUE -16 CONTINUE - - END SUBROUTINE PHSYMCUT - - SUBROUTINE PHGPNS(CXMN,FELD,Z,WSAVE,IFAX, - *J,MNAUF,MAUF,MANF,MAXL,MAXB,MLEVEL) - - IMPLICIT NONE - INTEGER,intent(in) :: MNAUF,MAUF,MANF,J,MAXL,MAXB,MLEVEL - REAL :: CXM(0:MAXAUF-1) - REAL,intent(in) :: Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB) - - REAL,intent(in) :: CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL) - - REAL,intent(in) :: WSAVE(4*MAUF+15) - - REAL :: FELD(MAXL,MAXB,MLEVEL) - INTEGER :: IFAX(10) - - INTEGER I,L - - DO L=1,MLEVEL - CALL LEGTR(CXMN(:,L),CXM,Z(:,J),MNAUF,MAUF) - CALL RFOURTR(CXM,WSAVE,IFAX,MNAUF,MAUF,1) - - DO I=0,MAXL-1 - IF(MANF+I.LE.MAUF) THEN - FELD(I+1,J,L)=CXM(MANF+I-1) - ELSE - FELD(I+1,J,L)=CXM(MANF-MAUF+I-1) - ENDIF - ENDDO - ENDDO - END SUBROUTINE PHGPNS -C - SUBROUTINE LEGTR(CXMN,CXM,Z,MNAUF,MAUF) - IMPLICIT NONE - INTEGER MNAUF,MAUF,LL,LLP,I,J - REAL CXM(0:MAXAUF-1) - REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1) - REAL Z(0:((MNAUF+3)*(MNAUF+4))/2) - REAL CI,CR -C -C DIESE ROUTINE BERECHNET DIE FOURIERKOEFFIZIENTEN CXM -C - LL=0 - LLP=0 - DO 1 I=0,MNAUF - CR=0.D0 - CI=0.D0 - DO 2 J=I,MNAUF - CR=CR+Z(LLP)*CXMN(2*LL) - CI=CI+Z(LLP)*CXMN(2*LL+1) - LL=LL+1 - LLP=LLP+1 - 2 CONTINUE - LLP=LLP+2 - CXM(2*I)=CR - CXM(2*I+1)=CI - 1 CONTINUE - RETURN - END SUBROUTINE LEGTR -C -C -C - SUBROUTINE RFOURTR(CXM,TRIGS,IFAX,MNAUF,MAXL,ISIGN) -C BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS - IMPLICIT REAL (A-H,O-Z) - DIMENSION CXM(0:MAXAUF-1) - REAL :: WSAVE(2*MAXL),TRIGS(2*MAXL) - INTEGER IFAX(10) - - DO I=MNAUF+1,MAXL-1 - CXM(2*I)=0.0 - CXM(2*I+1)=0.0 - ENDDO - CALL FFT99(CXM,WSAVE,TRIGS,IFAX,1,1,MAXL,1,1) - DO I=0,MAXL-1 - CXM(I)=CXM(I+1) - ENDDO - - RETURN - END SUBROUTINE RFOURTR -C -C - SUBROUTINE GAULEG(X1,X2,X,W,N) -C BERECHNET DIE GAUSS+SCHEN BREITEN - IMPLICIT REAL (A-H,O-Z) - DIMENSION X(N),W(N) - PARAMETER (EPS=3.D-14) - M=(N+1)/2 - XM=0.5D0*(X2+X1) - XL=0.5D0*(X2-X1) - DO 12 I=1,M - Z=DCOS(3.141592654D0*(I-.25D0)/(N+.5D0)) -1 CONTINUE - P1=1.D0 - P2=0.D0 - DO 11 J=1,N - P3=P2 - P2=P1 - P1=((2.D0*J-1.D0)*Z*P2-(J-1.D0)*P3)/J -11 CONTINUE - PP=N*(Z*P1-P2)/(Z*Z-1.D0) - Z1=Z - Z=Z1-P1/PP - IF(ABS(Z-Z1).GT.EPS)GO TO 1 - X(I)=XM-XL*Z - X(N+1-I)=XM+XL*Z - W(I)=2.D0*XL/((1.D0-Z*Z)*PP*PP) - W(N+1-I)=W(I) -12 CONTINUE - RETURN - END SUBROUTINE GAULEG -C -C - SUBROUTINE PLGNFA(LL,X,Z) -C -C PLGNDN BERECHNET ALLE NORMIERTEN ASSOZIIERTEN -C LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) -C UND SCHREIBT SIE IN DAS FELD Z -C Die Polynome sind wie im ECMWF indiziert, d.h. -C P00,P10,P11,P20,P21,P22,... -C Ansonsten ist die Routine analog zu PLGNDN -C X IST DER COSINUS DES ZENITWINKELS ODER -C DER SINUS DER GEOGRAFISCHEN BREITE -C - IMPLICIT REAL (A-H,O-Z) - DIMENSION Z(0:((LL+3)*(LL+4))/2) -C - L=LL+2 - I=1 - Z(0)=1.D0 - FACT=1.D0 - POT=1.D0 - SOMX2=DSQRT(1.D0-X*X) - DO 14 J=0,L - DJ=DBLE(J) - IF(J.GT.0) THEN - FACT=FACT*(2.D0*DJ-1.D0)/(2.D0*DJ) - POT=POT*SOMX2 - Z(I)=DSQRT((2.D0*DJ+1.D0)*FACT)*POT - I=I+1 - ENDIF - IF(J.LT.L) THEN - Z(I)=X* - *DSQRT((4.D0*DJ*DJ+8.D0*DJ+3.D0)/(2.D0*DJ+1.D0))*Z(I-1) - I=I+1 - ENDIF - DK=DJ+2.D0 - DO 14 K=J+2,L - DDK=(DK*DK-DJ*DJ) - Z(I)=X*DSQRT((4.D0*DK*DK-1.D0)/DDK)*Z(I-1)- - * DSQRT(((2.D0*DK+1.D0)*(DK-DJ-1.D0)*(DK+DJ-1.D0))/ - * ((2.D0*DK-3.D0)*DDK))*Z(I-2) - DK=DK+1.D0 - I=I+1 -14 CONTINUE - RETURN - END SUBROUTINE PLGNFA - - - SUBROUTINE DPLGND(MNAUF,Z,DZ) -C -C DPLGND BERECHNET DIE ABLEITUNG DER NORMIERTEN ASSOZIIERTEN -C LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X) -C UND SCHREIBT SIE IN DAS FELD DZ -C DIE REIHENFOLGE IST -C P00(X),P01(X),P11(X),P02(X),P12(X),P22(X),..PLL(X) -C - IMPLICIT REAL (A-H,O-Z) - DIMENSION Z(0:((MNAUF+3)*(MNAUF+4))/2) - DIMENSION DZ(0:((MNAUF+2)*(MNAUF+3))/2) -C - IF(Z(0).NE.1.D0) THEN - WRITE(*,*) 'DPLGND: Z(0) must be 1.0' - STOP - ENDIF - - LLP=0 - LLH=0 - DO 1 I=0,MNAUF+1 - DO 2 J=I,MNAUF+1 - IF(I.EQ.J) THEN - WURZELA= - *DSQRT(DBLE((J+1)*(J+1)-I*I)/DBLE(4*(J+1)*(J+1)-1)) - DZ(LLH)=DBLE(J)*WURZELA*Z(LLP+1) - ELSE - WURZELB= - *DSQRT(DBLE((J+1)*(J+1)-I*I)/DBLE(4*(J+1)*(J+1)-1)) - DZ(LLH)= - *DBLE(J)*WURZELB*Z(LLP+1)-DBLE(J+1)*WURZELA*Z(LLP-1) - WURZELA=WURZELB - ENDIF - LLH=LLH+1 - LLP=LLP+1 -2 CONTINUE - LLP=LLP+1 -1 CONTINUE - RETURN - END SUBROUTINE DPLGND - - -* Spectral Filter of Sardeshmukh and Hoskins (1984, MWR) -* MM=Spectral truncation of field -* MMAX= Spectral truncation of filter -* - SUBROUTINE SPFILTER(FELDMN,MM,MMAX) - - IMPLICIT NONE - - INTEGER MM,MMAX,I,J,K,L - REAL FELDMN(0:(MM+1)*(MM+2)-1) - REAL KMAX,SMAX,FAK - - SMAX=0.1 - KMAX=-ALOG(SMAX) - KMAX=KMAX/(float(MMAX)*float(MMAX+1))**2 -c WRITE(*,*)'alogsmax',alog(smax),'KMAX:',KMAX - l=0 - do i=0,MM - do j=i,MM -c write(*,*) i,j,feld(k),feld(k)*exp(-KMAX*(j*(j+1))**2) - if(j .le. MMAX) then -c fak=exp(-KMAX*(j*(j+1))**2) - fak=1.0 - feldmn(2*l)=feldmn(2*l)*fak - feldmn(2*l+1)=feldmn(2*l+1)*fak - else - feldmn(2*l)=0. - feldmn(2*l+1)=0. - endif - l=l+1 - enddo - enddo - END SUBROUTINE SPFILTER - - END MODULE PHTOGR - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/posnam.f b/src/posnam.f deleted file mode 100644 index c5d12d2b9928e581f67ef0c6388dd3e641693aed..0000000000000000000000000000000000000000 --- a/src/posnam.f +++ /dev/null @@ -1,25 +0,0 @@ - SUBROUTINE POSNAM(KULNAM,CDNAML) -!------------------------------------- - -!--- position in namelist file. -! author: Mats Hamrud, ECMWF - - INTEGER, INTENT(IN) :: KULNAM - CHARACTER*(*), INTENT(IN) :: CDNAML - CHARACTER*120 CLINE - CHARACTER*1 CLTEST - REWIND(KULNAM) - ILEN=LEN(CDNAML) - 102 CONTINUE - CLINE=' ' - READ(KULNAM,'(A)') CLINE - IND1=INDEX(CLINE,'&'//CDNAML) - IF(IND1.EQ.0) GO TO 102 - CLTEST=CLINE(IND1+ILEN+1:IND1+ILEN+1) - IF((LGE(CLTEST,'0').AND.LLE(CLTEST,'9')).OR. - & (LGE(CLTEST,'A').AND.LLE(CLTEST,'Z'))) GO TO 102 - BACKSPACE(KULNAM) - - RETURN - END SUBROUTINE POSNAM - diff --git a/src/preconvert.f90 b/src/preconvert.f90 deleted file mode 100644 index c28610f2aecb31a3f4c3860d7a482ae0fa85d23f..0000000000000000000000000000000000000000 --- a/src/preconvert.f90 +++ /dev/null @@ -1,807 +0,0 @@ - PROGRAM PRECONVERT -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! ! -! PROGRAM PRECONVERT - PREPARES INPUT DATA FOR POP MODEL METEOR- ! -! OLOGICAL PREPROCESSOR ! -! ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! ! -! CALCULATION OF ETAPOINT ON A REGULAR LAMDA/PHI GRID AND WRITING ! -! U,V,ETAPOINT,T,PS,Q,SD,MSL,TCC,10U, 10V, 2T,2D,LSP,CP,SSHF,SSR, ! -! EWSS,NSSS TO AN OUTPUT FILE (GRIB 1 or 2 FORMAT). ! -! ! -! AUTHORS: L. HAIMBERGER, G. WOTAWA, 1994-04 ! -! adapted: A. BECK ! -! 2003-05-11 ! -! L. Haimberger 2006-12 V2.0 ! -! modified to handle arbitrary regular grids ! -! and T799 resolution data ! -! L. Haimberger 2010-03 V4.0 ! -! modified to grib edition 2 fields ! -! and T1279 resolution data ! -! ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! ! -! DESCRIPTION OF NEEDED INPUT: ! -! ! -! UNIT FILE PARAMETER(S) DATA REPRESENTATION ! -! ! -! 11 fort.11 T,U,V regular lamda phi grid ! -! 12 fort.12 D regular lamda phi grid ! -! 13 fort.13 LNSP fort.13 spherical harmonics ! -! 14 fort.14 SD,MSL,TCC,10U, ! -! 10V,2T,2D regular lamda phi grid ! -! 16 fort.16 LSP,CP,SSHF, ! -! SSR,EWSS,NSSS regular lamda phi grid ! -! 17 fort.17 Q regular lamda phi grid ! -! ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! ! -! DESCRIPTION OF OUTPUT: ! -! ! -! UNIT FILE PARAMETER(S) DATA REPRESENTATION ! -! ! -! 15 fort.15 U,V,ETA,T,PS, ! -! Q,SD,MSL,TCC, ! -! 10U,10V,2T,2D, regular lamda phi grid ! -! LSP,CP,SSHF, ! -! SSR,EWSS,NSSS ! -! ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! - - USE PHTOGR - USE GRTOPH - USE FTRAFO - USE RWGRIB2 - USE GRIB_API - - IMPLICIT NONE - - REAL, ALLOCATABLE, DIMENSION (:,:) :: LNPS - REAL, ALLOCATABLE, DIMENSION (:,:) :: Z - REAL, ALLOCATABLE, DIMENSION (:,:,:) :: T, UV , UV2 - REAL, ALLOCATABLE, DIMENSION (:,:,:) :: QA,OM,OMR - REAL, ALLOCATABLE, DIMENSION (:,:,:) :: DIV, ETA,ETAR - REAL, ALLOCATABLE, DIMENSION (:,:) :: DPSDL, DPSDM - REAL, ALLOCATABLE, DIMENSION (:,:,:) :: PS,DPSDT - REAL, ALLOCATABLE, DIMENSION (:,:,:) :: SURF,FLUX,OROLSM - REAL, ALLOCATABLE, DIMENSION (:) :: WSAVE,H,SINL,COSL,WSAVE2 - REAL, ALLOCATABLE, DIMENSION (:) :: BREITE, GBREITE,AK, BK,pv - -! Arrays for Gaussian grid calculations - - REAL :: X1,X2,RMS,MW,SIG,LAM - REAL,ALLOCATABLE :: CUA(:,:,:),CVA(:,:,:) - - REAL, ALLOCATABLE, DIMENSION (:,:) :: P,PP !,P2 - REAL, ALLOCATABLE, DIMENSION (:,:) :: XMN,HILFUV - REAL, ALLOCATABLE, DIMENSION (:) :: LNPMN,LNPMN2,LNPMN3 - REAL, ALLOCATABLE, DIMENSION (:) :: WEIGHT - REAL, ALLOCATABLE, DIMENSION (:,:) :: UGVG - REAL, ALLOCATABLE, DIMENSION (:,:) :: DG, ETAG - REAL, ALLOCATABLE, DIMENSION (:,:) :: GWSAVE - REAL, ALLOCATABLE, DIMENSION (:) :: PSG,HILF - -! end arrays for Gaussian grid calculations - - INTEGER, ALLOCATABLE, DIMENSION (:) :: MLAT,MPSURF,MPFLUX,MPORO,MPAR - INTEGER, ALLOCATABLE :: GIFAX(:,:) - - REAL PI,COSB,DAK,DBK,P00 - REAL URLAR8,JMIN1,LLLAR8,MAXBMIN1,PIR8,DCOSB - - INTEGER I,J,K,L,IERR,M,LTEST,MK,NGI,NGJ - INTEGER MFLUX,MSURF,MORO - INTEGER LUNIT,LUNIT2 - - INTEGER MAXL, MAXB, MLEVEL, LEVOUT,LEVMIN,LEVMAX - INTEGER MOMEGA,MOMEGADIFF,MGAUSS,MSMOOTH, MNAUF,META,METADIFF - INTEGER MDPDETA,METAPAR - REAL RLO0, RLO1, RLA0, RLA1 - CHARACTER*300 MLEVELIST - - INTEGER MAUF, MANF,IFAX(10) - - INTEGER IGRIB(1),iret,ogrib - - CHARACTER*80 FILENAME - - NAMELIST /NAMGEN/ & - MAXL, MAXB, & - MLEVEL,MLEVELIST,MNAUF,METAPAR, & - RLO0, RLO1, RLA0, RLA1, & - MOMEGA,MOMEGADIFF,MGAUSS,MSMOOTH,META,METADIFF,& - MDPDETA - - LTEST=1 - - call posnam (4,'NAMGEN') - read (4,NAMGEN) - - MAUF=INT(360.*(REAL(MAXL)-1.)/(RLO1-RLO0)+0.0001) -! PRINT*, MAUF - - MANF=INT(REAL(MAUF)/360.*(360.+RLO0)+1.0001) - IF(MANF .gt. MAUF) MANF=MANF-MAUF - - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! ALLOCATE VARIABLES ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - ALLOCATE (LNPS(0:(MNAUF+1)*(MNAUF+2)-1,1)) - - ALLOCATE (H(0:(MNAUF+2)*(MNAUF+3)/2)) - - - ALLOCATE (OM(MAXL, MAXB, MLEVEL)) - - ALLOCATE (ETA(MAXL,MAXB,MLEVEL)) - - ALLOCATE (PS(MAXL, MAXB,1),DPSDT(MAXL, MAXB,1)) - - - ALLOCATE (WSAVE(4*MAUF+15),WSAVE2(4*MAUF+15)) - - ALLOCATE (BREITE(MAXB),AK(MLEVEL+1),BK(MLEVEL+1),pv(2*mlevel+2)) - - ALLOCATE (MPAR(2)) - - ALLOCATE (COSL(MAXL),SINL(MAXL)) - - ALLOCATE (CUA(2,4,MLEVEL),CVA(2,4,MLEVEL)) - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! GAUSS STUFF ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - - IF(MGAUSS .EQ. 1) THEN - LUNIT=0 - FILENAME='fort.18' - - call grib_open_file(LUNIT, TRIM(FILENAME),'r') - - call grib_new_from_file(LUNIT,igrib(1), iret) - -! we can close the file - call grib_close_file(LUNIT) - -! call grib_get(igrib(1),'gridType', j) - - NGJ=MNAUF+1 - - ALLOCATE (GWSAVE(8*NGJ+15,NGJ/2)) - ALLOCATE(GIFAX(10,NGJ)) - ALLOCATE (GBREITE(NGJ),WEIGHT(NGJ)) - ALLOCATE (MLAT(NGJ)) - ALLOCATE (P(0:((MNAUF+3)*(MNAUF+4))/2,NGJ/2)) - ALLOCATE (PP(NGJ/2,0:((MNAUF+3)*(MNAUF+4))/2)) - ALLOCATE (Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB)) - - call grib_get(igrib(1),'numberOfPointsAlongAMeridian', NGJ) - - ! get as a integer - call grib_get(igrib(1),'pl', MLAT) - - NGI=SUM(MLAT) - - call grib_get(igrib(1),'numberOfVerticalCoordinateValues',mk) - - IF(mk/2-1 .ne. MLEVEL) THEN - WRITE(*,*) 'FATAL: Number of model levels',mk, & - ' does not agree with', MLEVEL,' in namelist' - STOP - ENDIF - call grib_get(igrib(1),'pv',pv) - AK=pv(1:1+MLEVEL) - BK=pv(2+MLEVEL:2*MLEVEL+2) - - ALLOCATE (LNPMN(0:(MNAUF+1)*(MNAUF+2)-1)) - ALLOCATE (LNPMN2(0:(MNAUF+1)*(MNAUF+2)-1)) - ALLOCATE (UGVG(NGI, 2*MLEVEL),HILFUV(2*MAXL,2)) - - - ALLOCATE (DPSDL(NGI,1),DPSDM(NGI,1)) - - ALLOCATE (PSG(NGI),HILF(NGI)) - ALLOCATE (UV(MAXL, MAXB, 2*MLEVEL)) -! ALLOCATE (UV2(MAXL, MAXB, 2*MLEVEL)) - - ALLOCATE (XMN(0:(MNAUF+1)*(MNAUF+2)-1, 2*MLEVEL)) - ALLOCATE (DG(NGI,MLEVEL),ETAG(NGI,MLEVEL)) - -! Initialisieren Legendretransformation -! auf das LaT/LON Gitter - - PI=ACOS(-1.D0) -!$OMP PARALLEL DO - DO 20 J=1,MAXB - - BREITE(J)=SIN((RLA1-(J-1.D0)*(RLA1-RLA0)/(MAXB-1))* PI/180.D0) - - CALL PLGNFA(MNAUF,BREITE(J),Z(0,J)) - -20 CONTINUE -!$OMP END PARALLEL DO - -! Avoid possible Pole problem -! IF(RLA0 .EQ. -90.0) BREITE(MAXB)=sin(-89.99*PI/180.d0) -! IF(RLA1 .EQ. 90.0) BREITE(1)=sin(89.99*PI/180.d0) - -! Initialisation of fields for FFT and Legendre transformation -! to Gaussian grid and back to phase space - X1=-1.D0 - X2=1.D0 - CALL GAULEG(X1,X2,GBREITE,WEIGHT,NGJ) - -!$OMP PARALLEL DO PRIVATE(M) - DO J=1,NGJ/2 - CALL PLGNFA(MNAUF,GBREITE(J),P(:,J)) - DO M=0,(MNAUF+3)*(MNAUF+4)/2 - PP(J,M)=P(M,J) - ENDDO - ENDDO -!$OMP END PARALLEL DO - - -! MPAR(1)=152 - FILENAME='fort.12' - CALL READSPECTRAL(FILENAME,LNPMN,MNAUF,1,MLEVEL,(/152/),AK,BK) -! goto 111 - CALL SET99(WSAVE,IFAX,mauf) - CALL PHGCUT(LNPMN,PS,WSAVE,IFAX,Z, & - MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,1) - CALL STATIS(MAXL,MAXB,1,EXP(PS),RMS,MW,SIG) - WRITE(*,'(A12,3F12.4)') 'STATISTICS: ',RMS,MW,SIG - - DO J=1,NGJ/2 - CALL SET99(GWSAVE(1,J),GIFAX(1,J),MLAT(J)) - ENDDO - CALL PHGR213(LNPMN,HILF,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,1) - PSG=HILF - CALL GRPH213(LNPMN2,PSG,GWSAVE,GIFAX,PP,WEIGHT,MLAT, & - MNAUF,NGI,NGJ,1) - CALL PHGR213(LNPMN2,HILF,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,1) - - - HILF=exp(PSG)-exp(HILF) - - CALL STATIS(NGI,1,1,HILF,RMS,MW,SIG) - WRITE(*,'(A12,3F11.4)') 'STATISTICS: ',RMS,MW,SIG - - PSG=EXP(PSG) - HILF=PSG - CALL STATIS(NGI,1,1,HILF,RMS,MW,SIG) - WRITE(*,'(A12,3F11.4)') 'STATISTICS: ',RMS,MW,SIG - - 111 FILENAME='fort.10' - CALL READSPECTRAL(FILENAME, & - XMN,MNAUF,2*MLEVEL,MLEVEL,(/131,132/),AK,BK) -! Transformieren des Windes auf das Gaussgitter - CALL PHGR213(XMN,UGVG,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,2*MLEVEL) - DO K=1,MLEVEL -! North Pole - CALL JSPPOLE(XMN(:,K),1,MNAUF,.TRUE.,CUA(:,:,K)) - CALL JSPPOLE(XMN(:,MLEVEL+K),1,MNAUF,.TRUE.,CVA(:,:,K)) -! South Pole - CALL JSPPOLE(XMN(:,K),-1,MNAUF,.TRUE.,CUA(:,3:4,K)) - CALL JSPPOLE(XMN(:,MLEVEL+K),-1,MNAUF,.TRUE.,CVA(:,3:4,K)) - ENDDO - - DO K=1,2*MLEVEL - IF(MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH) - ENDDO - CALL PHGCUT(XMN,UV,WSAVE,IFAX,Z, & - MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,2*MLEVEL) - - - 112 FILENAME='fort.13' - CALL READSPECTRAL(FILENAME,XMN,MNAUF,MLEVEL,MLEVEL,(/155/),AK,BK) -! Transformieren der horizontalen Divergenz auf das Gaussgitter - CALL PHGR213(XMN,DG,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,MLEVEL) - - -! Berechnung des Gradienten des Logarithmus des Bodendrucks -! auf dem Gaussgitter - CALL PHGRAD(LNPMN,DPSDL,DPSDM,GWSAVE,GIFAX,P,H,MLAT,MNAUF,NGI,NGJ,1) - -! Berechnung der Vertikalgeschwindigkeit auf dem Gaussgitter - CALL CONTGL(HILF,DPSDL,DPSDM,DG,UGVG(:,1),UGVG(:,MLEVEL+1), & - GBREITE,ETAG,MLAT,AK,BK,NGI,NGJ,MLEVEL) - - - CALL GRPH213(XMN,ETAG,GWSAVE,GIFAX,PP,WEIGHT,MLAT, & - MNAUF,NGI,NGJ,MLEVEL) - DO K=1,MLEVEL - IF(MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH) - ENDDO - CALL PHGCUT(XMN,ETA,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,MLEVEL) - - CALL GRPH213(XMN,HILF,GWSAVE,GIFAX,PP,WEIGHT,MLAT, MNAUF,NGI,NGJ,1) - - IF(MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,1),MNAUF,MSMOOTH) - CALL PHGCUT(XMN,DPSDT,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,1) -! GOTO 114 - - CALL STATIS(MAXL,MAXB,1,DPSDT,RMS,MW,SIG) - WRITE(*,'(A12,3F11.4)') 'STATISTICS DPSDT: ',RMS,MW,SIG - - IF(MOMEGADIFF .ne. 0) THEN -! Berechnung von Omega auf dem Gaussgitter - CALL OMEGA(PSG,DPSDL,DPSDM,DG,UGVG(:,1),UGVG(:,MLEVEL+1), & - GBREITE,ETAG,MLAT,AK,BK,NGI ,NGJ,MLEVEL) - - CALL GRPH213(XMN,ETAG,GWSAVE,GIFAX,PP,WEIGHT,MLAT,& - MNAUF,NGI,NGJ,MLEVEL) - DO K=1,MLEVEL - IF(MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH) - ENDDO - CALL PHGCUT(XMN,OM,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,MLEVEL) - - ENDIF !MOMEGA - - CALL GRPH213(XMN,PSG,GWSAVE,GIFAX,PP,WEIGHT,MLAT,MNAUF,NGI,NGJ,1) - CALL PHGCUT(XMN,PS,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,1) - - CALL STATIS(MAXL,MAXB,1,PS,RMS,MW,SIG) - WRITE(*,'(A12,3F11.4)') 'STATISTICS: ',RMS,MW,SIG - - 114 DEALLOCATE(HILF,PSG,DPSDL,DPSDM,ETAG,DG,LNPMN) - -! ALLOCATE (UV(MAXL, MAXB, 2*MLEVEL)) -! CALL GRPH213(XMN,UGVG,GWSAVE,GIFAX,PP,WEIGHT,MLAT, -! *MNAUF,NGI,NGJ,2*MLEVEL) -! DO K=1,2*MLEVEL -! IF(MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH) -! ENDDO -! CALL PHGCUT(XMN,UV,WSAVE,IFAX,Z, -! *MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,2*MLEVEL) - DEALLOCATE(PP,P,UGVG,MLAT,GBREITE,WEIGHT,GWSAVE,XMN) - -! CALL ETAGAUSS(Z,WSAVE -! *,BREITE,UV,ETA,OM,PS, -! *MAUF,MAXB,MAXL,MANF,MNAUF,MLEVEL,MSMOOTH) - - ELSE - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! READING OF PREPARED METEOROLOGICAL FIELDS ! -! ! -! THE FOLLOWING FIELDS ARE EXPECTED: ! -! ! -! UNIT 11: T,U,V (REGULAR GRID) ! -! UNIT 17: Q (REGULAR GRID) ! -! UNIT 13: D (REGULAR GRID) ! -! UNIT 12: LNSP (SPHERICAL HARMONICS) ! -! UNIT 14: SURFACE DATA (REGULAR GRID) ! -! UNIT 16: FLUX DATA (REGULAR GRID) ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! - ALLOCATE (MLAT(MAXB)) - MLAT=MAXL - ALLOCATE (Z(0:((MNAUF+3)*(MNAUF+4))/2,1)) - ALLOCATE (DPSDL(MAXL,MAXB),DPSDM(MAXL,MAXB)) - ALLOCATE (UV(MAXL, MAXB, 2*MLEVEL),DIV(MAXL,MAXB,MLEVEL)) - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! READING OF SURFACE PRESSURE ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - FILENAME='fort.12' - CALL READSPECTRAL(FILENAME,LNPS,MNAUF,1,MLEVEL,(/152/),AK,BK) - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! READING OF U,V ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! -! OPENING OF UNBLOCKED GRIB FILE -! - FILENAME='fort.10' - CALL READLATLON(FILENAME,UV,MAXL,MAXB,2*MLEVEL,(/131,132/)) - - - PI=ACOS(-1.D0) - DO J=1,MAXB - - BREITE(J)=SIN((RLA1-(J-1.D0)*(RLA1-RLA0)/(MAXB-1))*PI/180.D0) - - ENDDO -! Avoid possible Pole problem -! IF(RLA0 .EQ. -90.0) BREITE(MAXB)=sin(-89.99*PI/180.d0) -! IF(RLA1 .EQ. 90.0) BREITE(1)=sin(89.99*PI/180.d0) - - DO K=1,2*MLEVEL - DO J=1,MAXB - COSB=SQRT(1.0-(BREITE(J))*(BREITE(J))) - IF(RLA0 .EQ. -90.0 .AND. J .EQ. MAXB .OR. & - RLA1 .EQ. 90.0 .AND. J .EQ. 1) then - UV(:,J,K)=UV(:,J,K)/1.D6 - else - UV(:,J,K)=UV(:,J,K)*COSB - endif - ENDDO - ENDDO - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! READING OF LNSP on grid ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -! For debugging only -! FILENAME='LNSPG_G.20060330.600' -! INQUIRE(FILE=FILENAME,EXIST=EX) -! CALL READLATLON(FILENAME,QA, -! *MAXL,MAXB,1,1,(/152/)) - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! READING OF DIVERGENCE ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - IF(META .EQ. 0 .OR. METADIFF .EQ. 1) THEN - FILENAME='fort.13' - CALL READLATLON(FILENAME,DIV,MAXL,MAXB,MLEVEL,(/155/)) - ENDIF - - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! CALCULATION OF ETAPOINT --> TOTAL TIME DERIVATIVE OF ! -! ECMWF VERTICAL COORDINATE ETA MULTIPLIED BY DERIVATIVE ! -! OF PRESSURE IN ETA DIRECTION ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -! Initialisieren Legendretransformation -! auf das LaT/LON Gitter -! Without Gaussian grid calculation Legendre Polynomials are calculated -! only for one latitude to save space - - DO J=1,MAXB - - CALL PLGNFA(MNAUF,BREITE(J),Z(0,1)) - - CALL PHGCUT(LNPS,PS(:,J,1),WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,1,1) - - - IF(META .EQ. 0 .or. METADIFF .EQ. 1 ) THEN - CALL PHGRACUT(LNPS,DPSDL(:,J),DPSDM(:,J),WSAVE,IFAX,Z,H,MAUF, & - MNAUF,MAXL,1,MANF,1) - ENDIF - ENDDO - - PS=EXP(PS) - -! For debugging only - CALL STATIS(MAXL,MAXB,1,PS(:,:,1),RMS,MW,SIG) - WRITE(*,'(A12,3F11.4)') 'STATISTICS: ',RMS,MW,SIG - - - IF(MOMEGADIFF .ne. 0) THEN - - CALL OMEGA(PS,DPSDL,DPSDM,DIV,UV(:,:,1),UV(:,:,MLEVEL+1), & - BREITE,OM,MLAT,AK,BK,MAXL*MAXB,MAXB,MLEVEL) - ENDIF - - IF(META .EQ. 0 .OR. METADIFF .ne. 0) THEN - DPSDT=PS - CALL CONTGL(DPSDT,DPSDL,DPSDM,DIV,UV(:,:,1),UV(:,:,MLEVEL+1), & - BREITE,ETA,MLAT,AK,BK,MAXL*MAXB,MAXB,MLEVEL) - ENDIF - - ENDIF ! MGAUSS - -! CREATE FILE VERTICAL.EC NEEDED BY POP MODEL - - open(21,file='VERTICAL.EC') - write(21,'(a)') - write(21,'(a)') 'VERTICAL DISCRETIZATION OF POP MODEL' - write(21,'(a)') - write(21,'(i3,a)') MLEVEL,' number of layers' - write(21,'(a)') - write(21,'(a)') '* A(NLEV+1)' - write(21,'(a)') - do 205 i=1,MLEVEL+1 -205 write(21,'(f18.12)') AK(I) - write(21,'(a)') - write(21,'(a)') '* B(NLEV+1)' - write(21,'(a)') - do 210 i=1,MLEVEL+1 -210 write(21,'(f18.12)') BK(I) - close(21) - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! READING OF OMEGA ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - IF(MOMEGA .NE. 0 ) THEN - - - - ALLOCATE (OMR(MAXL, MAXB, MLEVEL)) - - FILENAME='fort.19' - CALL READLATLON(FILENAME,OMR,MAXL,MAXB,MLEVEL,(/135/)) - - IF(MOMEGADIFF .NE. 0 ) THEN - - DO K=1,MLEVEL - CALL STATIS(MAXL,MAXB,1,ETA(:,:,K),RMS,MW,SIG) - WRITE(*,'(A12,I3,3F11.4)') ' ETA: ',K,RMS,MW,SIG - CALL STATIS(MAXL,MAXB,1,OMR(:,:,K),RMS,MW,SIG) - WRITE(*,'(A12,I3,3F11.4)') ' OMEGA: ',K,RMS,MW,SIG - CALL STATIS(MAXL,MAXB,1,OM(:,:,K)-OMR(:,:,K),RMS,MW,SIG) - WRITE(*,'(A12,I3,3F11.4)') 'OMEGA DIFF: ',K,RMS,MW,SIG - ENDDO - - ENDIF - ENDIF - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! READING OF ETA ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - IF(META .NE. 0 ) THEN - - ALLOCATE (ETAR(MAXL, MAXB, MLEVEL)) - - P00=101325. - FILENAME='fort.21' - CALL READLATLON(FILENAME,ETAR,MAXL,MAXB,MLEVEL,(/77/)) - - if(MDPDETA .EQ. 1) THEN - DO K=1,MLEVEL - DAK=AK(K+1)-AK(K) - DBK=BK(K+1)-BK(K) - DO J=1,MAXB - DO I=1,MAXL - ETAR(I,J,K)=2*ETAR(I,J,K)*PS(I,J,1)*(DAK/PS(I,J,1)+DBK)/ & - (DAK/P00+DBK) - IF(K .GT. 1) ETAR(I,J,K)=ETAR(I,J,K)-ETAR(I,J,K-1) - ENDDO - ENDDO - ENDDO - ENDIF - - IF(METADIFF .NE. 0 ) THEN - - DO K=1,MLEVEL - CALL STATIS(MAXL,MAXB,1,ETA(:,:,K),RMS,MW,SIG) - WRITE(*,'(A12,I3,3F11.4)') ' ETA: ',K,RMS,MW,SIG - CALL STATIS(MAXL,MAXB,1,ETAR(:,:,K),RMS,MW,SIG) - WRITE(*,'(A12,I3,3F11.4)') ' ETAR: ',K,RMS,MW,SIG - CALL STATIS(MAXL,MAXB,1,ETA(:,:,K)-ETAR(:,:,K),RMS,MW,SIG) - WRITE(*,'(A12,I3,3F11.4)') 'ETA DIFF: ',K,RMS,MW,SIG - ENDDO - DO K=1,MLEVEL - WRITE(*,'(I3,2F11.4)') K,ETA(1,MAXB/2,K),ETAR(1,MAXB/2,K) - ENDDO - ELSE - ETA=ETAR - ENDIF - ENDIF - - ALLOCATE (T(MAXL, MAXB, MLEVEL)) - ALLOCATE (QA(MAXL, MAXB, MLEVEL)) -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! READING OF T ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! -! OPENING OF UNBLOCKED GRIB FILE -! - FILENAME='fort.11' - CALL READLATLON(FILENAME,T,MAXL,MAXB,MLEVEL,(/130/)) - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! READING OF SPECIFIC HUMIDITY ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - FILENAME='fort.17' - CALL READLATLON(FILENAME,QA,MAXL,MAXB,MLEVEL,(/133/)) - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! TEST READING OF UV from MARS (debug only) ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -! FILENAME='fort.22' -! CALL READLATLON(FILENAME,UV2,MAXL,MAXB,2*MLEVEL,2,(/131,132/)) - - - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! WRITE MODEL LEVEL DATA TO fort.15 ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -! Calculation of etadot in CONTGL needed scaled winds (ucosphi,vcosphi) -! Now we are transforming back to the usual winds. - DO K=1,MLEVEL - DO J=2,MAXB-1 - COSB=SQRT(1.0-(BREITE(J))*(BREITE(J))) - UV(:,J,K)=UV(:,J,K)/COSB - UV(:,J,MLEVEL+K)=UV(:,J,MLEVEL+K)/COSB - ENDDO -! special treatment for poles, if necessary. - DO J=1,MAXB,MAXB-1 - COSB=SQRT(1.0-(BREITE(J))*(BREITE(J))) - if(1.0-BREITE(J)*BREITE(J) .gt. 0 .OR. MGAUSS .NE. 1) then - IF(RLA0 .EQ. -90.0 .AND. J .EQ. MAXB .OR. & - RLA1 .EQ. 90.0 .AND. J .EQ. 1) then - UV(:,J,K)=UV(:,J,K)*1.D6 - UV(:,J,MLEVEL+K)=UV(:,J,MLEVEL+K)*1.D6 - else - UV(:,J,K)=UV(:,J,K)/COSB - UV(:,J,MLEVEL+K)=UV(:,J,MLEVEL+K)/COSB - endif - else - HILFUV(5:MAXL,:)=0. - HILFUV(1:2,:)=0. - IF(J.EQ.MAXB) THEN -! Suedpol - HILFUV(3:4,1)=CUA(:,4,K) - HILFUV(3:4,2)=CVA(:,4,K) - ELSE -! Nordpol - HILFUV(3:4,1)=CUA(:,2,K) - HILFUV(3:4,2)=CVA(:,2,K) - ENDIF - CALL RFOURTR(HILFUV(:,1),WSAVE,IFAX,MAXL/2-1,MAXL,-1) - DO I=0,MAXL-1 - IF(MANF+I.LE.MAXL) THEN - UV(I+1,J,K)=HILFUV(MANF+I,1) - ELSE - UV(I+1,J,K)=HILFUV(MANF-MAXL+I,1) - ENDIF - ENDDO - CALL RFOURTR(HILFUV(:,2),WSAVE,IFAX,MAXL/2-1,MAXL,-1) - DO I=0,MAXL-1 - IF(MANF+I.LE.MAXL) THEN - UV(I+1,J,MLEVEL+K)=HILFUV(MANF+I,2) - ELSE - UV(I+1,J,MLEVEL+K)=HILFUV(MANF-MAXL+I,2) - ENDIF - ENDDO - endif - ENDDO - ENDDO - -! open output file - call grib_open_file(LUNIT,'fort.15','w') - -! we use temperature on lat/lon on model levels as template for model level data - LUNIT2=0 - call grib_open_file(LUNIT2,'fort.11','r') - call grib_new_from_file(LUNIT2,igrib(1), iret) - call grib_close_file(LUNIT2) - - - CALL WRITELATLON(LUNIT,igrib(1),ogrib,UV(:,:,1),MAXL,MAXB,MLEVEL,MLEVELIST,1,(/131/)) - - CALL WRITELATLON(LUNIT,igrib(1),ogrib,UV(:,:,MLEVEL+1),MAXL,MAXB,MLEVEL,MLEVELIST,1,(/132/)) - - IF(MDPDETA .ne. 1 .AND. MGAUSS .EQ. 0 .and. META .eq. 1) THEN - CALL WRITELATLON(LUNIT,igrib(1),ogrib,ETA,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/77/)) - ELSE - CALL WRITELATLON(LUNIT,igrib(1),ogrib,ETA,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/METAPAR/)) - ENDIF - - CALL WRITELATLON(LUNIT,igrib(1),ogrib,T,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/130/)) - - CALL WRITELATLON(LUNIT,igrib(1),ogrib,PS,MAXL,MAXB,1,'1',1,(/134/)) - - call grib_set(igrib(1),"levelType","ml") - call grib_set(igrib(1),"typeOfLevel","hybrid") - CALL WRITELATLON(LUNIT,igrib(1),ogrib,QA,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/133/)) - - - IF(MOMEGA .EQ. 1) THEN - call grib_open_file(LUNIT2,'fort.25','w') - CALL WRITELATLON(LUNIT2,igrib(1),ogrib,OMR,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/135/)) - - IF(MOMEGADIFF .EQ. 1) THEN - - CALL WRITELATLON(LUNIT2,igrib(1),ogrib,DPSDT,MAXL,MAXB,1,'1',1,(/158/)) - - OM=OM-OMR - CALL WRITELATLON(LUNIT2,igrib(1),ogrib,OM,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/001/)) - call grib_close_file(LUNIT2) - ENDIF - ENDIF - - IF(META .EQ. 1 .and. METADIFF .EQ. 1) THEN - call grib_open_file(LUNIT2,'fort.26','w') - CALL WRITELATLON(LUNIT2,igrib(1),ogrib,ETAR,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/135/)) - -! IF(MOMEGADIFF .EQ. 1) THEN - - CALL WRITELATLON(LUNIT2,igrib(1),ogrib,DPSDT,MAXL,MAXB,1,'1',1,(/158/)) - - OM=ETA-ETAR - CALL WRITELATLON(LUNIT2,igrib(1),ogrib,OM,MAXL,MAXB,MLEVEL,MLEVELIST,1,(/001/)) - call grib_close_file(LUNIT2) -! ENDIF - ENDIF - - - call grib_close_file(LUNIT) - - - - 2000 STOP 'SUCCESSFULLY FINISHED CONVERT_PRE: CONGRATULATIONS' - 3000 STOP 'ROUTINE CONVERT_PRE: ERROR' - 9999 stop 'ROUTINE CONVERT_PRE: ERROR' - END - - - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - INTEGER FUNCTION IA (FIELD1,NI,NJ,NK,G) - - IMPLICIT NONE - INTEGER NI,NJ,NK,I,J,K - REAL FIELD1(NI,NJ,NK) - REAL G - REAL RMIN,RMAX,XMAX,A,A1,A2 - - RMAX=FIELD1(1,1,1) - RMIN=FIELD1(1,1,1) - - DO 100 K=1,NK - DO 100 J=1,NJ - DO 100 I=1,NI - IF (FIELD1(I,J,K).GT.RMAX)RMAX=FIELD1(I,J,K) - IF (FIELD1(I,J,K).LT.RMIN)RMIN=FIELD1(I,J,K) -100 CONTINUE - - IF (ABS(RMIN).GT.RMAX.OR.ABS(RMIN).EQ.RMAX) THEN - XMAX=ABS(RMIN) - ELSE - XMAX=RMAX - ENDIF - - IF (XMAX.EQ.0) THEN - IA = 0 - RETURN - ENDIF - - A1=LOG10 ((G/10.d0)/XMAX) - A2=LOG10 ( G/XMAX ) - IF(A1 .gt. A2) THEN - A=A2 - ELSE - A=A1 - ENDIF - - IF (A.GT.0) IA=INT(A) - IF (A.LT.0) IA=INT(A-1.0) - - RETURN - END - - SUBROUTINE STATIS (NI,NJ,NK,PHI,RMS,MW,SIG) - IMPLICIT REAL (A-H,O-Z) - - REAL PHI(NI,NJ,NK),SIG,MW,RMS,P - - N=NI*NJ*NK - - RMS=0. - MW=0. - - DO 10 I=1,NI - DO 10 J=1,NJ - DO 10 K=1,NK - P=PHI(I,J,K) - RMS=RMS+P*P - MW=MW+P -10 CONTINUE - - RMS=SQRT(RMS/N) - MW=MW/N - - IF(RMS*RMS-MW*MW.LT.0.) THEN - SIG=0.0 - ELSE - SIG=SQRT(RMS*RMS-MW*MW) - ENDIF - - RETURN - END -